[ZLG-ARM] 中间件串口部分的不解

[复制链接]
3041|5
 楼主| liujigan 发表于 2007-6-30 20:49 | 显示全部楼层 |阅读模式
周立功开发板中间件之串口驱动中,串口接收、发送部分中有一个过程:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;uint8&nbsp;UART0Getch(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;uint8&nbsp;err;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;OS_ENTER_CRITICAL();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*关中断*/<br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;((U0LSR&nbsp;&&nbsp;0x00000001)&nbsp;==&nbsp;0)<br />&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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;U0IER&nbsp;=&nbsp;U0IER&nbsp;|&nbsp;0x01;&nbsp;&nbsp;&nbsp;&nbsp;&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;OSSemPend(Uart0Sem,&nbsp;0,&nbsp;&err);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;等待接收数据&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;err&nbsp;=&nbsp;U0RBR;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;读取收到的数据&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;OS_EXIT_CRITICAL();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*开中断<br />&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;err;<br />}&nbsp;<br /><br />过程中开始关IRQ中断OS_ENTER_CRITICAL();然后等待中断返加的信号量UartSem,我不解的是IRQ关中断后怎么还可以接收到串口中断信号?哪位大侠给指点一下,谢谢了。<br /><br /><br />
zhu1982lin 发表于 2007-7-2 19:43 | 显示全部楼层

我也不清楚,严重关注

请高人指点!
 楼主| liujigan 发表于 2007-7-2 19:57 | 显示全部楼层

唉,周工不在就不留个看场子的弟子?老周越来越向钱看齐

招点人材全都卖开发板和推销芯片了。
chwb1975 发表于 2007-7-3 08:08 | 显示全部楼层

a

这个是没有错的,因为这是ucos_ii环境下的中间件,关中断只是在当前任务中关中断,如果该任务因为等待信号量被挂起的,就会切换到其它任务,而其它任务的中断不一定是关着的.
 楼主| liujigan 发表于 2007-7-3 09:19 | 显示全部楼层

还是不解

中断是公共的吧,我觉得不应该属于某一任务,关中断就是关公共的中断。(通过实验明明知道程序没错,可想不通)
whw_shine 发表于 2007-8-25 09:54 | 显示全部楼层

进入临界区

OS_ENTER_CRITICAL();<br />……<br />OS_EXIT_CRITICAL();<br />以上两个为进入和退出临界区,是uc/osii的互斥函数,即其中操作为不可中断的原子操作,在执行其中这些部分的时候不允许中断。你的代码中OS_ENTER_CRITICAL()函数关闭的是硬件中断吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

114

帖子

0

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