UART采用中断方式发送数据

2019-03-24 13:34发布

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--;                                                    /*  发送字符数自减              */
    }
} 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
2条回答
ydxyls
1楼-- · 2019-03-24 20:21
 精彩回答 2  元偷偷看……
Study_Stellaris
2楼-- · 2019-03-24 22:36
< :TI_MSP430_内容页_SA7 --> 是立即开始发送的。

一周热门 更多>

相关问题

    相关文章