0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

瑞萨RA系列FSP库开发实战指南之定义传输源和目标存储器

瑞萨嵌入式小百科 来源:野火电子 2025-12-15 11:09 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

19.7.1.3

定义传输源和目标存储器

首先,要使用DMA传输,就肯定要有一个源地址和一个目标地址,这里我们定义SRC_Buffer数组的首地址作为源地址,DST_Buffer数组的首地址作为DMAC传输的目标地址。SRC_Buffer数组由于有const声明为常量,因此其数据存储在内部Flash 中,DST_Buffer为普通的全局变量,其数据存储在RAM中。这两个数组的大小由宏定义BUFFER_SIZE来决定。

列表2:代码清单20‑1 定义传输源和目标存储器

左右滑动查看完整内容

// 用户要发送的数据大小
#defineBUFFER_SIZE 32
/**
* 定义 SRC_Buffer 数组作为 DMAC 传输数据源
* const 关键字将 SRC_Buffer 数组变量定义为常量类型,数据存储在内部的 FLASH 中
*/
constuint32_tSRC_Buffer[BUFFER_SIZE] = {
0x01020304,0x05060708,0x090A0B0C,0x0D0E0F10,
0x11121314,0x15161718,0x191A1B1C,0x1D1E1F20,
0x21222324,0x25262728,0x292A2B2C,0x2D2E2F30,
0x31323334,0x35363738,0x393A3B3C,0x3D3E3F40,
0x41424344,0x45464748,0x494A4B4C,0x4D4E4F50,
0x51525354,0x55565758,0x595A5B5C,0x5D5E5F60,
0x61626364,0x65666768,0x696A6B6C,0x6D6E6F70,
0x71727374,0x75767778,0x797A7B7C,0x7D7E7F80};
/**
* 定义 DMAC 传输目标存储器
* 存储在内部的 SRAM 中
*/
uint32_tDST_Buffer[BUFFER_SIZE] = {0};

19.7.1.4

设置源地址和目标地址函数

DMAC传输的配置,可以选择在FSP配置界面中进行配置,但是要注意,在FSP配置界面中进行配置的话是不方便配置传输地址的,所以此时我们其实还没有配置传输的源地址和目标地址,这部分需要在代码里面配置。

列表3:代码清单20‑2 设置源地址和目标地址函数

左右滑动查看完整内容

/* 设置传输的源地址和目的地址 */
voidset_transfer_dst_src_address(transfer_cfg_tconst *constp_config,
voidconst * volatile p_src,
voidconst * volatile p_dest )
{
p_config->p_info->p_src = (void*) p_src;
p_config->p_info->p_dest = (void*) p_dest;
}

19.7.1.5

使用FSP配置器生成的配置

前面我们在FSP配置界面上的配置其实是保存在hal_data.c文件中。如下图所示。

3dc2e534-d190-11f0-8c8f-92fbcf53809c.png

我们完全可以在hal_data.c文件中找到定义好的数据,重新复制一份,再改个变量名,在此基础上重新配置各个参数。在本例程中也使用了这种方法,主要是为了使用宏去方便切换不同模式的配置代码,在代码中配置DMAC。在头文件“bsp_dmac_m2m.h”中,默认定义了USE_MY_TRANSFER_INFOR_CONFIG来选择使用我们在代码里自定义的传输信息配置,但是现在让我们先注释掉这个宏定义,从而选择使用在FSP配置界面上的配置。

下面的是与我们之前在FSP配置界面上的配置等效的配置代码:

列表4:代码清单20‑3与FSP配置界面上的配置等效的配置代码

左右滑动查看完整内容

/* FSP 配置界面的传输信息配置(正常传输模式)等效于下面 fsp_transfer_info_normal 里
的配置(除了源地址和目标地址)
源地址和目标地址在 FSP 配置界面设置的话不太方便,我们会在 DMAC_Init 函数里设置。
关于偏移值(Offset value)和源缓冲大小(Source Buffer Size),在 transfer_info_
→t 里没有这两项设置,建议在 FSP 配置界面设置
- 偏移值只有在地址模式是偏移模式的情况下才会用到;
- 而源缓冲大小与之相关的功能本例程不会涉及到,所以暂不考虑。
下面的 fsp_transfer_info_normal 仅作为对比参考,在本例程中是没有用到的。
*/
//transfer_info_t fsp_transfer_info_normal =
//{
// .transfer_settings_word_b.dest_addr_mode = TRANSFER_ADDR_MODE_FIXED,␣
→//每次传输后,目标地址指针固定不变
// .transfer_settings_word_b.repeat_area = TRANSFER_REPEAT_AREA_
→SOURCE,//源区域重复 (正常模式下无效)
// .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_FIXED,␣
→//每次传输后,源地址指针固定不变
// .transfer_settings_word_b.size = TRANSFER_SIZE_2_BYTE, ␣
→//每次传输 2 字节
// .transfer_settings_word_b.mode = TRANSFER_MODE_NORMAL, ␣
→//正常传输模式
// .p_dest = (void *) DST_Buffer, ␣
→//目标地址
// .p_src = (void const *) SRC_Buffer,
→//源地址
// .num_blocks = 0, //指定传输的块数(正常模式下无效,仅在重复、块或
重复-块模式下有效)
// .length = 1, //指定传输的长度(即正常和重复模式下的传输次数␣
→或 块和重复-块模式下传输的块大小)
//};
// 按照上述传输信息配置,期待的正确传输结果为:
uint32_tExpected_DST_Buffer[BUFFER_SIZE] = {
0x00000304,0x00000000,0x00000000,0x00000000,
0x00000000,0x00000000,0x00000000,0x00000000,
0x00000000,0x00000000,0x00000000,0x00000000,
0x00000000,0x00000000,0x00000000,0x00000000,
0x00000000,0x00000000,0x00000000,0x00000000,
0x00000000,0x00000000,0x00000000,0x00000000,
0x00000000,0x00000000,0x00000000,0x00000000,
0x00000000,0x00000000,0x00000000,0x00000000};

