瑞萨RA系列MCU中的DMAC和DTC关键特性对比

描述

19.6

DMAC和DTC关键特性对比

FSP库里边的传输API可以由DMAC或者DTC实现,因此理论上来说我们可以在DMAC和DTC之间切换使用。但是DMAC和DTC还是有一些不同的,因此在它们之间进行选择时,请考虑以下因素:

表2:DMAC和DTC的特性对比

RAM

中断

DTC和DMAC的中断行为不同:

DTC使用配置的IELSR事件IRQ作为中断源

而每个DMAC通道都有自己的IRQ

其他注意事项:

DTC需要一定的RAM。

DTC将传输信息存储在RAM中,并在每次传输后写回RAM,而DMAC将所有传输信息存储在寄存器中。

当为多个激活源配置传输时,DTC必须在每次中断时从RAM获取传输信息。这可能会导致传输之间的延迟更高。

DTC使用激活源的IRQ中断CPU。每个DMAC通道都有自己的IRQ。

另外在传输信息的transfer_info_t::irq属性的设置上,根据所选模式的不同,其具体行为也略有不同。

表3:正常模式(Normal Mode)

中断模式 DMAC DTC
TRANSFER_IRQ_EACH N/A 每次传输后中断
TRANSFER_IRQ_END 完成最后一次传输后中断 完成最后一次传输后中断

表4:重复模式(Repeat Mode)

中断模式 DMAC DTC
TRANSFER_IRQ_EACH 每次传输后中断 每次传输后中断
TRANSFER_IRQ_END 完成最后一次传输后中断 每次传输后中断

表5:块模式(Block Mode)

中断模式 DMAC DTC
TRANSFER_IRQ_EACH 每次传输后中断 每次传输后中断
TRANSFER_IRQ_END 完成最后一次传输后中断 完成最后一次传输后中断

表6:重复-块模式(Repeat-block Mode)

中断模式 DMAC DTC
TRANSFER_IRQ_EACH N/A N/A
TRANSFER_IRQ_END 完成最后一次传输后中断 N/A

19.7

实验1:DMAC存储器到存储器传输

19.7.1

软件设计

19.7.1.1

新建工程

因为本实验需要用到LED,也会用到串口打印调试信息,因此我们在上一章的“实验1:UART收发回显”例程的基础上修改程序。

对于e2 studio开发环境:拷贝一份我们之前的e2s工程“19_UART_Receive_Send”,然后将工程文件夹重命名为“20_DMAC_Memory_To_Memory”,最后再将它导入到我们的e2 studio工作空间中。

对于Keil开发环境: 拷贝一份我们之前的Keil工程“19_UART_Receive_Send”,然后将工程文件夹重命名为 “20_DMAC_Memory_To_Memory”,并进入该文件夹里面双击Keil工程文件,打开该工程。

工程新建好之后,在工程根目录的“src”文件夹下面新建“dmac”文件夹,再进入“dmac”文件夹里面新建源文件和头文件:“bsp_dmac_m2m.c”和“bsp_dmac_m2m.h”。工程文件结构如下。

列表1:文件结构

左右滑动查看完整内容

 

20_DMAC_Memory_To_Memory
├─ ......
└─ src
├─ led│ 
│ ├─ bsp_led.c
│ └─ bsp_led.h
├─ debug_uart
│ ├─ bsp_debug_uart.c
│ └─ bsp_debug_uart.h
├─ dmac
│ ├─ bsp_dmac_m2m.c
│ └─ bsp_dmac_m2m.h
└─ hal_entry.c

 

19.7.1.2

FSP配置

打开该工程的FSP配置界面。然后按如图步骤加入DMAC。

RAM

加入DMAC后如下图所示。

RAM

我们单击上图中新添加的r_dmac框,然后在左下角的“属性”窗口配置DMAC模块的各个属性参数。按照如下图所示来配置即可。

RAM

在上图中,实际上只需配置框中的那部分属性,其他的属性均按照默认即可。

DMAC的配置项(与上图相对应):

表7:DMAC配置属性描述

属性 描述
Name 名字。上图配置为 g_transfer_dmac0
按照自己命名习惯设置、并且与代码中的对应即可。
Channel 通道:DMA传输通道选择。这里选择通道0,
通道0也是优先级最高的通道。
RA6M5有8个通道,0~7可选。其他MCU型号可能不同。
Mode 模式:DMA传输模式选择。默认选择正常模式即可。
Transfer Size 传输大小:传输数据单元的大小。默认设置为2字节即可。
Destination Address Mode 目标地址模式:默认设置为固定。
Source Address Mode 源地址模式:默认设置为固定。
Repeat Area(Unused in Normal Mode) 重复区域(正常模式下不使用):源地址。
Destination Pointer 目标指针:NULL(在这里不方便确定传输地址,后续在代码部分配置)。
Source Pointer 源指针:NULL(在这里不方便确定传输地址,后续在代码部分配置)。
Number of Transfers 传输次数:指定正常和重复模式的传输次数或重复-块传输模式的块大小。
Number of Blocks
(Valid only in Repeat,
Block or Repeat-Block Mode)
块数量:指定要在重复、块或重复-块模式下传输的块数。
Activation Source 触发源:选择DMAC传输开始事件。
如果未选择ELC事件,则可以使用软件启动。
Callback 回调函数:触发DMAC中断时调用的回调函数。
此处设置为 dmac0_callback
Context 上下文:指向通过回调函数传递的上下文结构的指针。
Transfer End Interrupt Priority 传输结束中断优先级:传输结束中断的优先级设置。

配置完成后,点击生成代码,然后开始我们的代码编写。RAM

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分