KT148A语音芯片ic的软件参考代码C语言,一线串口
时间:2023-02-09 07:00:00
目录
3.1通讯格式
3.2通讯指令
4.2通讯举例F3--组合播放
4.3通讯指令F描述超低功耗
4.4注意沟通细节
一线通信协议
目前芯片支持一线串口通信协议,确定0或1 。
3.1通讯格式
注:高电平在前,低电平在后。
推荐使用 200us:600us。取值范围:窄脉冲=[150us--400us] 宽脉冲[500us--1000us]
注意使用 3:1 和 1:3 确保通信稳定性的电平比。
注意起始的6ms低电平,第一次调试时,尽量用示波器或逻辑分析仪检查,误差约为10%
1、0x00H到0xDFH为声音地址码或定义功能码。
2、0xFE发送此命令停止播放语音停止码。
3.编码间隔必须大于20ms
3.2通讯指令
NO.序号 |
Data编码 |
Voice语音表 |
0 |
0x00 |
保留 |
1 |
0x01 |
声音1 |
2 |
0x02 |
声音2 |
3 |
0x03 |
声音3 |
…… |
||
224 |
0xE0~0xEF |
15级音量,0xE0H为最小音量0,0xEFH最大音量 (上电默认)。 (若需要调节音量,则先发音量码,隔20ms再发声音码) |
225 |
0xF0 |
关机。进入超低功耗状态=1.7uA,详见4.3章节 进入此状态之后,还需要控制芯片,则需要先拉低DATA脚40ms 目的是唤醒芯片,就可以正常发指令控制了, |
242 |
0xF2 |
循环码 -- 详见4.1章节 若需要循环某个声音,则先发声音码,隔20ms再发循环码) |
243 |
0xF3 |
连码播放 -- 详见4.2章节 F3H+语音地址 A,语音地址 B,语音地址 C,… 在播放地址 A 的时候,收到后面的码不打断,播放完 A,就播放 B,然后播放 C…。F3 与地址之间需要加 20ms 的延时。而一组连码地址与下一组地址最大需要 40ms 延时(“F3+语音地址”为一组连码地址) |
254 |
0xFE |
停止码 |
/*******************************************************************************
- 函数说明:一线通数据发送【注意调试的时候,用示波器或者逻辑分析仪看一下脉冲宽度】
- 隶属模块:内部
- 参数说明:dat = 待发送的数据
- 返回说明:无
********************************************************************************/
#define IO1_HIGH() JL_PORTA->DIR &= ~BIT(6);JL_PORTA->OUT |= BIT(6);
#define IO1_LOW() JL_PORTA->DIR &= ~BIT(6);JL_PORTA->OUT &= ~BIT(6);
void oneline_send_one_data(u8 dat)
{
u8 i = 0 ;
IO1_LOW() ;/*现将总线拉低*/
udelay(5000) ;/*延时6MS --- 这里就是发起通讯的起始信号*/
CPU_SR_ALLOC();//关中断--芯片不同,可能接口不同
OS_ENTER_CRITICAL();//关中断
for(i=0 ; i<8 ;i++){
if(dat & 0x01){
IO1_HIGH() ;
udelay(500);/*延时600us*/
IO1_LOW();
udelay(170) ;/*延时200us*/
}else{
IO1_HIGH() ;
udelay(170);/*延时200us*/
IO1_LOW();
udelay(500) ;/*延时600us*/
}
dat = dat >> 1 ;/*发送的时候,先发送最高位,再发送次高位,以此类推*/
}
IO1_HIGH() ;/*空闲时将该脚拉高即可*/
OS_EXIT_CRITICAL();//开中断
/*同时注意,芯片初始化的时候,请将信号脚拉高。*/
}
oneline_send_one_data(0x05);//对应播放第5段声音
-
- 通讯举例F2--循环播放
void oneline_test_CMD_F2(void){
oneline_send_one_data(0x01) ;
udelay(20) ;/*延时25ms*/
oneline_send_one_data(0xF2) ;
udelay(20) ;/*延时25ms*/
} 实现的效果,就是第一段声音,循环播放,不停止。如果需要停止,可以发送FE指令
4.2 通讯举例F3--组合播放
void oneline_test_CMD_F3(void){
oneline_send_one_data(0xF3) ;
udelay(20) ;/*延时25ms*/
oneline_send_one_data(0x01) ;
udelay(20) ;/*延时25ms*/
oneline_send_one_data(0x02) ;
udelay(20) ;/*延时25ms*/
oneline_send_one_data(0x03) ;
udelay(20) ;/*延时25ms*/
} 组合播放第1段、第2段、第3段声音,依次按照顺序播放。如果需要停止,可以发送FE指令
同时,在组合播放的过程中,接收到新的组合播放数据,会停止当前的组合播放,转去播放新的指令
4.3 通讯指令F0描述【超低功耗】
1、专用于芯片进入超低功耗,因为芯片在播放结束之后,会自动进入待机状态,功耗维持在25uA 。
2、如果需要芯片的功耗再低,则需要发送F0指令,任何状态下都可以
3、芯片接收到F0指令之后,就会进入关机状态,功耗维持在1.7uA左右
4、如果需要芯片再次接收指令,必须先将dat信号拉低40ms,让芯片被唤醒,再发送数据就可以了
4.4 通讯细节注意事项
1、控制MCU上电之后,第一时间就要将通讯IO,也就是ONELINE脚设置为高电平输出
2、尽量和KT148A芯片的通讯之间,串1K的电阻,来适配不同的电平
3、芯片的2脚PB9,在播放的时候,电压大概是3.1V左右 。一旦进入空闲状态,此IO会变成2.8V左右
因为芯片内部有一个空闲进入低功耗待机的机制。