网站首页 全球最实用的IT互联网站!

人工智能P2P分享Wind搜索发布信息网站地图标签大全

当前位置:诺佳网 > 电子/半导体 > 嵌入式技术 >

瑞萨RA系列FSP库开发实战指南之DMAC中断回调函数

时间:2025-12-26 09:25

人气:

作者:admin

标签:

导读:调用R_DMAC_SoftwareStart函数来发起软件触发请求信号来启动DMAC传输。...

19.7.1.11

DMAC中断回调函数

DMAC中断回调函数如下所示:

列表10: 代码清单20‑9DMAC中断回调函数

左右滑动查看完整内容

// DMA 传输完成标志位
volatilebool dmac0_complete_transmission_sign =false;
// 传输次数计数(中断次数)
volatileuint16_t dmac0_transfer_count;
/* DMAC 中断回调函数 */
voiddmac0_callback(dmac_callback_args_t *p_args)
{
(void)(p_args);
dmac0_complete_transmission_sign =true;
dmac0_transfer_count ++;
}

dmac0_transfer_count用于记录DMAC产生中断的次数。

19.7.1.12

hal_entry 入口函数

在hal_entry函数中,程序遵循以下步骤来执行:

调用DMAC_Init函数初始化DMAC。

调用R_DMAC_Enable函数使能DMAC使之可以响应传输请求。

调用R_DMAC_SoftwareStart函数来发起软件触发请求信号来启动DMAC传输。

通过一定的延时等待所有传输完成,因为在产生多次的中断的情况下,仅通过中断标志位判断可能出错。

在传输完成之后,比较传输目标地址的数据(DST_Buffer)和期待的正确数据(Expected_DST_Buffer)是否一致。

传入R_DMAC_SoftwareStart函数的参数 TRANSFER_START_MODE_SINGLE和TRANS-FER_START_MODE_REPEAT的区别如下:

传入参数为TRANSFER_START_MODE_SINGLE时,正常模式和重复模式下每发起一次软件请求只会传输一个数据单元大小(transfer_size_tsize)的数据。块模式下则是只会传输一个块大小(transfer_info_t::length)的数据。

传入参数为TRANSFER_START_MODE_REPEAT时,会自动重复地触发传输,期间可能会产生多次中断,直至所有数据都传输完成为止。

hal_entry入口函数如下所示。

列表11:代码清单20‑10hal_entry入口函数

左右滑动查看完整内容

/*用户头文件包含*/
#include"led/bsp_led.h"
#include"debug_uart/bsp_debug_uart.h"
#include"dmac/bsp_dmac_m2m.h"
externconstuint32_tSRC_Buffer[BUFFER_SIZE];
externuint32_tDST_Buffer[BUFFER_SIZE];
externuint32_tExpected_DST_Buffer[BUFFER_SIZE];
externvolatilebooldmac0_complete_transmission_sign;
externvolatileuint16_tdmac0_transfer_count;
uint8_tBufferCompare(constuint32_t*pBuffer1,constuint32_t*pBuffer2,␣
→uint16_tBufferLength);
voidBufferShow_HexData(constuint32_t*pBuffer,uint16_tBufferLength);
voidhal_entry(void)
{
/*TODO:addyourowncodehere*/
fsp_err_terr= FSP_SUCCESS;
uint8_tres;
LED_Init();
// LED 初始化
Debug_UART4_Init();// SCI4 UART 调试串口初始化
/* 初始化 DMAC */
DMAC_Init();
dmac0_complete_transmission_sign =false;//传输完成标志位清零
printf("这是一个 DMAC 存储器到存储器的传输实验例程
");
printf("打开串口助手,查看接收窗口打印的相关提示信息
");
printf("观察板载 LED 灯,本实验使用两个 LED 灯来指示 DMAC 传输结果
");
printf("- DMA 数据传输失败,则 LED1 亮(红色)
");
printf("- DMA 数据传输成功,则 LED2 亮(蓝色)
");
printf("--------------------------------------------
");
/* 使能 DMAC 使之可以响应传输请求 */
R_DMAC_Enable(&g_transfer_dmac0_ctrl);
/************************************/
/* 使用软件触发的方式启动 DMAC 传输 */
/************************************/
#ifndefUSE_MY_TRANSFER_INFOR_CONFIG
/* 根据 FSP 配置界面的传输信息配置进行传输 */
//可以用下面这种方式:
R_DMAC_SoftwareStart(&g_transfer_dmac0_ctrl, TRANSFER_START_MODE_
→REPEAT);
//也可以用这种方式:
//for (uint16_t i = 0; i < 1; i++)
//{
//
err = R_DMAC_SoftwareStart(&g_transfer_dmac0_ctrl, TRANSFER_
→START_MODE_SINGLE);
//
assert(FSP_SUCCESS == err);
/ 
温馨提示:以上内容整理于网络,仅供参考,如果对您有帮助,留下您的阅读感言吧!
相关阅读
本类排行
相关标签
本类推荐

CPU | 内存 | 硬盘 | 显卡 | 显示器 | 主板 | 电源 | 键鼠 | 网站地图

Copyright © 2025-2035 诺佳网 版权所有 备案号:赣ICP备2025066733号
本站资料均来源互联网收集整理,作品版权归作者所有,如果侵犯了您的版权,请跟我们联系。

关注微信