尝试使用ADPCM库 编码采集到的数据 效果不理想
虽然按照说明文档一步步来
首先是AD采集的设置
由于开发板上AIN2已经和滑动变阻器相连
换为AIN3


主函数中仅仅调用了R_encode_main(); 函数
void main(void)
{
/* Start user code. Do not edit comment generated here */
R_encode_main();
while (1U)
{
}
/* End user code. Do not edit comment generated here */
}
调试时 学习了upload
Debug菜单下有个unload...
现在memory串口中找到g_EncodedData的地址

然后单击Debug->upload...
弹出对话框

设置好文件名 文件类型 和数据地址后 导出数据
利用ADPCM自带的工具软件 将导出的bin文件转换为wav文件

选择bin文件

设置导出的wav文件名

打开wav文件
结果
貌似不对!!
有谁调试得到理想结果的么?
附上我的代码 希望有人能帮忙解决下
myADPCMen_Cube.rar
51楼
52楼
10-05 实现DMA 方式串口发送数据
参考了硬件手册的809 及 812 页 的流程图 以及说明
以及 RSKRL78G13_Samples_IAR 中的 DMAC 工程
首先是Applilet 的设置
串口2 发送

DMA传输

设置SFR 及 RAM 地址 传输方向 触发方式
主要代码



调试的过程

串口接收到的结果

代码:
myComDMA.rar
下一步准备做串口DMA接收数据
参考了硬件手册的809 及 812 页 的流程图 以及说明

以及 RSKRL78G13_Samples_IAR 中的 DMAC 工程
首先是Applilet 的设置
串口2 发送

DMA传输

设置SFR 及 RAM 地址 传输方向 触发方式
主要代码



调试的过程

串口接收到的结果

代码:
myComDMA.rar
下一步准备做串口DMA接收数据
54楼
DMA 串口接收成功
参考硬件手册的 815 816 页 流程图
修改之处在于如下面的Remark所说 没有使用软件触发DMA中断,采用串口接收中断触发DMA传输中断

Applilet 设置


代码


调试过程

参考硬件手册的 815 816 页 流程图
修改之处在于如下面的Remark所说 没有使用软件触发DMA中断,采用串口接收中断触发DMA传输中断

Applilet 设置


代码


调试过程

56楼
10-07 DMA 方式 AD数据采集
参考硬件手册832 及 833页


Applilet 设置


主要代码:

分别对 AD 8位 10位 DMA 8位 16位 进行了调试
8位AD采集 16位DMA

可以发现 DMA的 RAM 的低8位均为0 高8位和 AD_ReadByte函数得到结果一致
这是由于AD结果寄存器ADCRH为16位寄存器,AD_ReadByte得到其高8位
函数AD_ReadByte原型
void AD_ReadByte(UCHAR *buffer)
{
*buffer = ADCRH; // 高8位
}
10位AD采集 16位DMA

乍一看发现DMA 的RAM 和 AD采集的结果不一致?
这是由于DMA直接将16位寄存器 ADCR 的值进行了保存
而10位AD采集结果是按照左对齐的,函数AD_Read为了得到实际结果内部进行了右移,从函数原型中可以看出
void AD_Read(USHORT *buffer)
{
*buffer = (USHORT)(ADCR >> 6U); // 左对齐? 向右移位
}
而进过检验运算后 结果是一致的
0x7B40 >> 6 = 0x1ED
同时发现 关于DMA的寄存器 DBC 设置的是DMA 传输的次数 而不是DMA传输的字节数
虽然手册上解释说是"DMA byte count register" 太容易误导了
这一点可以从手册上的 图15-6上看出
每次DMA传输 不管DRA的地址是加1还是加2 DBC都是只减去1

假期里把DMA 方式尝试了一下 收货还是挺大的
参考硬件手册832 及 833页


Applilet 设置


主要代码:

分别对 AD 8位 10位 DMA 8位 16位 进行了调试
8位AD采集 16位DMA

