YOUJIM 发表于 2009-3-3 10:21

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

用的是已经移植好的UCOS工程模板,在调用&nbsp;OS_ENTER_CRITICAL();&nbsp;&nbsp;进入临界段执行后,当串口发出中断时,依然转到串口中断服务函数。<br /><br />难道不能屏蔽硬件中断?&nbsp;&nbsp;<br /><br />OS_ENTER_CRITICAL();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//进入临界段<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Disp_Imgg();&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />OS_EXIT_CRITICAL();<br /><br />此法不行,我就临时关闭串中断UARTDisable(UART1_BASE);果然在进入Disp_Imgg()时不会跳转到中断服务函数中,但是当执行Disp_Imgg()后,启用串口中断,依然保留着在执行Disp_Imgg()时间内的中断,等于延时了中断的到来,这也是想不明白的。<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IntDisable(UART1_BASE);&nbsp;&nbsp;&nbsp;&nbsp;//关闭串口中断<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Disp_Imgg();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IntEnable(UART1_BASE);&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><br />//中断服务函数<br /><br />void&nbsp;&nbsp;UART1_ISR(void)<br />{&nbsp;&nbsp;//OSIntEnter();&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;static&nbsp;&nbsp;unsigned&nbsp;short&nbsp;&nbsp;n&nbsp;&nbsp;=&nbsp;&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;char&nbsp;&nbsp;c;<br />&nbsp;&nbsp;&nbsp;&nbsp;char&nbsp;&nbsp;buf;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;UARTIntClear(UART1_BASE&nbsp;,&nbsp;UART_INT_RX&nbsp;|&nbsp;UART_INT_RT);<br />&nbsp;&nbsp;&nbsp;&nbsp;c&nbsp;&nbsp;=&nbsp;&nbsp;UARTCharGet(UART1_BASE);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(&nbsp;c&nbsp;&nbsp;==&nbsp;&nbsp;'\r'&nbsp;)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;buf&nbsp;&nbsp;=&nbsp;&nbsp;'\0';<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;n&nbsp;&nbsp;=&nbsp;&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UART_Puts(&quot;THEBUF++\r\n&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UART_Puts(buf);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WhereID(buf);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UART_Puts(&quot;--buzzer....\r\n&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(&nbsp;n&nbsp;&nbsp;&lt&nbsp;&nbsp;UART1_RX_MAX&nbsp;)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(&nbsp;isprint(c)&nbsp;)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;buf&nbsp;&nbsp;=&nbsp;&nbsp;c;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UART_Puts(&quot;THEN++\r\n&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;//&nbsp;OSIntExit();<br />}<br /><br /><br /><br />请大家帮忙解决,谢谢!<br />

youjim 发表于 2009-3-4 09:01

顶。。

顶。。。帮帮忙啦。。。。想不通呀。。

johninfo 发表于 2009-3-6 17:17

简单的回答一下

一:ucos的临界段不支持嵌套,检查Disp_Imgg中是否有任何的系统调用。<br />二:关闭中断后打开中断当然等于延时了中断的到来。

huifly520 发表于 2009-3-8 17:26

处理器有关

这也许是和处理器有关,我调过LPC2300的,虽然不是一样的问题。&nbsp;<br />就是:<br />&nbsp;&nbsp;&nbsp;&nbsp;终端不能写成&nbsp;__irq&nbsp;ISRfunction<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;必须&nbsp;__ISRfunction
页: [1]
查看完整版本: UC/OS-II 无法屏蔽串口中断问题 1138开发板