在学习F28335时,发现关于AIC23芯片的资料比较少,且有些资料和例程还存在错误,所以将自己学习AIC23芯片的经验和例程分享出来,如果有错误还请大佬能够指点,一起学习交流。
程序实现的功能比较简单,对着麦克风说话时耳机会听到自己的声音并且会保存录音,如果按下按键时循环播放录音,供初学者参考。
AIC23芯片
引脚
主要用到的引脚就是图中标出的,配置接口用来完成初始化,本文使用GPIO模拟SPI传输配置数据,在SPI模式下CS端负责锁存数据;在IIC模式下CS端为可编程地址位,MODE用来选择模式,MODE=0时为IIC,MODE=1时为SPI。音频数据接口从上到下为数据接收发送的时钟、数据接收、数据发送、接收帧同步、发送帧同步,本文配置AIC23为主模式,时钟以及同步信号均由AIC23产生。
寄存器
按照手册的寄存器顺序,前两个左右声道线入控制本程序用不到,所以不做说明。
LRS左右声道音量同步更新,LZC左声道过零检测,LHV音量控制。
我的设置为关闭同步更新,打开过零检测。
同上
STA是侧音的衰减,STE是侧音是否打开,DAC为是否使用DAC,BYP是旁路模式,INSEL选择ADC的输入。MICM是麦克风静音。MICB为麦克风增强。如果打开侧音可能会覆盖你DSP发送给AIC23的音频,所以我设置为关闭。
该寄存器设置为关闭侧音,选择DAC,禁用旁路模式,ADC输入为麦克风,打开麦克风增强。
DACM为DAC静音控制,如果使能,会停止DAC,输出就没有声音了。DEEMP为去加重控制寄存器。ADCHP为ADC高通滤波器。
该寄存器设置为禁用DAC静音,44.1kHz的去加重。禁用ADC高通滤波器。
电源控制寄存器,全部打开即可。
MS设置AIC23工作在主或从模式,LRSWAP为DAC左右声道交换,LRP设置数据在什么时间有效,IWL设置输入的长度。FOR设置数据格式。
该寄存器设置为:AIC23工作在主模式,禁用DAC左右交换,数据在帧同步信号到来后第一个BCLK上升沿就有效,设置输入数据长度为16位,数据格式为DSP格式,一帧包括两个数据字,一个数据字包括16位。数据长度我自己理解为ADC的转换精度了,不知道对不对。
采样率设置根据数据手册设置。
激活接口就可以开始传输数据了。
在程序一开始要对寄存器初始化。
程序
SPI
初始化SPI
void Init_SPI()
{
EALLOW;
SysCtrlRegs.PCLKCR3.bit.GPIOINENCLK=1;
GpioCtrlRegs.GPAMUX1.bit.GPIO12 = 0;//SDA
GpioCtrlRegs.GPADIR.bit.GPIO12 = 1;
GpioCtrlRegs.GPAPUD.bit.GPIO12 = 0;
GpioCtrlRegs.GPAMUX1.bit.GPIO13 = 0;
GpioCtrlRegs.GPADIR.bit.GPIO13 = 1;
GpioCtrlRegs.GPAPUD.bit.GPIO13 = 0;
GpioCtrlRegs