[ZLG-ARM] 串口中间件的实验程序

[复制链接]
2078|1
 楼主| babyac 发表于 2008-7-8 11:22 | 显示全部楼层 |阅读模式
在实验教程(二)&nbsp;3.3&nbsp;中&nbsp;串口中间件的实验程序里,有个地方不理解,望赐教<br /><br />在发送一个字节的子程序中,写了语句&nbsp;U0THR&nbsp;=&nbsp;temp;<br /><br />**************************************************************************************************/<br />void&nbsp;UART0Putch(uint8&nbsp;Data)<br />{<br />uint8&nbsp;temp;<br /><br />OS_ENTER_CRITICAL();<br />QueueWrite((void&nbsp;*)UART0SendBuf,&nbsp;Data);&nbsp;/*&nbsp;数据入队&nbsp;*/<br />if&nbsp;((U0LSR&nbsp;&&nbsp;0x00000020)&nbsp;!=&nbsp;0)<br />{&nbsp;/*&nbsp;UART0发送保持寄存器空&nbsp;*/<br />QueueRead(&temp,&nbsp;UART0SendBuf);&nbsp;/*&nbsp;发送最初入队的数据&nbsp;*/<br />U0THR&nbsp;=&nbsp;temp;<br />U0IER&nbsp;=&nbsp;U0IER&nbsp;|&nbsp;0x02;&nbsp;/*&nbsp;允许发送中断&nbsp;*/<br />}<br />OS_EXIT_CRITICAL();<br />}&nbsp;<br /><br /><br />而在UART0中断服务程序中,又写了语句U0THR&nbsp;=&nbsp;temp;<br /><br />switch&nbsp;(IIR&nbsp;&&nbsp;0x0e)<br />{<br />case&nbsp;0x02:&nbsp;/*&nbsp;THRE中断&nbsp;*/<br />for&nbsp;(i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt&nbsp;UART0_FIFO_LENGTH;&nbsp;i++)&nbsp;/*&nbsp;向发送FIFO填充数据&nbsp;*/<br />{<br />if&nbsp;(QueueRead(&temp,&nbsp;UART0SendBuf)&nbsp;==&nbsp;QUEUE_OK)<br />{<br />U0THR&nbsp;=&nbsp;temp;<br />}<br />else<br />{<br />U0IER&nbsp;=&nbsp;U0IER&nbsp;&&nbsp;(~0x02);&nbsp;/*&nbsp;队列空,则禁止发送中断&nbsp;*/<br />}<br />}<br />break;<br /><br />不理解为什么要写两次,是不是往U0THR中写了数据,就可以发送了吗?
zlgarm 发表于 2008-7-8 15:42 | 显示全部楼层

正如程序注释所说

正如程序注释所说,第一个“U0THR&nbsp;=&nbsp;temp”是发送初入队的数据,只执行一次;而第二个“U0THR&nbsp;=&nbsp;temp”是循环执行的,用来发送剩下的数据。UART向上位机发送数据是在发送FIFO中进行的,使用“U0THR&nbsp;=&nbsp;temp”是执行向发送FIFO中填充数据的操作,具体的UART数据发送原理用户可以参看基础教材,程序方面在技术笔记中也有详细解说。<br /><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;&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;zlgarm_XXQ
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

7

帖子

0

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