A9101 VOX 功能

SamYang2023-12-30A9101/A8101259
  • 本篇介紹如何使用A9101 VOX功能,也就是當使用者開始講話時,A9101才會採集音頻ADC 訊號,否則平常不講話時A9101處於Mute的狀態


  • A9101 LoopBack - VOX.zip

  • 我們可以根據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) 


image.png

  • A9101 中斷表 ,VOX=Interrupt(9-1)

image.png

代碼解說:

  1.     開啟VOX INT3 中斷

	EIE|=0x02; //VOXISR enable

image.png

2.    定義VOXISR為Interrupt 8,當觸發VOXISR時,先將INT3 Flag設為"0",此時的VOXIF則為"1",並判斷VOXSF是否拉高(拉高表示VOX High> Tup),此時解除靜音,並打開A9101 CODEC ADC,反之當VOXSF拉低(拉低表示VOX Low > Tdown),此時打開靜音,並將A9101 CODEC ADC給關閉

image.png

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;
}













发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。