LM3S8790,UART采用中断方式发送数据,相关函数如下,我不明白发送采用中断方式有什么好处,还有中断服务程序为什么要执行//?的三行代码?
我的理解是这样的,不知道对不对。请大家帮忙看看。
假设要发送的数据为1000个字符。当主程序调用UARTSend时,开始发送数据,数据写入FIFO,当FIFO填充深度满足中断条件时,产生发送中断,此时进入中断服务程序,当检查g_ulCount >0,并且FIFO非空时,继续向FIFO写入数据,当FIFO写满时,退出中断,此时返回主程序,下面会怎么样?
void UART0_ISR (void)
{
unsigned long ulStatus;
ulStatus = UARTIntStatus(UART0_BASE, true);
UARTIntClear(UART0_BASE, ulStatus);
if (ulStatus & UART_INT_TX) {
while (g_ulCount && UARTSpaceAvail(UART0_BASE)) { // ?
UARTCharNonBlockingPut(UART0_BASE, *g_pucBuffer++); // ?
g_ulCount--; // ?
}
}
}
void UARTSend (const unsigned char *pucBuffer, unsigned long ulCount)
{
while (g_ulCount) { /* 等待直到之前的字符串发送完毕*/
;
}
g_pucBuffer = pucBuffer; /* 保存待传输的数据缓冲 */
g_ulCount = ulCount; /* 保存计数值 */
while (UARTSpaceAvail(UART0_BASE)) { /* 处理传输中断 */
UARTCharNonBlockingPut(UART0_BASE, *g_pucBuffer++); /* 发送下一个字符 */
g_ulCount--; /* 发送字符数自减 */
}
}
此帖出自
小平头技术问答
一周热门 更多>