打印

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

[复制链接]
1582|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
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

粉丝