【MSPM0G3507 系列】FIFO模式DMA转运

FIFO (First Input First Output 先进先出队列)

举例:1号先进入通道,2号再进入通道,3号最后进入通道;1号先出通道,2号再出,3号最后出。

说明

在配置ADC的时候,有0-11总共12个Memory。
在不使用FIFO的情况下,假如配置了四个通道,Ch1 —— MEM0、Ch2 —— MEM1、Ch3 —— MEM2、Ch4 —— MEM3。
打开FIFO后,将12个FIFO整合成了一个FIFO,在其中将两个16bits的MEM组合成一个32bits的MEM,即从16位的存储空间变为了32位的存储空间。原本有12个16bits的MEM,现在变为了6个32bits的MEM,此时ADC将会先采样6个数据,填充满这6个32bits的MEM后,再触发DMA转运将数据送出去,故FIFO的意义在于:

  1. 有缓冲保护,数据丢失风险降低。
  2. DMA请求频率降低了。
  3. 中断的次数减少,CPU的干预少。
  4. 突发传输优化,总线利用率增高。

启用FIFO后的DMA配置修改

image

  1. DMA Samples Count:原本为 1,由于开启了FIFO,12个MEM合并成了6个MEM,并且将6个MEM填充满后才会触发DMA转运,故将其修改为6。
  2. Enable DMA Triggers:原本为 "MEM0 result loaded interrupt",由于将12个16bits的MEM合并成了6个32bits的MEM,但是ADC采样的数据仍然是16bits的数据,在最后一个32bit的MEM中,填充到前面一位的MEM10看作完成填充,触发DMA进行转运最好。
  3. Source / Destination Length:原本都为Half Word,由于12个16bits的MEM,合并成了6个32bits的MEM,故将DMA转运数据长度改为Word(4 Bytes -> 32 bits)。
  4. Transfer Size:原本为1000,由于传输16bits变为了传输32bits,故除以二得到500。

FILO (First Input Last Output 先进后出栈)

举例:1号先进入通道,2号再进入通道,3号最后进入通道;3号先出通道,2号再出,1号最后出。

博客导航

博客导航

posted @ 2025-05-26 18:04  膝盖中箭卫兵  阅读(371)  评论(0)    收藏  举报
ORCID iD icon https://orcid.org/0000-0001-5102-772X