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