系列文章目录
1.连续打卡第一天:提前对CPK_RA2E1是瑞萨RA系列开发板的初体验,了解一下
5.Keil配置使用(使用 RASC 生成 Keil 工程)
6.Keil配置使用(使用 RASC 生成 Keil 工程)
8.问题解决、学习RA寄存器、用寄存器的方式点亮第一个LED灯。
15.FSP固件库外部中断处理编程(外部中断检测按键控制LED闪烁)
16.FSP固件库系统定时器(滴答定时器SysTick)每2秒LED闪烁一次
17.FSP固件库开发GPT — PWM通用定时器 定时2s LED 闪烁
文章目录
前言
direct memory access controller (DMAC) —直接存储区访问控制器,可以在不使用 CPU 的情况下将 数据从一个内存位置传输到另一个内存位置。
DMAC 和 DTC 非常相似,它的主要功能都是用来搬数据,但是不需要占用 CPU,即在传输数据 的时候,CPU 可以干其他的事情,好像是多线程一样。数据传输支持从外设到存储器或者存储器 到存储器,这里的存储器可以是 SRAM 或者是 FLASH。
一、DMAC 特性是什么?
当产生 DMA 传输请求时,DMAC 将存储在传输源地址的数据传输到传输目的地址:
• 8 个通道(Channel 0 通道的优先级最高)
• 传输可寻址空间:4 GB(0x00000000 ~ 0xFFFFFFFF,不包含保留区域)
• 最大传输量:64 M data (块传输模式下的最大传输数:1024 个数据 ×65536 个块)
• DMAC 的激活源 (每个通道单独可选):
• 软件触发
– 来自外设模块或者外部中断输入引脚的中断请求
– 传输数据:
– 单个数据:1、2、4 字节
– 块数据:
1 ~ 1024
• 传输模式:
– 正常传输模式
– 重复传输模式
– 重复-块传输模式
– 块传输模式
中断:
– 全部传输完成中断:传输计数器指定的传输数据量完成时生成
– 每次传输完成都产生中断:当数据传输的重复大小完成时生成、源地址扩展重复 区域溢出时生成、当目标地址扩展重复区域溢出时生成
– 错误中断:发生 DMAC 传输错误时生成
二、DTC 特性
当中断请求被激活时,数据传输控制器 (DTC) 模块被提供来传输数据。
• 传输模式
– 正常传输模式
– 重复传输模式
– 块传输模式
• 传输通道
• 传输可寻址空间:4 GB(0x00000000 ~ 0xFFFFFFFF,不包含保留区域)
• 数据传输单元 – 单个数据单元:1 byte (8 bits), 1 halfword (16 bits), 1 word (32 bits) 单个块数据:1 to 256 个数据单元
• CPU 中断源
– 在 DTC 激活中断时
– 在单次数据传输之后
– 在指定块的数据传输之后
三、DMAC框图
四、DMA传输模式
DMAC 有 4 种传输模式
• 正常模式 (Normal Mode):
在正常模式下,DMAC 通道每次接收到配置的激活源时都会传 输单个数据单元。数据单元可以是 1 字节、2 字节或 4 字节。在每次传输之后,源地址和目 的地址可以是固定、递增、递减,或者向下一个数据单元添加偏移量。16 位计数器在每次 传输后递减。当计数器达到 0 时,传输将不再由激活源触发,并且可以中断 CPU 以发出所 有传输已完成的信号。
• 重复模式 (Repeat Mode):
重复模式的工作方式与正常模式相同,但长度限制为范围 [1, 1024] 内的整数。当传输计数器达到 0 时,计数器被重置为其配置值,重复区域 (源或目的 地址) 被重置到其起始地址,剩余的块计数将递减 1。当块计数达到 0 时,传输将不再由激 活源触发,并且可配置传输完成中断。
• 块模式 (Block Mode):
在块模式下,每个中断传输的数据单元量可以设置为范围 [1, 1024] 内的整数。还可以将要传输的块数配置为 16 位数字。每次块传输后,重复区域 (源或目的 地址) 将重置为原始地址,而另一个地址将递增或递减到下一个块。
• 重复-块模式 (Repeat-Block Mode):
在重复-块模式下,每个中断传输的数据单元量可以设 置为范围 [1, 1024] 内的整数。可以将要传输的块的数量配置为 16 位数字(最大可设置重 复大小为 64K)。如果目标地址模式为偏移模式,则数据传输大小为字节的块大小 (长度) 的最大可配置块数为 0xFFFF,数据传输大小为半字的块大小为 0x7FFF,数据大小为字的 块大小为 0x3FFF。在每个块传输之后,源地址和目的地址将递增或递减到下一个块地址。 对于源地址的偏移地址模式,源地址大小是源缓冲区的总大小,之后源区域被翻转,块大 小可以小于源缓冲区大小。对于源地址模式作为偏移模式,最大可配置的源缓冲区大小为 0xFFFF 用于一个字节的传输数据大小,0x7FFF 用于半字的传输数据大小和 0x3FFF 用于字 的传输数据大小。采用重复块模式可以实现单环形缓冲区到多环形缓冲区的转移式设计。
五、DMAC激活源
软件、来自外围模块的中断请求和外部中断请求都可以指定为 DMAC 激活源。设置 DMTMD 寄 存器的 DCTG[1:0] 位选择激活源。
六、DMAC软件激活
使用 DMA 进行传输,我们可以选择软件启动,也就是不使用内外围模块的中断请求进行激活 DMAC ,而是手动进行激活 DMA 进行传输。
软件激活 DMAC 的过程大致如下:
1. 设置 DMTMD 寄存器的 DCTG[1:0] 位设为 00b (传输请求源选择为软件请求)
2. 设置 DMCNT 寄存器的 DTE 位置 1 (启用 DMA 传输)
3. 设置 DMAST 寄存器的 DMST 位置 1 (启用 DMAC 激活)
4. 设置 DMREQ 寄存器的 SWREQ 位置 1 (DMA 请求)
• 当 DMREQ 寄存器的 CLRS 位为 0 时:由软件激活 DMAC,在响应 DMA 传输请求开 始数据传输后,DMREQ 寄存器的 SWREQ 位清 0。
• 当 DMREQ 寄存器的 CLRS 位为 1 时:由软件激活 DMAC,在响应 DMA 传输请求开 始数据传输后,DMREQ 寄存器的 SWREQ 位 不会被清 0。在这种情况下,在传输完 成后再次发出 DMA 传输请求。
七、通过中断请求激活 DMAC
ba 除了通过软件手动激活 DMAC,还可以通过片内外围模块的中断请求或外部中断请求激活 DMAC 我们可以将片上外围模块的中断请求和外部中断请求设置为 DMAC 的激活源。可以通过 ICU 的 DELSRn 寄存器的 DELS[8:0] 位 (n = 0~7) 为中的每个通道单独选择激活源。
要通过片上外围模块的中断请求或外部中断请求启动 DMA 传输,遵循以下步骤。
1. 设置 ICU 的 DELSRn 寄存器的 DELS[8:0] 位 (n = 0~7) 到事件编号(选择 DMAC 事件链接)。
2. 设置 DMTMD 寄存器的 DCTG[1:0] 位到 01b (来自外围模块和外部中断引脚的中断)。
3. 设置 DMCNT 寄存器的 DTE 位为 1 (启用 DMA 传输)。
4. 设置 DMAST 寄存器的 DMST 位设置为 1 (启用 DMAC 激活)
八、中断优先级
当存在多个 DMA 传输请求时,DMAC 确定具有 DMA 传输请求的通道的优先级。通道优先级固 定如下:通道 0 > 通道 1 > 通道 2 > 通道 3…> 通道 7 (通道 0: 优先级最高) 当在数据传输期间产生 DMA 传输请求时,在最终数据已传输之后开始通道仲裁,并且开始优先 级较高的通道的 DMA 传输。
九、事件链接
每个 DMAC 通道在每次完成数据传输或块传输模式下的块传输时,都会输出一个事件链接请求 信号 (DMACn_INT)。当传输目的地是外部总线时,在写入缓冲区操作被接受时会产生一个事件 链接请求信号。有关详细信息,可以查看事件链接控制器 (ELC) 章节。如果写入传输的最后数据 时发生总线错误,则会发生传输结束事件和错误响应检测中断 (DMA_TRANSERR)。
风华正茂