19.6
DMAC和DTC關鍵特性對比
FSP庫里邊的傳輸API可以由DMAC或者DTC實現,因此理論上來說我們可以在DMAC和DTC之間切換使用。但是DMAC和DTC還是有一些不同的,因此在它們之間進行選擇時,請考慮以下因素:
表2:DMAC和DTC的特性對比

中斷
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收發回顯”例程的基礎上修改程序。
對于e2studio開發環境:拷貝一份我們之前的e2s工程“19_UART_Receive_Send”,然后將工程文件夾重命名為“20_DMAC_Memory_To_Memory”,最后再將它導入到我們的e2studio工作空間中。
對于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。

加入DMAC后如下圖所示。

我們單擊上圖中新添加的r_dmac框,然后在左下角的“屬性”窗口配置DMAC模塊的各個屬性參數。按照如下圖所示來配置即可。

在上圖中,實際上只需配置框中的那部分屬性,其他的屬性均按照默認即可。
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 | 傳輸結束中斷優先級:傳輸結束中斷的優先級設置。 |
配置完成后,點擊生成代碼,然后開始我們的代碼編寫。
-
寄存器
+關注
關注
31文章
5590瀏覽量
129249 -
存儲器
+關注
關注
39文章
7716瀏覽量
170998 -
RAM
+關注
關注
8文章
1398瀏覽量
119891 -
瑞薩
+關注
關注
36文章
22437瀏覽量
89905
原文標題:DMAC和DTC關鍵特性對比——瑞薩RA系列FSP庫開發實戰指南(54)
文章出處:【微信號:瑞薩嵌入式小百科,微信公眾號:瑞薩嵌入式小百科】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
瑞薩RA系列MCU中的DTC模塊框圖分析
瑞薩RA6M4系列DMAC和ADC的詳細介紹(1)
瑞薩RA系列MCU中的DMAC和DTC模塊簡介

瑞薩RA系列MCU中的DMAC和DTC關鍵特性對比
評論