📄 audiotest.c
字号:
/****************************************************************************
* 文 件 名:AudioTest.c
* 功 能:使用硬件I2C对LM4930进行操作,利用中断方式操作。
****************************************************************************/
#include "config.h"
#include "Functions.h"
/****************************************************************************
* 名 称:AudioTest()
* 功 能:向LM4930的三个寄存器写入配置字,从而使LM4930工作在正常模式和状态
* 说 明:在STARTUP.S文件中使能IRQ中断(清零CPSR中的I位);
* 在CONFIG.H文件中包含I2CINT.H。
****************************************************************************/
void AudioTest(void)
{
// uint8 i;
uint16 temp1;
uint8 temp2;
uint8 STOP_FLAG;
uint32 AddrShift = 0;
uint8 Key_Value1=0;
uint8 Key_Value2=0;
/*encode mode is A-law,and default configure*/
uint8 aBASICCONFIG_DATA[] = {0x00,0x40};//BASICCONFIG寄存器默认配置字,可以改变
/*encode mode is u-law,and default configure*/
uint8 uBASICCONFIG_DATA[] = {0x00,0xC0};//BASICCONFIG寄存器默认配置字,可以改变
uint8 VOICE_TESTCONFIG_DATA[] = {0x02,0x81};//VOICE/TESTCONFIG寄存器默认配置字。可以改变
uint8 GAINCONFIG_DATA[] = {0x00,0x17};//GAINCONFIG寄存器默认配置字,可以改变
// PINSEL0 = 0x00000000;
// PINSEL1 = 0x00000000;
I2C_Init(100000); // I2C初始化
SPI_Init(); //SPI初始化
/****************************************************************************
**设置BASICCONFIG寄存器,选择不同的编码方式和工作模式
****************************************************************************/
/*串口显示可以设置的编码方式,0代表A-law,1代表u-law,可以通过键盘选择*/
UART0_SendStr("\nPlease chose encode mode,and default is A-law");
UART0_SendStr("\n0 : A-law");
UART0_SendStr("\n1 : u-law");
Key_Value1 = UART0_RcvByte();//获得键值
/*显示可以选择的选项,通过键盘输入相应的值*/
UART0_SendStr("\nPlease chose voice mode,and default is Mono Speaker Mode");
UART0_SendStr("\n You can chose as fellow:");
UART0_SendStr("\n 0 : Powerdown mode");
UART0_SendStr("\n 1 : Standby mode");
UART0_SendStr("\n 2 : Mono Speaker mode");
UART0_SendStr("\n 3 : Headphone call mode");
UART0_SendStr("\n 4 : Conference call mode");
UART0_SendStr("\n 5 : L+R mixed to mono speaker mode");
Key_Value2 = UART0_RcvByte();//获得键值
if(Key_Value1)//选择的是u-law
{
uBASICCONFIG_DATA[1] |= Key_Value2;
ISendByte(BASICCONFIG,uBASICCONFIG_DATA); // 配置BASICCONFIG寄存器
}
else //选择的是a-law
{
aBASICCONFIG_DATA[1] |= Key_Value2;
ISendByte(BASICCONFIG,aBASICCONFIG_DATA); // 配置BASICCONFIG寄存器
}
/*清零键值变量*/
Key_Value1 = 0;
Key_Value2 = 0;
/********************************************************************************
** 配置VOICE/TESTCONFIG,选择不同的侧音
********************************************************************************/
/* 显示可设置的侧音选项*/
UART0_SendStr("\nPlease set sidestone,and default is muted.");
UART0_SendStr("\nYou can chose one from 12 with interval -3dB from -30dB to 0dB");
UART0_SendStr("\n0 : Mute");
UART0_SendStr("\n1 : -30dB");
UART0_SendStr("\n2 : -27dB");
UART0_SendStr("\n......");
UART0_SendStr("\n11 : 0dB");
Key_Value1 = UART0_RcvByte();//获得键值
VOICE_TESTCONFIG_DATA[1] |= Key_Value1 <<1;
ISendByte(VOICE_TESTCONFIG,VOICE_TESTCONFIG_DATA);//配置VOICE/TESTCONFIG寄存器
/*********************************************************************************
** 配置GAINCONFIG,选择不同的loudspeaker gain或者micphone gain
**********************************************************************************/
/*清零键值变量*/
Key_Value1 = 0;
Key_Value2 = 0;
/*显示loudspeaker是选择高16种增益还是低16种增益*/
UART0_SendStr("\nPlease set the loudspeaker gain,and default is 0dB");
UART0_SendStr("\nYou can chose one from lower 16 with interval 1.5dB");
UART0_SendStr("\nYou can chose one from higher 16 with interval 1.5dB,too");
UART0_SendStr("\n0 : lower 16");
UART0_SendStr("\n1 : higher 16");
/*得到键值并显示*/
Key_Value1 = UART0_RcvByte();
if(!Key_Value1)
{
GAINCONFIG_DATA[1] &= 0xEF;
/*显示低16种增益可以选择的项*/
UART0_SendStr("\nPlease chose one from 16 with interval 1.5dB");
UART0_SendStr("\n0 : -34.5dB");
UART0_SendStr("\n1 : -33dB");
UART0_SendStr("\n......");
UART0_SendStr("\n15 : -12dB");
/*显示输入的键值*/
Key_Value1 = UART0_RcvByte();
/*配置GAINCONFIG*/
GAINCONFIG_DATA[1] |= Key_Value1;
/*显示micphone的16种增益*/
UART0_SendStr("\nPlease set the micphone gain,And Default is 17dB");
UART0_SendStr("\nyou can chose one from 16 with interval 2dB");
UART0_SendStr("\n0 : 17dB");
UART0_SendStr("\n1 : 19dB");
UART0_SendStr("\n......");
UART0_SendStr("\n15 : 47dB");
/*获得键值并显示*/
Key_Value2 = UART0_RcvByte();
/*配置增益寄存器*/
GAINCONFIG_DATA[0] |= Key_Value2<<2;
ISendByte(GAINCONFIG,GAINCONFIG_DATA);
}
else
{
/*显示高16种增益可以选择的项*/
UART0_SendStr("\nPlease chose one from 16 with interval 1.5dB");
UART0_SendStr("\n0 : -10.5dB");
UART0_SendStr("\n1 : -9dB");
UART0_SendStr("\n......");
UART0_SendStr("\n15 : 12dB");
/*显示输入的键值*/
Key_Value1 = UART0_RcvByte();
/*配置GAINCONFIG*/
GAINCONFIG_DATA[1] |= Key_Value1;
/*显示micphone的16种增益*/
UART0_SendStr("\nPlease set the micphone gain,and default is 17dB");
UART0_SendStr("\nyou can chose one from 16 with interval 2dB");
UART0_SendStr("\n0 : 17dB");
UART0_SendStr("\n1 : 19dB");
UART0_SendStr("\n......");
UART0_SendStr("\n15 : 47dB");
/*获得键值并显示*/
Key_Value2 = UART0_RcvByte();
/*配置增益寄存器*/
GAINCONFIG_DATA[0] |= Key_Value2<<2;
ISendByte(GAINCONFIG,GAINCONFIG_DATA);
}
/*LM4930配置完成,可以正常工作了*/
UART0_SendStr("\nThe LM4930 has been configured completely,now you can speak.");
/*把从SPI0口接收到的数据存入SRAM中*/
do{
STOP_FLAG = SRAMWordWrite(AddrShift++,RcvData());
}while (!STOP_FLAG);
/*把存入SRAM中的语音数据再送到LM4930中输出*/
AddrShift = 0;
while(AddrShift < 0x1FFFFF)
{
temp1 = SRAMWordRead(AddrShift++);
temp2 = (temp1 & 0xFF00);
temp2 = temp2>>8;
SendData(temp2);
SendData(0);
temp2 = (temp1 & 0x00FF);
SendData(0);
}
/*测试完成*/
UART0_SendStr("\nHave you heard the word you said?");
UART0_SendStr("\nif heard,test successfully;otherwise,test unsuccessfully");
// while(1);
// return(0);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -