尝试使用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模式。
测试视频已经上传
视频地址:http://union.bokecc.com/flash/player.swf?vid=5331C9EEDD0AF607&siteid=290666218ACBA694&playerid=EEA982EE6B20F4D1&playertype=1
上位机由VC6 编写,通过串口向MCU 发送“开始”或者“停止”命令,并将接收到的采集数据显示。
下位机根据接收到的命令进入 待机模式 或者 工作模式,在工作模式下,定时器触发AD采集信号,并将信号以一定的格式发送到上位机;在待机模式下,MCU进入低功耗的HALT模式,通过串口响应可以退出HALT模式。
测试视频已经上传
视频地址:http://union.bokecc.com/flash/player.swf?vid=5331C9EEDD0AF607&siteid=290666218ACBA694&playerid=EEA982EE6B20F4D1&playertype=1
回复
打赏帖 | |
---|---|
【Zephyr】使用Zephyr外设初始化过程解析被打赏30分 | |
【S32K146】S32DS watchdog 配置使用被打赏20分 | |
【Zephyr】使用 IAR 调试 Zephyr 镜像被打赏20分 | |
赚取电动螺丝刀+电源电路理论知识分享1被打赏5分 | |
我想要一部加热台+分享常见运算放大器电路的应用被打赏5分 | |
【Zephyr】MCXN947 Zephyr 开发入门适配shell被打赏20分 | |
我想要一部加热台+常见的MOS管驱动电路被打赏5分 | |
【我要开发板】6.联合MATLAB记录数据被打赏50分 | |
【换取手持数字示波器】MicrochipMPLABHarmony框架下串口调试printf输出记录被打赏29分 | |
【瑞萨RA2E1开发板】:使用ADC功能实现位移传感器采集方案被打赏20分 |