chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

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

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

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

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

掃碼添加小助手

加入工程師交流群

19.8

實(shí)驗(yàn)2:DMAC+UART串口收發(fā)

19.8.1

軟件設(shè)計(jì)

19.8.1.1

新建工程

本實(shí)驗(yàn)新建工程的步驟與上面的實(shí)驗(yàn)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”,并進(jìn)入該文件夾里面雙擊Keil工程文件,打開該工程。

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

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

左右滑動(dòng)查看完整內(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配置

按照與實(shí)驗(yàn)1相同的步驟加入兩個(gè)r_dmac的Stack,如下圖所示。

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

添加后,配置這兩個(gè)DMAC模塊,一個(gè)配置為用于UART發(fā)送,一個(gè)配置為用于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串口

左右滑動(dòng)查看完整內(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("
實(shí)驗(yàn) 2:DMAC+UART 串口收發(fā)
");
printf("- 藍(lán)、綠燈亮 - 接收成功、發(fā)送成功
");
printf("- 藍(lán)色燈亮 - 接收失敗、發(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);
/* 等待傳輸完成中斷 - 標(biāo)志位在 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 源地址、目標(biāo)地址、長度 */
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 源地址、目標(biāo)地址、長度 */
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();
/* 手動(dòng)觸發(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 ))
{
//藍(lán)、綠燈亮 - 接收成功、發(fā)送成功
LED1_OFF;
LED2_ON;
LED3_ON;
}
elseif((1== dmac_sci4_tx_flag ) && (0== dmac_sci4_rx_flag ))
{
//藍(lán)色燈亮 - 接收失敗、發(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
}
/**
* 判斷指定長度的兩個(gè)數(shù)據(jù)源是否完全相等,
* 如果完全相等返回 1,只要其中一對數(shù)據(jù)不相等返回 0
*/
uint8_tBuffercmp(constuint32_t* pBuffer,uint32_t* pBuffer1,uint16_t?
,
→BufferLength)
{
/* 數(shù)據(jù)長度遞減 */
while(BufferLength--)
{
/* 判斷兩個(gè)數(shù)據(jù)源是否對應(yīng)相等 */
if(*pBuffer != *pBuffer1)
{
/* 對應(yīng)數(shù)據(jù)源不相等馬上退出函數(shù),并返回 0 */
return0;
}
/* 遞增兩個(gè)數(shù)據(jù)源的地址指針 */
pBuffer++;
pBuffer1++;
}
/* 完成判斷并且對應(yīng)數(shù)據(jù)相對 */
return1;
}

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

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

左右滑動(dòng)查看完整內(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ù)

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

// DMA 傳輸完成標(biāo)志位
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

實(shí)驗(yàn)現(xiàn)象

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

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

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

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

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

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

    關(guān)注

    15

    文章

    1614

    瀏覽量

    82299
  • uart
    +關(guān)注

    關(guān)注

    22

    文章

    1308

    瀏覽量

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

    關(guān)注

    1

    文章

    265

    瀏覽量

    17584

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

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

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

掃碼添加小助手

加入工程師交流群

    評論

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

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

    實(shí)驗(yàn)新建工程的步驟與上面的實(shí)驗(yàn)3基本一致。
    的頭像 發(fā)表于 01-05 14:29 ?2529次閱讀
    <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'>實(shí)戰(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'>實(shí)驗(yàn)</b>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    RA4系列開發(fā)板體驗(yàn)】10. 我的試用總結(jié)

    KEIL下UART實(shí)現(xiàn)printf與scanf重定向【RA4系列開發(fā)板體驗(yàn)】4. PWM驅(qū)
    發(fā)表于 12-10 22:34

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

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

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

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

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

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

    【視頻教程】RA單片機(jī)FSP開發(fā)(3)FSP架構(gòu)-解釋Blinky架構(gòu)[上]

    干貨分享 前篇回顧 【視頻教程】RA單片機(jī)FSP開發(fā)(1)環(huán)境搭建(帶RASC) 【視頻教程】
    的頭像 發(fā)表于 12-06 12:15 ?1761次閱讀

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

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

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

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