在实验教程(二) 3.3 中 串口中间件的实验程序里,有个地方不理解,望赐教<br /><br />在发送一个字节的子程序中,写了语句 U0THR = temp;<br /><br />**************************************************************************************************/<br />void UART0Putch(uint8 Data)<br />{<br />uint8 temp;<br /><br />OS_ENTER_CRITICAL();<br />QueueWrite((void *)UART0SendBuf, Data); /* 数据入队 */<br />if ((U0LSR & 0x00000020) != 0)<br />{ /* UART0发送保持寄存器空 */<br />QueueRead(&temp, UART0SendBuf); /* 发送最初入队的数据 */<br />U0THR = temp;<br />U0IER = U0IER | 0x02; /* 允许发送中断 */<br />}<br />OS_EXIT_CRITICAL();<br />} <br /><br /><br />而在UART0中断服务程序中,又写了语句U0THR = temp;<br /><br />switch (IIR & 0x0e)<br />{<br />case 0x02: /* THRE中断 */<br />for (i = 0; i < UART0_FIFO_LENGTH; i++) /* 向发送FIFO填充数据 */<br />{<br />if (QueueRead(&temp, UART0SendBuf) == QUEUE_OK)<br />{<br />U0THR = temp;<br />}<br />else<br />{<br />U0IER = U0IER & (~0x02); /* 队列空,则禁止发送中断 */<br />}<br />}<br />break;<br /><br />不理解为什么要写两次,是不是往U0THR中写了数据,就可以发送了吗? |
|