基于DMA控制器的UART串行通信設計
3)DMAx傳輸完成產(chǎn)生Terminal Count中斷,在其中斷服務(wù)程序中取出FIFO隊列UART_LINK_LIST_STORE_TABLE中保存的地址ADDR,將ADDR中的源地址入隊到UARTn空緩存隊列,然后將ADDR值填充到DMAx的可用空緩存FIFO隊列DMAx_LINK_LIST_FREE_TABLE中。流程如圖3所示。本文引用地址:http://dyxdggzs.com/article/160710.htm
3.3 串行數據接收過(guò)程實(shí)現
UARTn的DMA數據發(fā)送過(guò)程相對于必送過(guò)程較為簡(jiǎn)單,在配置好相應的寄存器和目標緩存地址后,使能相應DMA通道。當UART接收數據達到觸發(fā)點(diǎn)后,會(huì )觸發(fā)DMA相應通道的突發(fā)請求進(jìn)行傳輸。傳輸結束后,在TerminalCount中斷服務(wù)中更換目標緩存地址,使能一輪即可。當然在
配置中,DMA通道的突發(fā)個(gè)數應設置與UART接收FIFO觸發(fā)點(diǎn)數相同。
4 結束語(yǔ)
在DMA發(fā)送進(jìn)行的過(guò)程中,UART_LINK_LIST_STORE_TABLE保存的地址值序列ADDRs中的地址所指空間不能被釋放或被其它程序占用,同樣的ADDRs中地址的源地址所指的UART緩存空間也不能被釋放或被其它程序占用。如果在這個(gè)過(guò)程中出現了不滿(mǎn)足上述要求的情況,則會(huì )出現不可預測的錯誤。
評論