首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

XDG128 中断口导致死机

XDG128 中断口导致死机

请教各位 ,我用XDG128,移植了UCOS系统,我在PH口作为中断输入口 ,当PH口上有杂波输入时,系统就死机(单片机好像没有死机,好像进入了空闲任务的死循环),但我不用操作系统时,PH口上无论有多少杂波也不会导致单片机死机,请教在用ucos系统时PH口上有杂波输入时怎么样处理才不死机
以下是UCOS系统中处理中断的程序,分析分析
void interrupt 25 PH_INT(void){       //PH口中断,引脚PH0--PH3 输入 DisableInterrupts;               //关中断
//-----------------------------------------------------------------------
   asm
    {
      ldaa PPAGE;
      psha;
    }         // 保存PPAGE
OSIntEnter();
   if(OSIntNesting == 1){
asm
   {
     ldx OSTCBCur;
     sts 0,x;
   }
}  
//======================================================  
//===================中间这里是中断服务程序不用管=====
    PHcpu12_now_cnt8us=(TCNT>>1)|(out_TCNT<<15);
   // PORTB_PB0=~PORTB_PB0;
   
    k_isr=1;
    for(i_isr=0;i_isr<2;i_isr++){
         if(PIFH&PIEH&k_isr){                //处理PHIN.x中断
            PIFH=k_isr;                 //清除中断标志
            cpu12_PTH_state=i_isr;      //确定PH0 or PH1 中断
            cpu12_PTH_up_down=(PTIH&k_isr)>>i_isr;    // 1: 上升沿    0:下降沿
            PPSH=(((~(cpu12_PTH_up_down))&(0x01))<<i_isr)|((~(1<<i_isr))&PPSH);
            break;
         }
         k_isr=k_isr<<1;     
    }
    PIFH=0XFF;

   
    for(i_isr=0;i_isr<2;i_isr++)
    {
        if(i_isr==cpu12_PTH_state)
        {
            if(cpu12_PTH_up_down==1)
            {
                                                   
                PPSJ=PPSJ|(1<<i_isr);                           //PJ口上升沿捕捉,同步
                PH_SW=i_isr;
                err=OSSemPost(ph_sem);                          //这里代表一个周期结束
               
            }else
            {
                PH_up_down8us[i_isr][1]= PHcpu12_now_cnt8us;     // down time
                PH_up_old8us[i_isr]= PH_up_down8us[i_isr][0]; //把上一个上降沿时间存起来  
                tst=i_isr;
                asm("nop");               
            }
        }
    }
   
  //=============================================================
OSIntExit();   // exit interrupt and task switch
   asm
  {
    pula;
    staa PPAGE;
    rti;
  }
     
//---------------------------------------------------------------------------
// EnableInterrupts;              //开中断
}
返回列表