91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

瑞薩RA系列FSP庫開發(fā)實戰(zhàn)指南之DMAC+UART串口收發(fā)實驗

瑞薩嵌入式小百科 ? 來源:野火電子 ? 2025-12-26 09:28 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

19.8

實驗2:DMAC+UART串口收發(fā)

19.8.1

軟件設(shè)計

19.8.1.1

新建工程

本實驗新建工程的步驟與上面的實驗1基本一致。

對于e2studio開發(fā)環(huán)境:

拷貝一份我們之前的e2s工程“19_UART_Receive_Send”,然后將工程文件夾重命名為“20_DMAC_Using_UART”,最后再將它導(dǎo)入到我們的e2studio工作空間中。

對于Keil開發(fā)環(huán)境:

拷貝一份我們之前的Keil工程“19_UART_Receive_Send”,然后將工程文件夾重命名為“20_DMAC_Using_UART”,并進入該文件夾里面雙擊Keil工程文件,打開該工程。

工程新建好之后,在工程根目錄的“src”文件夾下面新建“dmac”文件夾,再進入“dmac”文件夾里面新建源文件和頭文件:“bsp_dmac.c”和“bsp_dmac.h”。工程文件結(jié)構(gòu)如下。

列表14:文件結(jié)構(gòu)

左右滑動查看完整內(nèi)容

20_DMAC_Using_UART
├─ ......
└─src
├─ led
│ ├─ bsp_led.c
│ └─ bsp_led.h
├─ debug_uart
│ ├─ bsp_debug_uart.c
│ └─ bsp_debug_uart.h
├─ dmac
│ ├─ bsp_dmac.c
│ └─ bsp_dmac.h
└─ hal_entry.c

19.8.1.2

FSP配置

按照與實驗1相同的步驟加入兩個r_dmac的Stack,如下圖所示。

596a9396-dafe-11f0-8c8f-92fbcf53809c.png

添加后,配置這兩個DMAC模塊,一個配置為用于UART發(fā)送,一個配置為用于UART接收。

UART4發(fā)送的DMAC配置如下:

59c93c16-dafe-11f0-8c8f-92fbcf53809c.png

UART4接收的DMAC配置如下:

5a238554-dafe-11f0-8c8f-92fbcf53809c.png

19.8.1.3

編寫代碼

hal_entry入口函數(shù)的代碼如下。

列表15:代碼清單20?13測試dmac串口

左右滑動查看完整內(nèi)容

