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

[复制链接]
 楼主| YOUJIM 发表于 2009-3-3 10:21 | 显示全部楼层 |阅读模式
用的是已经移植好的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();
}



请大家帮忙解决,谢谢!
youjim 发表于 2009-3-4 09:01 | 显示全部楼层

顶。。

顶。。。帮帮忙啦。。。。想不通呀。。
johninfo 发表于 2009-3-6 17:17 | 显示全部楼层

简单的回答一下

一:ucos的临界段不支持嵌套,检查Disp_Imgg中是否有任何的系统调用。
二:关闭中断后打开中断当然等于延时了中断的到来。
huifly520 发表于 2009-3-8 17:26 | 显示全部楼层

处理器有关

这也许是和处理器有关,我调过LPC2300的,虽然不是一样的问题。 
就是:
    终端不能写成 __irq ISRfunction
                    必须 __ISRfunction
您需要登录后才可以回帖 登录 | 注册

本版积分规则

8

主题

12

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部

8

主题

12

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部