[AT32F437] 使用DMA将Flash数据拷贝到SRAM中

[复制链接]
152|0
永恒回声 发表于 2025-10-25 22:59 | 显示全部楼层 |阅读模式
, ,
今天做一个将Flash中预定地址,预定长度(4字节对齐)的数据内容搬运到SRAM中的预定位置。
我们使用AT32 Workbench来生成DMA的初始化配置。
AT32-DMA配置.jpg
如上图所示,我在本次实验中使用了DMA1的通道6,优先级我配置为低。考虑到只是搬运而已,并且程序也会在执行到一定位置后等待DMA执行完成,所以优先级配置为低,释放高优先级位置给其它DMA。传输宽度也是按4字节传输,这样效率最高,而我们的搬运数据也是要求严格的4字节对齐。
另外一点,由于此执行操作的后续操作是阻塞,所以,我也没有开启DMA1通道6的中断配置。整个Flash搬运到SRAM的时间完成节点是要通过查询状态以获取的。
预定的Flash地址区域是固定的,而SRAM中的位置也是固定的。源代码如下:
  1. int main(void)
  2. {
  3.   /* system clock config. */
  4.   wk_system_clock_config();

  5.   /* config periph clock. */
  6.   wk_periph_clock_config();

  7.   /* nvic config. */
  8.   wk_nvic_config();

  9.   /* timebase config. */
  10.   wk_timebase_init();

  11.   /* init dma1 channel6 */
  12.   wk_dma1_channel6_init();
  13.   /* config dma channel transfer parameter */
  14.   wk_dma_channel_config(DMA1_CHANNEL6,
  15.                         MAC_PPP_ALGO_FLASH_ADDR,
  16.                         MAC_PPP_ALGO_SRAM_ADDR,
  17.                         MAC_PPP_ALGO_SIZE);
  18.   dma_channel_enable(DMA1_CHANNEL6, TRUE);

  19.   while(1)
  20.   {

  21.   }
  22. }





您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

19

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部