我分析改造例子代码的过程
ADPCM 库给的例子给出了解码和编码的使用
解码(decode),我的理解就是ADPCM-->PCM / WAV
编码(encode),就是将WAV / PCM --> ADPCM
现在主要分析解码的过程
R_decode_main();
解码主要使用定时器0 和 定时器2 3
定时器2 3 用于实现PWM 输出
定时器0设定的定时间隔要和我们实际录制的音频格式的采样率一样(录制的话选择单声道)
如果是11.025kHz 可以设置间隔为90.7 us
如果是8kHz 可以设置间隔为125 us
系统一直在进行解码的工作直到全部文件解码完成
中间会有定时器0中断 将解码好的数据发送出去
定时器0的定时时间到了之后 调用
R_interrupt_decode_timer();
函数,控制PWM 输出数据
需要注意的是 宏定义 PCM_DATA_SIZE1 是 ADPCM格式的dat文件大小的2倍
同时 宏定义 ADPCM_ADDR1 的值也要和调试下载数据文件的位置一致
手册上有段话
(4) Loading of sound data
Download ADPCM data to the address set to "ADPCM_ADDR1". ADPCM data is the data created using the
ADPCM_TOOL. Please refer the CubeSuite+ manual for the downloading procedure.
记得调试要改成E1方式
下载文件的具体设置就如同下图
我单独使用解调方式 将我录制的一段声音(单通道 8k) 经过 ADPCM自带的tool工具 ADPCM.exe 进行转换 并使用到程序中
主函数代码
void main(void)
{
/* Start user code. Do not edit comment generated here */
while (1U)
{
R_decode_main();
}
/* End user code. Do not edit comment generated here */
}
我的代码: myADPCMde_Cube.rar

31楼

32楼
为了实现
ADPCM库录音
及
设计的呼吸音监测方案
制作了麦克风放大电路
原理图
后面的施密特触发器是为了实现对单片机的中断
实物图
测试图
视频
视频地址:http://union.bokecc.com/flash/player.swf?vid=56EFF65BF0809519&siteid=290666218ACBA694&playerid=EEA982EE6B20F4D1&playertype=1

33楼
尝试使用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

34楼
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接收数据

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

Applilet 设置


代码


调试过程

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

Applilet 设置


代码


调试过程



36楼
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 方式尝试了一下 收货还是挺大的



39楼
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