概述
⚫ 7 通道外设 PDMA ,支持 Peripherals<>RAM 传输
⚫ 1 通道存储器 MDMA ,支持 Flash<>RAM 传输
⚫ 外设 DMA 传输由外设请求触发, DMA 工作期间不影响 CPU 运 行
⚫ 外设通道最大传输长度 8192 次 ,支持 byte/half word/word 传输
⚫ Flash -->RAM 通道最大传输长度 8192 次 ,只支持 word 传输
⚫ 支持 Flash 连续编程( RAM -->Flash ),需要预先进行擦除,一次编程固定为 256 字节
⚫ RAM 指针递增、递减
⚫ 可产生半程中断和全程中断
⚫ 通道优先级可配置( 4 级优先级)
⚫ 接入外设可选择为 SPIx 、 UARTx 、 I2C 、 U7816 x 、 ADC 、 AES 、 CRC 、 TIMERx
工作原理
外设DMA 为 Peripheral<>RAM 通道,采用外设请求触发方式进行数据传输 ,每个外设通道都可以支持外设 -->RAM 或者 RAM 外设的数据传输,并且根据目标外设类型的不同,自适应选择byte/half word/word 传输方式。 DMA 作为 Master ,在收到 request 后将发起 AHB transactions 进行数据操作,外设目标地址根据通道接入选择自动定位, RAM 目标地址则根据寄存器配置定位。
每个channel 可以从多个外设中选择一个作为 source 或 destination ,同时软件可以设置通道优先级当两个通道同时要访问 RAM 时,由优先级决定谁先访问,另一个通道将被挂起 ,直到优先通道访问完毕。
外设请求可以是发送完成(RAM -->Peripheral )或接收完成 Peripheral -->RAM ),数据传输通过 AHB总线完成,当 DMA 访问外设时, CPU 对同一个外设的访问将引起冲突,哪个 Master 访问被挂起取决于 BusMatrix 设置的仲裁优先级。这里需要注意的是,由于大部分外设都被挂在 APB 总线上, APB映射到 AHB 仅为一个 slave ,因此当 DMA 访问 APB 中任意外设时, CPU 即使访问 APB 下的其他外设,也同样会引起总线仲裁。
软件可设置DMA 的 RAM 指针,用于配置 DMA 传输的起始地址,可以选择指针递增或递减方式。另有 TRFLEN 寄存器配置传输次数,根据起始地址和传输次数,计算得到终止地址,当 RAM 指针指向终止地址时,本次传输结束,关闭通道。
当channel 被使能后, DMA 就准备好接受通道所选中的外设请求。当配置传输长度一半的字节被传输后,一个 HTIF Half transfer interrupt flag )中断置位;当配置传输长度全部完成后 TCIF Transfercomplete interrupt flag )中断置位。上述中断都可以被相应的中断使能寄存器屏蔽 。
在DMA 一个完整 transfer block 完成之前,软件随时可以关闭 channel 使能,此时 DMA 将被挂起,如果软件此后重新使能通道,则 DMA 继续执行之前挂起的操作。当接入外设为SPI/I2C时,DMA传输长度应大于等于2个字节。