可以看到,上述代码中的传输信息结构体变量fsp_transfer_info_normal被完全注释掉了,因为在本例程中,永远不会用到该变量,即使取消了注释也是一样,虽然取消注释后编译也不会报错。该变量在这里的目的仅是方便与我们之前在FSP配置界面上的传输配置进行比较,两者的配置基本上是等效的。

本例程中需要用到的是Expected_DST_Buffer数组,其中保存的数据是根据源数据SRC_Buffer和当前的传输配置得出的正确结果,我们在进行实际上的传输结束后也应该在DST_Buffer数组中获得这样的数据。换句话说,SRC_Buffer保存了要传输的源数据,DST_Buffer保存了传输后的实际结果,Expected_DST_Buffer则保存的是传输后的正确结果,后面还会通过DST_Buffer与Expected_DST_Buffer数组中数据的对比,来判断传输是否成功。

19.7.1.6

使用代码配置:正常传输模式

下面是DMAC在正常模式下传输的配置代码:

列表5:代码清单20‑4 DMAC正常传输模式配置

左右滑动查看完整内容

/* 正常传输模式 */
transfer_info_tmy_transfer_info_normal =
{
.transfer_settings_word_b.dest_addr_mode = TRANSFER_ADDR_MODE_
→INCREMENTED,//每次传输后,目标地址指针都会增加
.transfer_settings_word_b.repeat_area = TRANSFER_REPEAT_AREA_SOURCE,
→//源区域重复 (正常模式下无效)
.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 字节
.transfer_settings_word_b.mode = TRANSFER_MODE_NORMAL, ␣
→//正常传输模式
.p_dest = (void*) DST_Buffer, ␣
→//目标地址
.p_src = (voidconst *) SRC_Buffer, ␣
→//源地址
.num_blocks =0,//指定传输的块数(正常模式下无效,仅在重复、块或重
复-块模式下有效)
.length = BUFFER_SIZE,//指定传输的长度(即正常和重复模式下的传输次数 或␣
→块和重复-块模式下传输的块大小)
};
// 按照上述传输信息配置,期待的正确传输结果为:
uint32_tExpected_DST_Buffer[BUFFER_SIZE] = {
0x01020304,0x05060708,0x090A0B0C,0x0D0E0F10,
0x11121314,0x15161718,0x191A1B1C,0x1D1E1F20,
0x21222324,0x25262728,0x292A2B2C,0x2D2E2F30,
0x31323334,0x35363738,0x393A3B3C,0x3D3E3F40,
0x41424344,0x45464748,0x494A4B4C,0x4D4E4F50,
0x51525354,0x55565758,0x595A5B5C,0x5D5E5F60,
0x61626364,0x65666768,0x696A6B6C,0x6D6E6F70,
0x71727374,0x75767778,0x797A7B7C,0x7D7E7F80};

在本例程中使用以上代码需在头文件“bsp_dmac_m2m.h”中定义宏USE_MY_TRANSFER_INFOR_CONFIG,并且 定义宏DMAC_TRANSFER_MODEDMAC_TRANSFER_NORMAL_MODE来选择。传输模式为:正常传输模式

传输信息结构体变量my_transfer_info_normal用于对DMAC的传输进行重配置。

读者可跳到本章后面的“下载验证”小节,编译并下载程序来验证本实验例程运行结果。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 存储器
    +关注

    关注

    39

    文章

    7716

    浏览量

    170926
  • 瑞萨
    +关注

    关注

    36

    文章

    22434

    浏览量

    89839
  • 函数
    +关注

    关注

    3

    文章

    4408

    浏览量

    66899
  • dma
    dma
    +关注

    关注

    3

    文章

    578

    浏览量

    105391

原文标题:定义传输源和目标存储器——瑞萨RA系列FSP库开发实战指南(55)

