《表3 DMA接收缓存处理实例 (UART_SIZE=8)》

《表3 DMA接收缓存处理实例 (UART_SIZE=8)》   提示:宽带有限、当前游客访问压缩模式
本系列图表出处文件名:随高清版一同展现
《基于STM32的多串口并行传输系统设计》


  1. 获取 高清版本忘记账户?点击这里登录
  1. 下载图表忘记账户?点击这里登录

图2为循环接收缓存示意,表3列举了UART_SIZE=8时DMA接收缓存处理实例。ReadFromDMA函数首先判断总长度total和已读长度read的大小,如read大于等于total,说明本次DMA接收数据长度还没到UART_SIZE,可读数据缓存区从read Mod UART_SIZE开始,长度为len-(read Mod UART_SIZE),如表3中第1和第2数据行。如果read小于total,要判断接收数据总的长度(total+len)-read与缓存长度的大小,如果前者大,说明上次读后发生循环覆盖,说明有数据没有及时读取,已经覆盖了部分数据,可读数据缓存区从len后面开始,可能的数据长度就是UART_SIZE,如表3中第4和第5数据行;如前者小于等于后者,可读数据缓存区从read Mod UART_SIZE开始,长度为UART_SIZE–(read Mod UART_SIZE)+len,如表3中第3数据行。实际UART_SIZE可取128、256等,这样上述的Mod在C语言中的操作read%UART_SIZE可替换为read&(UART_SIZE-1)。