可以发现 DMA的 RAM 的低8位均为0 高8位和 AD_ReadByte函数得到结果一致
这是由于AD结果寄存器ADCRH为16位寄存器,AD_ReadByte得到其高8位
函数AD_ReadByte原型
void AD_ReadByte(UCHAR *buffer)
{
*buffer = ADCRH; // 高8位
}
10位AD采集 16位DMA

乍一看发现DMA 的RAM 和 AD采集的结果不一致?
这是由于DMA直接将16位寄存器 ADCR 的值进行了保存
而10位AD采集结果是按照左对齐的,函数AD_Read为了得到实际结果内部进行了右移,从函数原型中可以看出
void AD_Read(USHORT *buffer)
{
*buffer = (USHORT)(ADCR >> 6U); // 左对齐? 向右移位
}
而进过检验运算后 结果是一致的
0x7B40 >> 6 = 0x1ED
同时发现 关于DMA的寄存器 DBC 设置的是DMA 传输的次数 而不是DMA传输的字节数
虽然手册上解释说是"DMA byte count register" 太容易误导了
这一点可以从手册上的 图15-6上看出
每次DMA传输 不管DRA的地址是加1还是加2 DBC都是只减去1

假期里把DMA 方式尝试了一下 收货还是挺大的
60楼
10-28 基于瑞萨的声音采集系统测试
上位机由VC6 编写,通过串口向MCU 发送“开始”或者“停止”命令,并将接收到的采集数据显示。
下位机根据接收到的命令进入 待机模式 或者 工作模式,在工作模式下,定时器触发AD采集信号,并将信号以一定的格式发送到上位机;在待机模式下,MCU进入低功耗的HALT模式,通过串口响应可以退出HALT模式。
测试视频已经上传
上位机由VC6 编写,通过串口向MCU 发送“开始”或者“停止”命令,并将接收到的采集数据显示。
下位机根据接收到的命令进入 待机模式 或者 工作模式,在工作模式下,定时器触发AD采集信号,并将信号以一定的格式发送到上位机;在待机模式下,MCU进入低功耗的HALT模式,通过串口响应可以退出HALT模式。
测试视频已经上传
回复
| 有奖活动 | |
|---|---|
| 硬核工程师专属补给计划——填盲盒 | |
| “我踩过的那些坑”主题活动——第002期 | |
| 【EEPW电子工程师创研计划】技术变现通道已开启~ | |
| 发原创文章 【每月瓜分千元赏金 凭实力攒钱买好礼~】 | |
| 【EEPW在线】E起听工程师的声音! | |
| 高校联络员开始招募啦!有惊喜!! | |
| 【工程师专属福利】每天30秒,积分轻松拿!EEPW宠粉打卡计划启动! | |
| 送您一块开发板,2025年“我要开发板活动”又开始了! | |
我要赚赏金打赏帖 |
|
|---|---|
| Chaos-nano:专为低资源单片机设计的轻量级协作式异步操作系统(ATMEGA328P轻量级操作系统)—— 详细介绍被打赏¥16元 | |
| FPGA配置被打赏¥10元 | |
| Chaos-nano协作式异步操作系统:赋能MicrochipAVR8位单片机的革新之路被打赏¥15元 | |
| 基于esp32开发时串口工具的注意点被打赏¥24元 | |
| 基于FireBeetle2ESP32-C5开发板的舵机控制被打赏¥20元 | |
| 【分享开发笔记,赚取电动螺丝刀】MAX78000开发板制作的电子相册被打赏¥32元 | |
| 基于FireBeetle2ESP32-C5开发板的超声波测距及显示被打赏¥21元 | |
| FireBeetle2ESP32-C5上RTC电子时钟的实现被打赏¥25元 | |
| 【分享开发笔记,赚取电动螺丝刀】MAX78000开发板读取SD卡被打赏¥23元 | |
| 【S32K3XX】Standby RAM 重启后数据异常问题调查被打赏¥38元 | |

我要赚赏金
