尝试使用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
回复
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
vscode+cmake搭建雅特力AT32L021开发环境被打赏30分 | |
【换取逻辑分析仪】自制底板并驱动ArduinoNanoRP2040ConnectLCD扩展板被打赏47分 | |
【分享评测,赢取加热台】RISC-V GCC 内嵌汇编使用被打赏38分 | |
【换取逻辑分析仪】-基于ADI单片机MAX78000的简易MP3音乐播放器被打赏48分 | |
我想要一部加热台+树莓派PICO驱动AHT10被打赏38分 | |
【换取逻辑分析仪】-硬件SPI驱动OLED屏幕被打赏36分 | |
换逻辑分析仪+上下拉与多路选择器被打赏29分 | |
Let'sdo第3期任务合集被打赏50分 | |
换逻辑分析仪+Verilog三态门被打赏27分 | |
换逻辑分析仪+Verilog多输出门被打赏24分 |