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

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

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

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

时间:2025-12-15 11:09

人气:

作者:admin

标签:

导读:首先,要使用DMA传输,就肯定要有一个源地址和一个目标地址,这里我们定义SRC_Buffer数组的首地址作为源地址,DST_Buffer数组的首地址作为DMAC传输的目标地址。SRC_Buffer数组由于有const声...

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, //指定传输的长度(即正常和重复模式下的传输次数␣
→或 块和重复-块模式下传输的块大小)
/ 
温馨提示:以上内容整理于网络,仅供参考,如果对您有帮助,留下您的阅读感言吧!
相关阅读
本类排行
相关标签
本类推荐

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

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

关注微信