A9101 VOX 功能
本篇介紹如何使用A9101 VOX功能,也就是當使用者開始講話時,A9101才會採集音頻ADC 訊號,否則平常不講話時A9101處於Mute的狀態
我們可以根據A9101 0x0A0Ah CODEC STATE寄存器,來觀察當VOX(ADC聲音)出現時且訊號持續>Tup時,VOXSF 會自動拉HIGH,當VOX(ADC聲音)消失持續>Tdown時,VOXSF會自動拉LOW
當VOX High >Tup時會觸發INT3 VOX中斷(VOXIF拉LOW),需由MCU手動Set"1" to Clear VOXIF,且當VOX LOW > Tdown時也會再次進入INT3 VOX中斷函數(VOXIF再次拉LOW),意思就是只要麥克風音量由小變大一段時間,或是由大變小一段時間後,都會進入VOX中端INT3函數
注意這邊的VOXIF為INT3 狀態的反向,也就是當VOXIF拉LOW('0')時,INT3=1(啟動INT3)
A9101 中斷表 ,VOX=Interrupt(9-1)
代碼解說:
開啟VOX INT3 中斷
EIE|=0x02; //VOXISR enable
2. 定義VOXISR為Interrupt 8,當觸發VOXISR時,先將INT3 Flag設為"0",此時的VOXIF則為"1",並判斷VOXSF是否拉高(拉高表示VOX High> Tup),此時解除靜音,並打開A9101 CODEC ADC,反之當VOXSF拉低(拉低表示VOX Low > Tdown),此時打開靜音,並將A9101 CODEC ADC給關閉
void VOXISR(void) interrupt 8 { EIF &= ~0x02; if(XBYTE[CODEC_STATE] & VOXSF) // voice is active { A9101_WriteReg ( CODEC_EFFCTL, 0x00 );//Disable Mute A9101_WriteReg ( CODEC_CODECTL, 0xB3 );//ADC&DAC Enable } else /// voice is off { A9101_WriteReg ( CODEC_EFFCTL, 0x01 );//enable Mute A9101_WriteReg ( CODEC_CODECTL, 0x03 );//Disable ADC } XBYTE[CODEC_STATE] &= ~0x04; }