/* 用戶頭文件包含 */
#include"led/bsp_led.h"
#include"debug_uart/bsp_debug_uart.h"
#include"dmac/bsp_dmac.h"
#defineBUFFER_SIZE (37)
uint8_tsci_tx_data[BUFFER_SIZE] = {"embedfire-野火 www.embedfire.com
"}
→;
uint8_tsci_rx_data[BUFFER_SIZE];
voidhal_entry(void)
{
/*TODO:add your own code here */
LED_Init();// LED 初始化
Debug_UART4_Init();// SCI4 UART 調(diào)試串口初始化
printf("
實驗 2:DMAC+UART 串口收發(fā)
");
printf("- 藍、綠燈亮 - 接收成功、發(fā)送成功
");
printf("- 藍色燈亮 - 接收失敗、發(fā)送成功
");
printf("- 綠色燈亮 - 接收成功、發(fā)送失敗
");
printf("- 紅色燈亮 - 接收失敗、發(fā)送失敗
");
printf("
發(fā)送內(nèi)容如下:
");
/* 通過 CPU 和中斷處理程序發(fā)送數(shù)據(jù) */
R_SCI_UART_Write(&g_uart4_ctrl, &sci_tx_data[0], BUFFER_SIZE);
/* 等待傳輸完成中斷 - 標志位在 UART 的回調(diào)函數(shù)中 debug_uart4_callback() */
while(false== uart_send_complete_flag );
uart_send_complete_flag =false;
/* 通過 DMAC 和中斷處理程序發(fā)送數(shù)據(jù) */
/* 清零 ICU IELSR 寄存器 */
R_ICU->IELSR[SCI4_RXI_IRQn] =0U;
R_ICU->IELSR[SCI4_TXI_IRQn] =0U;
/* 配置串口接收 DMA 源地址、目標地址、長度 */
set_transfer_dst_src_address(g_transfer_dmac_sci4_rx.p_cfg,
&R_SCI4->RDR,
&sci_rx_data[0]);
set_transfer_length(g_transfer_dmac_sci4_rx.p_cfg, BUFFER_SIZE);
/* 配置串口發(fā)送 DMA 源地址、目標地址、長度 */
set_transfer_dst_src_address(g_transfer_dmac_sci4_tx.p_cfg,
&sci_tx_data[0],
(void*)&R_SCI4->TDR);
set_transfer_length(g_transfer_dmac_sci4_tx.p_cfg, BUFFER_SIZE);
/* 開啟 DMAC */
DMAC_Init();
/* 手動觸發(fā)傳輸數(shù)據(jù)寄存器空中斷 */
R_SCI4->SCR_b.TE =0;
R_SCI4->SCR_b.RE =0;
R_SCI4->SCR |= (0xF0);
// R_SCI4->SCR_b.TE = 0;
// R_SCI4->SCR_b.TIE = 0;
// uint8_t temp = (uint8_t)(R_SCI4->SCR & 0x53); //0x53 = 101 0011
// R_SCI4->SCR = (uint8_t)(0xa0 | temp); //0x0a = 1010 0000
while(1)
{
if((1== dmac_sci4_tx_flag ) && (1== dmac_sci4_rx_flag ))
{
//藍、綠燈亮 - 接收成功、發(fā)送成功
LED1_OFF;
LED2_ON;
LED3_ON;
}
elseif((1== dmac_sci4_tx_flag ) && (0== dmac_sci4_rx_flag ))
{
//藍色燈亮 - 接收失敗、發(fā)送成功
LED1_OFF;
LED2_ON;
LED3_OFF;
}
elseif((0== dmac_sci4_tx_flag ) && (1== dmac_sci4_rx_flag ))
{
//綠色燈亮 - 接收成功、發(fā)送失敗
LED1_OFF;
LED2_OFF;
LED3_ON;
}
else
{
//紅色燈亮 - 接收失敗、發(fā)送失敗
LED1_ON;
LED2_OFF;
LED3_OFF;
}
}
#ifBSP_TZ_SECURE_BUILD
/* Enter non-secure code */
R_BSP_NonSecureEnter();
#endif
}
/**
* 判斷指定長度的兩個數(shù)據(jù)源是否完全相等,
* 如果完全相等返回 1,只要其中一對數(shù)據(jù)不相等返回 0
*/
uint8_tBuffercmp(constuint32_t* pBuffer,uint32_t* pBuffer1,uint16_t?
,
→BufferLength)
{
/* 數(shù)據(jù)長度遞減 */
while(BufferLength--)
{
/* 判斷兩個數(shù)據(jù)源是否對應(yīng)相等 */
if(*pBuffer != *pBuffer1)
{
/* 對應(yīng)數(shù)據(jù)源不相等馬上退出函數(shù),并返回 0 */
return0;
}
/* 遞增兩個數(shù)據(jù)源的地址指針 */
pBuffer++;
pBuffer1++;
}
/* 完成判斷并且對應(yīng)數(shù)據(jù)相對 */
return1;
}

在bsp_dmac.c文件中編寫DMAC初始化等函數(shù),如下所示。

列表16:代碼清單20?14DMAC初始化函數(shù)

左右滑動查看完整內(nèi)容

/* 初始化 DMAC 模塊 */
voidDMAC_Init(void)
{
fsp_err_t err;
/* 配置發(fā)送 */
err = g_transfer_on_dmac.open(g_transfer_dmac_sci4_tx.p_ctrl, g_
→transfer_dmac_sci4_tx.p_cfg);
assert(FSP_SUCCESS== err);
err = g_transfer_on_dmac.enable(g_transfer_dmac_sci4_tx.p_ctrl);
assert(FSP_SUCCESS== err);
/* 配置接收 */
err = g_transfer_on_dmac.open(g_transfer_dmac_sci4_rx.p_ctrl, g_
→transfer_dmac_sci4_rx.p_cfg);
assert(FSP_SUCCESS== err);
err = g_transfer_on_dmac.enable(g_transfer_dmac_sci4_rx.p_ctrl);
assert(FSP_SUCCESS== err);
}
voidset_transfer_length(transfer_cfg_tconst * p_config, volatile uint16_
→t _length)
{
p_config->p_info->length = _length;
}
/* 設(shè)置傳輸?shù)脑吹刂泛湍康牡刂?*/
voidset_transfer_dst_src_address(transfer_cfg_tconst *constp_config,
constvolatileuint8_t * _p_src, constvolatileuint8_t * _p_dest)
{
p_config->p_info->p_src = (voidconst * volatile) _p_src;
p_config->p_info->p_dest = (void* volatile) _p_dest;
}

在bsp_dmac.c文件中分別編寫DMAC發(fā)送完成中斷和接收完成中斷的回調(diào)函數(shù),如下所示。

列表17:代碼清單20?15DMAC回調(diào)函數(shù)

左右滑動查看完整內(nèi)容

// DMA 傳輸完成標志位
volatileuint8_t dmac_sci4_tx_flag =0;
volatileuint8_t dmac_sci4_rx_flag =0;
/* DMAC 發(fā)送中斷回調(diào)函數(shù) */
voidtransfer_dmac_sci4_tx_callback(dmac_callback_args_t *p_args)
{
(void)(p_args);
dmac_sci4_tx_flag =1;
}
/* DMAC 接收回調(diào)函數(shù) */
voidtransfer_dmac_sci4_rx_callback(dmac_callback_args_t *p_args)
{
(void)(p_args);
dmac_sci4_rx_flag =1;
}

19.8.2

實驗現(xiàn)象

比較好的接收方式還是直接使用串口接收,使用環(huán)形隊列,來接收不定長的數(shù)據(jù)。

運行代碼時,數(shù)據(jù)字符串”embedfire-野火www.embedfire.com”將傳輸兩次。第一次是通過CPU和中斷,第二次是通過DMAC和中斷。

然后,使用串口調(diào)試助手,向開發(fā)板發(fā)送相同字符串“embedfire-野火www.embedfire.com”,帶回車換行字符。

如果只有藍色燈亮則代表接收失敗、發(fā)送成功,如果只有綠色燈亮則代表接收成功、發(fā)送失敗,如果只有紅色燈亮則代表接收失敗、發(fā)送失敗,藍燈和綠燈同時亮起則是接收和發(fā)送都成功。

觸發(fā)DMA的關(guān)鍵是禁用ICU中斷使能寄存器中的中斷。如果不這樣做,則CPU和DMA之間存在爭用情況,并且無法獲得預(yù)期的結(jié)果。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 串口
    +關(guān)注

    關(guān)注

    15

    文章

    1618

    瀏覽量

    82790
  • uart
    +關(guān)注

    關(guān)注

    22

    文章

    1313

    瀏覽量

    106621
  • 開發(fā)環(huán)境
    +關(guān)注

    關(guān)注

    1

    文章

    270

    瀏覽量

    17635

原文標題:實驗2:DMAC+UART串口收發(fā)——瑞薩RA系列FSP庫開發(fā)實戰(zhàn)指南(58)

文章出處:【微信號:瑞薩嵌入式小百科,微信公眾號:瑞薩嵌入式小百科】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    RA系列FSP開發(fā)實戰(zhàn)指南DTC+UART串口收發(fā)實驗

    實驗新建工程的步驟與上面的實驗3基本一致。
    的頭像 發(fā)表于 01-05 14:29 ?3208次閱讀
    <b class='flag-5'>瑞</b><b class='flag-5'>薩</b><b class='flag-5'>RA</b><b class='flag-5'>系列</b><b class='flag-5'>FSP</b><b class='flag-5'>庫</b><b class='flag-5'>開發(fā)</b><b class='flag-5'>實戰(zhàn)</b><b class='flag-5'>指南</b><b class='flag-5'>之</b>DTC+<b class='flag-5'>UART</b><b class='flag-5'>串口</b><b class='flag-5'>收發(fā)</b><b class='flag-5'>實驗</b>

    RA系列FSP開發(fā)實戰(zhàn)指南I2C讀寫EEPROM實驗

    使用官方提供的FPS進行編程,官方提供的FPS具有方便、快捷、簡潔的特性。
    的頭像 發(fā)表于 01-27 10:02 ?3414次閱讀
    <b class='flag-5'>瑞</b><b class='flag-5'>薩</b><b class='flag-5'>RA</b><b class='flag-5'>系列</b><b class='flag-5'>FSP</b><b class='flag-5'>庫</b><b class='flag-5'>開發(fā)</b><b class='flag-5'>實戰(zhàn)</b><b class='flag-5'>指南</b><b class='flag-5'>之</b>I2C讀寫EEPROM<b class='flag-5'>實驗</b>

    RA系列FSP開發(fā)實戰(zhàn)指南QSPI讀寫外部Flash芯片實驗

    因為本章節(jié)的QSPI Flash相關(guān)實驗例程需要用到板子上的串口功能,因此我們可以直接以前面的“19_UART_Receive_Send”工程為基礎(chǔ)進行修改。
    的頭像 發(fā)表于 03-03 13:57 ?1371次閱讀
    <b class='flag-5'>瑞</b><b class='flag-5'>薩</b><b class='flag-5'>RA</b><b class='flag-5'>系列</b><b class='flag-5'>FSP</b><b class='flag-5'>庫</b><b class='flag-5'>開發(fā)</b><b class='flag-5'>實戰(zhàn)</b><b class='flag-5'>指南</b><b class='flag-5'>之</b>QSPI讀寫外部Flash芯片<b class='flag-5'>實驗</b>

    RA6M4系列DMAC和ADC的詳細介紹(1)

    ADC在產(chǎn)品設(shè)計中是非常常用的MCU外設(shè)模塊,當在某些復(fù)雜的應(yīng)用下需要非常快的采樣速度時,使用DMA進行數(shù)據(jù)搬運,可以更便捷的來實現(xiàn)對數(shù)據(jù)的高效搬運,結(jié)合本例在FSP上輕松配置您的所需,同時也讓我們了解一下
    的頭像 發(fā)表于 11-29 12:14 ?3555次閱讀
    <b class='flag-5'>瑞</b><b class='flag-5'>薩</b><b class='flag-5'>RA</b>6M4<b class='flag-5'>系列</b><b class='flag-5'>DMAC</b>和ADC的詳細介紹(1)

    RA系列FSP開發(fā)實戰(zhàn)指南DMAC中斷回調(diào)函數(shù)等

    調(diào)用R_DMAC_SoftwareStart函數(shù)來發(fā)起軟件觸發(fā)請求信號來啟動DMAC傳輸。
    的頭像 發(fā)表于 12-26 09:25 ?4816次閱讀

    e2studio(1)----芯片搭建FSP環(huán)境

    視頻教學(xué) 樣品申請 請勿添加外鏈 e2studio軟件 e2studio是的集成開發(fā)環(huán)境,FSP 提供了眾多可提高效率的工具,用于開發(fā)
    發(fā)表于 09-30 15:28

    RA2L1入門學(xué)習(xí)】1. 點亮LED

    參考“RA2L1入門教學(xué)實驗.pdf”進行的,之前使用過STM32CubeIDE和STM32CubeMX軟件,相對應(yīng)的是e2stud
    發(fā)表于 01-29 22:17

    **RA2L1入門學(xué)習(xí)】+**UART測試實驗

    RA2L1入門學(xué)習(xí)】+UART測試實驗 本篇文章主要介紹如何使用e2studio對
    發(fā)表于 03-09 15:45

    RA4系列開發(fā)板體驗】開發(fā)環(huán)境搭建和新手點燈指南

    RA4系列開發(fā)板體驗】開發(fā)環(huán)境搭建和新手點燈指南
    發(fā)表于 11-24 22:54

    RA4系列開發(fā)板體驗】CoreMark移植完全指南——UART輸出和SysTick計時的應(yīng)用

    /chapter19.html【野火 RA系列FSP
    發(fā)表于 12-03 15:05

    RA4系列開發(fā)板體驗】體驗過程

    拿到板子之后,做了幾個實驗過程,過程如下:1、在好奇心驅(qū)動下,逐步接觸;參照網(wǎng)上的實例,學(xué)習(xí)開發(fā)環(huán)境一、開箱驗貨二、搭建環(huán)境參考“ 【
    發(fā)表于 12-18 16:20

    【野火啟明6M5開發(fā)板體驗】開箱+認識開發(fā)板+資料

    按鍵檢測29. WiFi——模塊通訊板尺寸:3、資料:*附件:[野火EmbedFire]《RA系列FSP
    發(fā)表于 12-20 23:28

    【有獎直播預(yù)報名】電子RA系列產(chǎn)品開發(fā)工具FSP4.0.0新特性介紹

    為使用電子RA系列ARM微控制器的嵌入式系統(tǒng)設(shè)計提供簡單易用且可擴展的高質(zhì)量軟件。 直播主題
    的頭像 發(fā)表于 11-22 12:20 ?1517次閱讀

    基于RA0E1開發(fā)板的ThreadX實時操作系統(tǒng)串口回顯測試

    感謝立創(chuàng)提供測試機會,學(xué)到RA0及MCU的相關(guān)使用。使用FSP
    的頭像 發(fā)表于 02-25 09:27 ?1179次閱讀
    基于<b class='flag-5'>瑞</b><b class='flag-5'>薩</b><b class='flag-5'>RA</b>0E1<b class='flag-5'>開發(fā)</b>板的ThreadX實時操作系統(tǒng)<b class='flag-5'>串口</b>回顯測試

    電子RA系列微控制器的可擴展性強的配置軟件包 (FSP)安裝下載與使用指南

    電子RA系列微控制器的可擴展性強的配置軟件包 (FSP)安裝下載與使用指南
    的頭像 發(fā)表于 06-11 17:21 ?1835次閱讀