19.7.1.7
使用代碼配置:重復(fù)傳輸模式
上面使用完正常傳輸模式,下面我們來試一下重復(fù)傳輸模式,其實無非就是在正常模式下多了可以指定重復(fù)傳輸?shù)拇螖?shù)的功能,就變成了重復(fù)傳輸模式。可以結(jié)合地址遞增模式、重復(fù)區(qū)域,來實現(xiàn)環(huán)形隊列。
下面是DMAC在重復(fù)傳輸模式下傳輸?shù)呐渲么a:
列表6:代碼清單20?5 DMAC重復(fù)傳輸模式配置
左右滑動查看完整內(nèi)容
/* 重復(fù)傳輸模式 */
transfer_info_tmy_transfer_info_repeat =
{
.transfer_settings_word_b.dest_addr_mode = TRANSFER_ADDR_MODE_
→INCREMENTED,//每次傳輸后,目標(biāo)地址指針都會增加
.transfer_settings_word_b.repeat_area = TRANSFER_REPEAT_AREA_SOURCE,
→//源區(qū)域重復(fù) (正常模式下無效)
.transfer_settings_word_b.irq = TRANSFER_IRQ_END, ?
→//傳輸完成后中斷
.transfer_settings_word_b.chain_mode = TRANSFER_CHAIN_MODE_
→DISABLED,//不使能(DMAC 沒有該功能,僅 DTC 有)
.transfer_settings_word_b.src_addr_mode = TRANSFER_ADDR_MODE_
→INCREMENTED,//每次傳輸后,源地址指針都會增加
.transfer_settings_word_b.size = TRANSFER_SIZE_4_BYTE, ?
→//每次傳輸 4 字節(jié)
.transfer_settings_word_b.mode = TRANSFER_MODE_REPEAT, ?
→//重復(fù)傳輸模式
.p_dest = (void*) DST_Buffer, ?
→//目標(biāo)地址
.p_src = (voidconst *) SRC_Buffer, ?
→//源地址
.num_blocks =8,//指定傳輸?shù)膲K數(shù)(正常模式下無效,僅在重復(fù)、塊或重
復(fù)-塊模式下有效)
.length =4,//指定傳輸?shù)拈L度(即正常的傳輸次數(shù)或重復(fù)模式下重復(fù)
大小 或 塊和重復(fù)-塊模式下傳輸?shù)膲K大小)
};
// 按照上述傳輸信息配置,期待的正確傳輸結(jié)果為:
uint32_tExpected_DST_Buffer[BUFFER_SIZE] = {
0x01020304,0x05060708,0x090A0B0C,0x0D0E0F10,
0x01020304,0x05060708,0x090A0B0C,0x0D0E0F10,
0x01020304,0x05060708,0x090A0B0C,0x0D0E0F10,
0x01020304,0x05060708,0x090A0B0C,0x0D0E0F10,
0x01020304,0x05060708,0x090A0B0C,0x0D0E0F10,
0x01020304,0x05060708,0x090A0B0C,0x0D0E0F10,
0x01020304,0x05060708,0x090A0B0C,0x0D0E0F10,
0x01020304,0x05060708,0x090A0B0C,0x0D0E0F10};
注
在本例程中使用以上代碼需在頭文件“bsp_dmac_m2m.h”中定義宏USE_MY_TRANSFER_INFOR_CONFIG,并且定義宏DMAC_TRANSFER_MODE等于DMAC_TRANSFER_REPEAT_MODE來選擇傳輸模式為:重復(fù)傳輸模式。
傳輸信息結(jié)構(gòu)體變量my_transfer_info_repeat用于對DMAC的傳輸進行重配置。
讀者可跳到本章后面的“下載驗證”小節(jié),編譯并下載程序來驗證本實驗例程運行結(jié)果。
19.7.1.8
使用代碼配置:塊傳輸模式
下面是DMAC在塊傳輸模式下傳輸?shù)呐渲么a:
列表7:代碼清單20?6 DMAC塊傳輸模式配置
左右滑動查看完整內(nèi)容
/* 塊傳輸模式 */
transfer_info_tmy_transfer_info_block =
{
.transfer_settings_word_b.dest_addr_mode = TRANSFER_ADDR_MODE_
→INCREMENTED,//每次傳輸后,目標(biāo)地址指針都會增加
.transfer_settings_word_b.repeat_area = TRANSFER_REPEAT_AREA_SOURCE,
→//源區(qū)域重復(fù) (正常模式下無效)
.transfer_settings_word_b.irq = TRANSFER_IRQ_END, ?
→//傳輸完成后中斷
.transfer_settings_word_b.chain_mode = TRANSFER_CHAIN_MODE_
→DISABLED,//不使能(DMAC 沒有該功能,僅 DTC 有)
.transfer_settings_word_b.src_addr_mode = TRANSFER_ADDR_MODE_
→INCREMENTED,//每次傳輸后,源地址指針都會增加
.transfer_settings_word_b.size = TRANSFER_SIZE_4_BYTE, ?
→//每次傳輸 4 字節(jié)
.transfer_settings_word_b.mode = TRANSFER_MODE_BLOCK, ?
→//塊傳輸模式
.p_dest = (void*) DST_Buffer, ?
→//目標(biāo)地址
.p_src = (voidconst *) SRC_Buffer, ?
.num_blocks =4,//指定傳輸?shù)膲K數(shù)(正常模式下無效,僅在重復(fù)、塊或重
復(fù)-塊模式下有效)
.length =8,//指定傳輸?shù)拈L度(即正常的傳輸次數(shù)或重復(fù)模式下重復(fù)
大小 或 塊和重復(fù)-塊模式下傳輸?shù)膲K大小)
};
// 按照上述傳輸信息配置,期待的正確傳輸結(jié)果為:
uint32_tExpected_DST_Buffer[BUFFER_SIZE] = {
0x01020304,0x05060708,0x090A0B0C,0x0D0E0F10,
0x11121314,0x15161718,0x191A1B1C,0x1D1E1F20,
0x01020304,0x05060708,0x090A0B0C,0x0D0E0F10,
0x11121314,0x15161718,0x191A1B1C,0x1D1E1F20,
0x01020304,0x05060708,0x090A0B0C,0x0D0E0F10,
0x11121314,0x15161718,0x191A1B1C,0x1D1E1F20,
0x01020304,0x05060708,0x090A0B0C,0x0D0E0F10,
0x11121314,0x15161718,0x191A1B1C,0x1D1E1F20};
注
在本例程中使用以上代碼需在頭文件“bsp_dmac_m2m.h”中定義宏USE_MY_TRANSFER_INFOR_CONFIG,并且定義宏DMAC_TRANSFER_MODE等于DMAC_TRANSFER_BLOCK_MODE來選擇傳輸模式為:塊傳輸模式。
傳輸信息結(jié)構(gòu)體變量my_transfer_info_block用于對DMAC的傳輸進行重配置。
讀者可跳到本章后面的“下載驗證”小節(jié),編譯并下載程序來驗證本實驗例程運行結(jié)果。
19.7.1.9
使用代碼配置:重復(fù)-塊傳輸模式
下面是DMAC在重復(fù)-塊傳輸模式下傳輸?shù)呐渲么a:
列表8:代碼清單20?7 DMAC重復(fù)-塊傳輸模式配置
左右滑動查看完整內(nèi)容
/* 重復(fù)-塊傳輸模式 */
transfer_info_tmy_transfer_info_repeat_block =
{
.transfer_settings_word_b.dest_addr_mode = TRANSFER_ADDR_MODE_
→INCREMENTED,//每次傳輸后,目標(biāo)地址指針都會增加
.transfer_settings_word_b.repeat_area = TRANSFER_REPEAT_AREA_SOURCE,
→//源區(qū)域重復(fù) (正常模式下無效)
.transfer_settings_word_b.irq = TRANSFER_IRQ_EACH, ?
→//每次傳輸完成后都觸發(fā)中斷
.transfer_settings_word_b.chain_mode = TRANSFER_CHAIN_MODE_
→DISABLED,//不使能(DMAC 沒有該功能,僅 DTC 有)
.transfer_settings_word_b.src_addr_mode = TRANSFER_ADDR_MODE_
→INCREMENTED,//每次傳輸后,源地址指針都會增加
.transfer_settings_word_b.size = TRANSFER_SIZE_4_BYTE, ?
→//每次傳輸 4 字節(jié)
.transfer_settings_word_b.mode = TRANSFER_MODE_REPEAT_BLOCK,?
→//重復(fù)-塊傳輸模式
.p_dest = (void*) DST_Buffer, ?
→//目標(biāo)地址
.p_src = (voidconst *) SRC_Buffer, ?
→//源地址
.num_blocks =4,//指定傳輸?shù)膲K數(shù)(正常模式下無效,僅在重復(fù)、塊或重
復(fù)-塊模式下有效)
.length =2,//指定傳輸?shù)拈L度(即正常的傳輸次數(shù)或重復(fù)模式下重復(fù)大
小 或 塊和重復(fù)-塊模式下傳輸?shù)膲K大小)
};
// 按照上述傳輸信息配置,期待的正確傳輸結(jié)果為:
uint32_tExpected_DST_Buffer[BUFFER_SIZE] = {
0x01020304,0x01020304,0x01020304,0x01020304,
0x01020304,0x01020304,0x01020304,0x01020304,
0x01020304,0x01020304,0x01020304,0x01020304,
0x01020304,0x01020304,0x01020304,0x01020304,
0x01020304,0x01020304,0x01020304,0x01020304,
0x01020304,0x01020304,0x01020304,0x01020304,
0x01020304,0x01020304,0x01020304,0x01020304,
0x01020304,0x01020304,0x01020304,0x01020304};
注
在本例程中使用以上代碼需在頭文件“bsp_dmac_m2m.h”中定義宏USE_MY_TRANSFER_INFOR_CONFIG,并且定義宏DMAC_TRANSFER_MODE等于DMAC_TRANSFER_REPEAT_BLOCK_MODE來選擇傳輸模式為:重復(fù)-塊傳輸模式。
傳輸信息結(jié)構(gòu)體變量my_transfer_info_repeat_block用于對DMAC的傳輸進行重配置。
讀者可跳到本章后面的“下載驗證”小節(jié),編譯并下載程序來驗證本實驗例程運行結(jié)果。
19.7.1.10 DMAC初始化函數(shù)
若是使用FSP配置,需要設(shè)置傳輸?shù)刂罚ㄟ^調(diào)用set_transfer_dst_src_address函數(shù)來設(shè)置。
然后,調(diào)用R_DMAC_Open函數(shù)打開DMAC。需要注意,R_DMAC_Open函數(shù)需要在set_transfer_dst_src_address函數(shù)之后調(diào)用,因為在R_DMAC_Open函數(shù)內(nèi)部會根據(jù)我們的傳輸信息(包括傳輸?shù)刂返龋﹣砼渲玫讓?a href="http://www.3532n.com/tags/寄存器/" target="_blank">寄存器。
若是使用代碼配置DMAC的傳輸信息(即定義了宏USE_MY_TRANSFER_INFOR_CONFIG),則還需要對DMAC進行重配置,方法是調(diào)用R_DMAC_Reconfigure函數(shù),并傳入用于DMAC 的傳輸信息配置的結(jié)構(gòu)體變量(比如my_transfer_info_normal)的首地址。
本例程中使用宏DMAC_TRANSFER_MODE來判斷傳輸模式,并根據(jù)不同的傳輸模式選擇使用以下的傳輸信息變量來進行重配置:my_transfer_info_normal / my_transfer_info_repeat /
my_transfer_info_repeat / my_transfer_info_block / my_transfer_info_repeat_block。
DMAC初始化函數(shù)如下所示:
列表9:代碼清單20?8 DMAC初始化函數(shù)
左右滑動查看完整內(nèi)容
/* DMAC 初始化函數(shù) */
voidDMAC_Init(void)
{
fsp_err_terr;
/* 使用 FSP 界面的配置:需要先重新設(shè)置傳輸?shù)脑吹刂泛湍康牡刂?*/
#ifndefUSE_MY_TRANSFER_INFOR_CONFIG
set_transfer_dst_src_address(&g_transfer_dmac0_cfg, SRC_Buffer, DST_
→Buffer);
#endif
/* 打開 DMAC 模塊 */
err =R_DMAC_Open(&g_transfer_dmac0_ctrl, &g_transfer_dmac0_cfg);
assert(FSP_SUCCESS == err);
/* 使用我們新的自定義的傳輸信息:重新配置傳輸 */
#ifdefUSE_MY_TRANSFER_INFOR_CONFIG
// 根據(jù)我們要使用的傳輸模式進行選擇配置:
#if(DMAC_TRANSFER_MODE == DMAC_TRANSFER_NORMAL_MODE)//正常模式
err =R_DMAC_Reconfigure(&g_transfer_dmac0_ctrl, &my_transfer_info_
→normal);
assert(FSP_SUCCESS == err);
#elif(DMAC_TRANSFER_MODE == DMAC_TRANSFER_REPEAT_MODE)//重復(fù)模式
err =R_DMAC_Reconfigure(&g_transfer_dmac0_ctrl, &my_transfer_info_
→repeat);
assert(FSP_SUCCESS == err);
#elif(DMAC_TRANSFER_MODE == DMAC_TRANSFER_BLOCK_MODE)//塊模式
err =R_DMAC_Reconfigure(&g_transfer_dmac0_ctrl, &my_transfer_info_
→block);
assert(FSP_SUCCESS == err);
#elif(DMAC_TRANSFER_MODE == DMAC_TRANSFER_REPEAT_BLOCK_MODE)//重復(fù)-塊模式err = R_DMAC_Reconfigure(&g_transfer_dmac0_ctrl, &my_transfer_info_→repeat_block);assert(FSP_SUCCESS == err);#endif //DMAC_TRANSFER_MODE#endif //USE_MY_TRANSFER_INFOR_CONFIG}
-
函數(shù)
+關(guān)注
關(guān)注
3文章
4409瀏覽量
66985 -
代碼
+關(guān)注
關(guān)注
30文章
4947瀏覽量
73291 -
初始化
+關(guān)注
關(guān)注
0文章
52瀏覽量
12306
原文標(biāo)題:使用代碼配置:重復(fù)傳輸模式——瑞薩RA系列FSP庫開發(fā)實戰(zhàn)指南(56)
文章出處:【微信號:瑞薩嵌入式小百科,微信公眾號:瑞薩嵌入式小百科】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
瑞薩RA系列FSP庫開發(fā)實戰(zhàn)指南之定義傳輸源和目標(biāo)存儲器
【瑞薩RA6E2地奇星開發(fā)板試用】介紹、環(huán)境搭建、工程測試
【瑞薩RA6E2】瑞薩E2S軟件安裝過程,等待過程玩下97_e2 studio_ZGZZ
瑞薩RA2L1 MCU e2 studio和FSP的使用指南
【RA4L1-SENSOR】DMAC傳輸數(shù)據(jù)
【RA4L1-SENSOR】RA4L1-SENSOR開發(fā)版開箱評測+e2studio軟件安裝
瑞薩電子RA系列微控制器的可擴展性強的配置軟件包 (FSP)安裝下載與使用指南
e2studio和Keil簡介及如何安裝e2studio開發(fā)環(huán)境

瑞薩RA系列FSP庫開發(fā)實戰(zhàn)指南之DMAC在重復(fù)傳輸模式下的配置代碼
評論