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

中斷
DTC和DMAC的中斷行為不同:
DTC使用配置的IELSR事件IRQ作為中斷源
而每個DMAC通道都有自己的IRQ
其他注意事項:
DTC需要一定的RAM。
DTC將傳輸信息存儲在RAM中,并在每次傳輸后寫回RAM,而DMAC將所有傳輸信息存儲在寄存器中。
當(dāng)為多個激活源配置傳輸時,DTC必須在每次中斷時從RAM獲取傳輸信息。這可能會導(dǎo)致傳輸之間的延遲更高。
DTC使用激活源的IRQ中斷CPU。每個DMAC通道都有自己的IRQ。
另外在傳輸信息的transfer_info_t::irq屬性的設(shè)置上,根據(jù)所選模式的不同,其具體行為也略有不同。
表3:正常模式(Normal Mode)
| 中斷模式 | DMAC | DTC |
| TRANSFER_IRQ_EACH | N/A | 每次傳輸后中斷 |
| TRANSFER_IRQ_END | 完成最后一次傳輸后中斷 | 完成最后一次傳輸后中斷 |
表4:重復(fù)模式(Repeat Mode)
| 中斷模式 | DMAC | DTC |
| TRANSFER_IRQ_EACH | 每次傳輸后中斷 | 每次傳輸后中斷 |
| TRANSFER_IRQ_END | 完成最后一次傳輸后中斷 | 每次傳輸后中斷 |
表5:塊模式(Block Mode)
| 中斷模式 | DMAC | DTC |
| TRANSFER_IRQ_EACH | 每次傳輸后中斷 | 每次傳輸后中斷 |
| TRANSFER_IRQ_END | 完成最后一次傳輸后中斷 | 完成最后一次傳輸后中斷 |
表6:重復(fù)-塊模式(Repeat-block Mode)
| 中斷模式 | DMAC | DTC |
| TRANSFER_IRQ_EACH | N/A | N/A |
| TRANSFER_IRQ_END | 完成最后一次傳輸后中斷 | N/A |
19.7
實驗1:DMAC存儲器到存儲器傳輸
19.7.1
軟件設(shè)計
19.7.1.1
新建工程
因為本實驗需要用到LED,也會用到串口打印調(diào)試信息,因此我們在上一章的“實驗1:UART收發(fā)回顯”例程的基礎(chǔ)上修改程序。
對于e2studio開發(fā)環(huán)境:拷貝一份我們之前的e2s工程“19_UART_Receive_Send”,然后將工程文件夾重命名為“20_DMAC_Memory_To_Memory”,最后再將它導(dǎo)入到我們的e2studio工作空間中。
對于Keil開發(fā)環(huán)境:拷貝一份我們之前的Keil工程“19_UART_Receive_Send”,然后將工程文件夾重命名為 “20_DMAC_Memory_To_Memory”,并進入該文件夾里面雙擊Keil工程文件,打開該工程。
工程新建好之后,在工程根目錄的“src”文件夾下面新建“dmac”文件夾,再進入“dmac”文件夾里面新建源文件和頭文件:“bsp_dmac_m2m.c”和“bsp_dmac_m2m.h”。工程文件結(jié)構(gòu)如下。
列表1:文件結(jié)構(gòu)
左右滑動查看完整內(nèi)容
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模塊的各個屬性參數(shù)。按照如下圖所示來配置即可。

在上圖中,實際上只需配置框中的那部分屬性,其他的屬性均按照默認(rèn)即可。
DMAC的配置項(與上圖相對應(yīng)):
表7:DMAC配置屬性描述
| 屬性 | 描述 |
| Name |
名字。上圖配置為g_transfer_dmac0, 按照自己命名習(xí)慣設(shè)置、并且與代碼中的對應(yīng)即可。 |
| Channel |
通道:DMA傳輸通道選擇。這里選擇通道0, 通道0也是優(yōu)先級最高的通道。 RA6M5有8個通道,0~7可選。其他MCU型號可能不同。 |
| Mode | 模式:DMA傳輸模式選擇。默認(rèn)選擇正常模式即可。 |
| Transfer Size | 傳輸大?。?/strong>傳輸數(shù)據(jù)單元的大小。默認(rèn)設(shè)置為2字節(jié)即可。 |
| Destination Address Mode | 目標(biāo)地址模式:默認(rèn)設(shè)置為固定。 |
| Source Address Mode | 源地址模式:默認(rèn)設(shè)置為固定。 |
| Repeat Area(Unused in Normal Mode) | 重復(fù)區(qū)域(正常模式下不使用):源地址。 |
| Destination Pointer | 目標(biāo)指針:NULL(在這里不方便確定傳輸?shù)刂罚罄m(xù)在代碼部分配置)。 |
| Source Pointer | 源指針:NULL(在這里不方便確定傳輸?shù)刂罚罄m(xù)在代碼部分配置)。 |
| Number of Transfers | 傳輸次數(shù):指定正常和重復(fù)模式的傳輸次數(shù)或重復(fù)-塊傳輸模式的塊大小。 |
|
Number of Blocks (Valid only in Repeat, Block or Repeat-Block Mode) |
塊數(shù)量:指定要在重復(fù)、塊或重復(fù)-塊模式下傳輸?shù)膲K數(shù)。 |
| Activation Source |
觸發(fā)源:選擇DMAC傳輸開始事件。 如果未選擇ELC事件,則可以使用軟件啟動。 |
| Callback |
回調(diào)函數(shù):觸發(fā)DMAC中斷時調(diào)用的回調(diào)函數(shù)。 此處設(shè)置為dmac0_callback。 |
| Context | 上下文:指向通過回調(diào)函數(shù)傳遞的上下文結(jié)構(gòu)的指針。 |
| Transfer End Interrupt Priority | 傳輸結(jié)束中斷優(yōu)先級:傳輸結(jié)束中斷的優(yōu)先級設(shè)置。 |
配置完成后,點擊生成代碼,然后開始我們的代碼編寫。
-
寄存器
+關(guān)注
關(guān)注
31文章
5608瀏覽量
129931 -
存儲器
+關(guān)注
關(guān)注
39文章
7737瀏覽量
171628 -
RAM
+關(guān)注
關(guān)注
8文章
1399瀏覽量
120514 -
瑞薩
+關(guān)注
關(guān)注
37文章
22481瀏覽量
90818
原文標(biāo)題:DMAC和DTC關(guān)鍵特性對比——瑞薩RA系列FSP庫開發(fā)實戰(zhàn)指南(54)
文章出處:【微信號:瑞薩嵌入式小百科,微信公眾號:瑞薩嵌入式小百科】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
瑞薩RA系列MCU中的DMAC模塊框圖分析
瑞薩RA系列MCU中的DTC模塊框圖分析
瑞薩RA6M4系列DMAC和ADC的詳細介紹(1)
瑞薩RA系列MCU中的DMAC和DTC模塊簡介
瑞薩電子RA系列MCU解決智能物聯(lián)網(wǎng)系統(tǒng)開發(fā)痛點
瑞薩RA系列MCU中的DMAC和DTC關(guān)鍵特性對比
評論