|
今天做一个将Flash中预定地址,预定长度(4字节对齐)的数据内容搬运到SRAM中的预定位置。 我们使用AT32 Workbench来生成DMA的初始化配置。 如上图所示,我在本次实验中使用了DMA1的通道6,优先级我配置为低。考虑到只是搬运而已,并且程序也会在执行到一定位置后等待DMA执行完成,所以优先级配置为低,释放高优先级位置给其它DMA。传输宽度也是按4字节传输,这样效率最高,而我们的搬运数据也是要求严格的4字节对齐。 另外一点,由于此执行操作的后续操作是阻塞,所以,我也没有开启DMA1通道6的中断配置。整个Flash搬运到SRAM的时间完成节点是要通过查询状态以获取的。 预定的Flash地址区域是固定的,而SRAM中的位置也是固定的。源代码如下: - int main(void)
- {
- /* system clock config. */
- wk_system_clock_config();
- /* config periph clock. */
- wk_periph_clock_config();
- /* nvic config. */
- wk_nvic_config();
- /* timebase config. */
- wk_timebase_init();
- /* init dma1 channel6 */
- wk_dma1_channel6_init();
- /* config dma channel transfer parameter */
- wk_dma_channel_config(DMA1_CHANNEL6,
- MAC_PPP_ALGO_FLASH_ADDR,
- MAC_PPP_ALGO_SRAM_ADDR,
- MAC_PPP_ALGO_SIZE);
- dma_channel_enable(DMA1_CHANNEL6, TRUE);
- while(1)
- {
- }
- }
|