基于DMA控制器的UART串行通信设计
2)设置定时器UART_DMA_TX_TIMER,定时值为Ts,即每T秒定时器UART_DMA_TX_TIMER发生一次中断。中断服务为检查DMAx_LINK_LIST_FI LL_TABLE的队列长度L,判断是否有可用的链表地址。如果有,则执行出队操作取出一个缓存地址FILL_CACHE_0,将其入队到UART_LINK_LIST _STORE_TABLE中。然后利用其中的源地址、目标地址和ControIValue值,将其分配给DMA通道x的相应寄存器。若L>1,则再取出一个地址,入队到UART_LINK_LIST_STORE_TABLE,将其值赋给DMAx的LLI寄存器。如果仍有可用链表地址,则取出,入队到UART_LINK_LIST_STORE_TABLE,将其值赋给上一个链表地址中的LinkList_NextListAddress,然后依次类似操作,直到最一个取出后,将其LinkList_Next-ListAddress赋为0。若L=1,则将DMAx的LLI寄存器的值置为0。最后设置DMAx的Config寄存器,设置内容有目标外设为UART_TX、传送类型为MEMORY TO PERIP HERAL、不屏避Terminal Count中断、DMAx通道使能,启动DMAx传输。流程如图2所示。本文引用地址:https://www.eepw.com.cn/article/160710.htm
评论