工具/软件: Code Composer Studio
大家好、
我正在尝试通过电容式麦克风连接到左声道来从 TLV320AIC3106音频编解码器读取 I2S 数据。
下面给出了我的编解码器设置、它已成功写入编解码器、我可以使用 I2C 读回寄存器。
void tlv320aic3106init (void){ AudioCodecPageSelect ((unsigned char) 0x00); AudioCodecRegWrite ((unsigned char) codec_sw_reset、0x00); //时钟生成和控制 AudioCodecRegWrite ((unsigned char) codec_clock_generation_control、(unsigned char) 0x02); AudioCodecRegWrite ((unsigned char) codec_additional_GPIO_control_B、(unsigned char) 0x01); AudioCodecRegWrite ((unsigned char) codec_gpio1_control、0x28);//在 GPIO1引脚上时钟输出 AudioCodecRegWrite ((unsigned char) codec_sample_rate、0xAA);//0xAA);// fs = fssref/n AudioCodecRegWrite ((unsigned char) codec_mic_bias _control、(unsigned char) 0xC0);// MIC bias //选择输入时,在路由输入并为 ADC 加电后取消 PGA 的静音。 AudioCodecRegWrite ((unsigned char) codec_line2L_left_adc_control、0x80); AudioCodecRegWrite ((unsigned char) codec_line1L_left_adc_control、0x7C);//为左侧 ADC 加电 AudioCodecRegWrite ((unsigned char) codec_left_adc_gpa_gain_control、0x00);//撤消 PGA }的静音
我正在尝试在 CPU 模式而非 DMA 模式下初始化 I2S、并使用 ISR 读取数据。
下面是我的 I2S 初始化。
void AudioCaptureRenderConfigure (unsigned char bitsPerSample、 无符号短比特率、 unsigned char noOfChannels、 unsigned char RxTx、 unsigned charDMA) { // //初始化 McASP // MAP_PRCMPeripheralClkEnable (PRCM_I2S、PRCM_RUN_MODE_CLK); unsigned longbitClk; bitClk = bitsPerSample * bitrate * noOfChannels; DMA=1; if (bitsPerSample = 16) { MAP_PRCMI2SClockFreqSet (512000);//(bitClk*10);//512000);(I2S_base、(bitClk*10)、bitClk、I2S_SLOT_SIZE_16| MAP_I2SConfigSetExpClk (I2S_base、512000、bitClk、I2S_SLOT_SIZE_16| I2S_PORT_CPU);//(I2S_base、512000、bitClk、I2S_SLOT_SIZE_16| } MAP_I2SIntRegister (I2S_base、I2SIntHandler); MAP_I2SIntEnable (I2S_BASE、I2S_INT_XDATA); IF (RxTx = I2S_MODE_RX_TX) { MAP_I2SSerializerConfig (I2S_base、I2S_DATA_LINE_1、I2S_SER_MODE_RX、 I2S_INACT_LOW_LEVEL); } IF (RxTx 和 I2S_MODE_TX) { MAP_I2SSerializerConfig (I2S_base、I2S_DATA_LINE_0、I2S_SER_MODE_TX、 I2S_INACT_LOW_LEVEL); } }
I2Shandler 就像下面所示。
void I2SIntHandler (void) { unsigned long ulStatus; unsigned long ulDummy; //获取中断状态 ulStatus = I2SIntStatus (I2S_base); //检查是否存在发送中断;如果存在、则将下一个数据写入 TX 缓冲区并确认 //中断 if (ulStatus & I2S_STS_XDATA) { I2DataPutNonBlocking (I2S_base、I2S_DATA_LINE_0、0xA5); I2SIntClear (I2S_base、I2S_STS_XDATA); I2SIntEnable (I2S_base、I2S_INT_XDATA); } //检查是否存在接收中断;如果存在、从 Rx 缓冲区读取数据并确认 //中断 if (ulStatus & I2S_STS_RDATA) { I2DataGetNonBlocking (I2S_base、I2S_DATA_LINE_1、ulDummmy); I2SIntClear (I2S_base、I2S_STS_RDATA); I2SIntEnable (I2S_base、I2S_INT_XDATA); }
它不会进入处理程序。 我放置一个断点并尝试进行调试、但控件没有进入处理程序。
我的设置是否正确?
谢谢、此致、
Vishnu Pradeep