文章出处:【微信号:瑞萨嵌入式小百科,微信公众号:瑞萨嵌入式小百科】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    RA系列MCU FSP开发实战指南(09)存储器映射

    3.3 存储器映射 前文所述,寄存与RAM、FLASH一样都是芯片内部的一种存储设备。那么,当我们需要访问它们的时候,我们需要知道它们的存储地址。 3.3.1
    的头像 发表于 04-16 15:52 1300次阅读
    <b class='flag-5'>瑞</b><b class='flag-5'>萨</b><b class='flag-5'>RA</b><b class='flag-5'>系列</b>MCU <b class='flag-5'>FSP</b><b class='flag-5'>库</b><b class='flag-5'>开发</b><b class='flag-5'>实战</b><b class='flag-5'>指南</b>(09)<b class='flag-5'>存储器</b>映射

    e2studio(1)----芯片搭建FSP环境

    视频教学 样品申请 请勿添加外链 e2studio软件 e2studio是的集成开发环境,FSP 提供了众多可提高效率的工具,用于开发
    发表于 09-30 15:28

    RA2L1入门学习】RA2L1开发环境搭建

    e² studio 和 FSP 的下载、安装及使用指南 1. 什么是 e² studio 和 FSP? e² studio 是电子(Re
    发表于 03-07 11:33

    RA6E2地奇星开发板试用】介绍、环境搭建、工程测试

    RA6E2开发板 - 立创开源硬件平台 . 开发环境 开发环境支持 e^2^ studio 和 Keil ,这里主要介绍和使用前者。 下载并安装
    发表于 12-07 15:27

    RA4系列开发板体验】开发环境搭建和新手点灯指南

    RA4系列开发板体验】开发环境搭建和新手点灯指南
    发表于 11-24 22:54

    RA4系列开发板体验】10. 我的试用总结

    之前发帖:【RA4系列开发板体验】1. 新建工程+按键控制LED【
    发表于 12-10 22:34

    RA4系列开发板体验】1、开发板要来了(1)

    了,先体现进行一下准备工作。由于板子还没有到手,咱们主要先了解一下开发环境。RA系列的单片机有一个自己的
    发表于 12-12 17:04

    RA4系列开发板体验】体验过程

    拿到板子之后,做了几个实验过程,过程如下:1、在好奇心驱动下,逐步接触;参照网上的实例,学习开发环境一、开箱验货二、搭建环境参考“ 【
    发表于 12-18 16:20

    【野火启明6M5开发板体验】开箱+认识开发板+资料

    按键检测29. WiFi——模块通讯板尺寸:3、资料:*附件:[野火EmbedFire]《RA系列FSP
    发表于 12-20 23:28

    推出SH7216系列32-位片上Flash存储器MCU

    推出SH7216系列32-位片上Flash存储器MCU作者:时间:2009-04-21来:电子产品世界字号: 小 中 大关键词: 
    发表于 12-02 09:51 11次下载
    <b class='flag-5'>瑞</b><b class='flag-5'>萨</b>推出SH7216<b class='flag-5'>系列</b>32-位片上Flash<b class='flag-5'>存储器</b>MCU

    e2studio(1)----芯片搭建FSP环境

    e2studio是的集成开发环境,FSP 提供了众多可提高效率的工具,用于开发针对
    的头像 发表于 11-14 17:08 2886次阅读
    <b class='flag-5'>瑞</b><b class='flag-5'>萨</b>e2studio(1)----<b class='flag-5'>瑞</b><b class='flag-5'>萨</b>芯片<b class='flag-5'>之</b>搭建<b class='flag-5'>FSP</b>环境

    【有奖直播预报名】电子RA系列产品开发工具FSP4.0.0新特性介绍

    为使用电子RA系列ARM微控制的嵌入式系统设计提供简单易用且可扩展的高质量软件。 直播主题
    的头像 发表于 11-22 12:20 1339次阅读

    【视频教程】RA单片机FSP开发(3)FSP架构-解释Blinky架构[上]

    干货分享 前篇回顾 【视频教程】RA单片机FSP开发(1)环境搭建(带RASC) 【视频教程】
    的头像 发表于 12-06 12:15 1632次阅读

    使用e² studio FSP基于RA2E1定时配置PWM输出

    使用e² studio FSP基于RA2E1定时配置PWM输出
    的头像 发表于 08-01 00:13 1680次阅读
    使用<b class='flag-5'>瑞</b><b class='flag-5'>萨</b>e² studio <b class='flag-5'>FSP</b>基于<b class='flag-5'>RA</b>2E1定时<b class='flag-5'>器</b>配置PWM输出

    电子RA系列微控制的可扩展性强的配置软件包 (FSP)安装下载与使用指南

    电子RA系列微控制的可扩展性强的配置软件包 (FSP)安装下载与使用
    的头像 发表于 06-11 17:21 1416次阅读