打印
[ZLG-ARM]

UC/OS-II 无法屏蔽串口中断问题 1138开发板

[复制链接]
1153|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
YOUJIM|  楼主 | 2009-3-3 10:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
用的是已经移植好的UCOS工程模板,在调用 OS_ENTER_CRITICAL();  进入临界段执行后,当串口发出中断时,依然转到串口中断服务函数。

难道不能屏蔽硬件中断?  

OS_ENTER_CRITICAL();        //进入临界段
       
        Disp_Imgg();  
         
OS_EXIT_CRITICAL();

此法不行,我就临时关闭串中断UARTDisable(UART1_BASE);果然在进入Disp_Imgg()时不会跳转到中断服务函数中,但是当执行Disp_Imgg()后,启用串口中断,依然保留着在执行Disp_Imgg()时间内的中断,等于延时了中断的到来,这也是想不明白的。

      
        IntDisable(UART1_BASE);    //关闭串口中断
        Disp_Imgg();
       IntEnable(UART1_BASE);   
       

//中断服务函数

void  UART1_ISR(void)
{  //OSIntEnter(); 
    static  unsigned short  n  =  0;
    char  c;
    char  buf[UART1_RX_MAX+1];

    UARTIntClear(UART1_BASE , UART_INT_RX | UART_INT_RT);
    c  =  UARTCharGet(UART1_BASE);

    if ( c  ==  '\r' ) {
        buf[n]  =  '\0';
        n  =  0;
         UART_Puts("THEBUF++\r\n");
        UART_Puts(buf);
        WhereID(buf);
        UART_Puts("--buzzer....\r\n");
    } else {
        if ( n  <  UART1_RX_MAX ) {
            if ( isprint(c) ) {
                buf[n++]  =  c;
                 UART_Puts("THEN++\r\n");
                 
            }
        }
    }
    
   // OSIntExit();
}

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

8

主题

12

帖子

0

粉丝