1 传输模式概述 DMA 支持 4 种传输模式:软件触发 BLOCK 传输模式,软件触发 BULK 传输模式,硬件触发 BLOCK 传输模式,硬件触发 BULK 传输模式。
• 软件和硬件触发部分外设支持硬件 DMA,当它们被配置为 DMA 通道的触发源时,可以产生 DMA 请求(DMA request),硬件触发启动 DMA 传输,无需 CPU 参与。不支持硬件 DMA 的外设,只能配置为软件触发启动 DMA 传输。触发方式由 DMA 触发源控制寄存器 DMA_TRIGy(y 是 DMA 通道号,y=1~5,下同)的 TYPE 位域来控制,TYPE 为 0 为软件触发方式,TYPE 为 1 则为硬件触发方式。
• BLOCK 和 BULK 传输模式BLOCK 和 BULK 传输模式的区别是,在传输过程中是否允许被更高优先级的传输请求(高优先级 DMA 或CPU)打断。DMA 控制及状态寄存器 DMA_CSRy 的 TRANS 位域为 1 为 BLOCK 传输模式,为 0 则为 BULK传输模式。BULK 传输模式时,会一次性完成所有数据的传输。 数据传输过程中不会插入传输间隙,传输过程也不会被CPU 或者其它高优先级 DMA 通道传输请求打断。BLOCK 传输模式时,每传输完成 1 个数据块后会插入一个传输间隙,在该传输间隙内,由仲裁器进行传输优先级仲裁。如果有 CPU 或更高优先级的 DMA 通道要访问当前 DMA 通道所占用的外设,仲裁器会释放当前 DMA 通道对该设备的控制权,让 CPU 或者更高优先级的 DMA 通道优先访问,等完成后再继续之前被打断的 DMA 通道传输。
DMA 传输模式,如下表所示:
DMA 传输过程
一次完整的 DMA 传输过程,用户需做以下设置:
步骤 1:设置传输模式,DMA_CSRy.TRANS 设置 1 为 BLOCK 传输模式,设置 0 则为 BULK 传输模式;
步骤 2:设置触发方式,DMA_TRIGy.TYPE 设置 0 为软件触发,设置 1 则为硬件触发方式;
步骤 3:配置 DMA 通道数据传输位宽,DMA_CSRy.SIZE,选择 8、16、32bit;
步骤 4:配置 DMA 通道传输数据块数量,DMA_CNTy.CNT,有效范围 1 ~ 65535;
步骤 5:配置 DMA 通道传输数据块大小,DMA_CNTy.REPEAT,请写入 1;
步骤 6:配置 DMA 传输源地址,DMA_SRCADDRy;
步骤 7:配置 DMA 传输目的地址,DMA_DSTADDRy;
步骤 8:配置 DMA 源地址增量方式,DMA_CSRy.SRCINC,固定或自动增加;
步骤 9:配置 DMA 目的地址增量方式,DMA_CSRy.DSTINC,固定或自动增加;
步骤 10:设置 DMA_CSRy.EN 为 1,使能对应的 DMA 通道;
步骤 11:对于软件触发 DMA 传输,设置 DMA_TRIGy.SOFTSRC 启动 DMA 传输,对于硬件触发 DMA 传输不需设置,而只需正确设置用于启动 DMA 的外设。
|