如何將A9101 A-raw壓縮改成PCM mode
A9101 CodeC壓縮分成A-raw 8K 8bit & PCM Mode
A-raw壓縮取CodeC的Low 8bit
PCM mode則取High 8bit
首先需要將ADC/DAC 部分的"CODEC_SRSEL"=[0x0A09]寄存器設成'0x00',此用意是將Sample Rate設定成'8K'採樣率,關閉Alaw Ulaw壓縮
2. ADC部分: 讀取CodeC High 8bit轉存到tmp,注意需要將Low 8 bit也一併讀取出來,但不需要轉存在tmp,tmp只需要保存High 8bit 即可
#ifdef PCM_Mode tmp = A9101_ReadReg ( CODEC_ADCRB ); A9101_ReadReg ( CODEC_ADCRB );
3. DAC部分: 先將CODECBUF裡的音頻資料讀取出來,轉存到tmp裡(說明:A9101的CodeC Buffer為2x96 Byte的 2維陣列定義),因此當RXBufIndex > 96時,RxIndex會執行反向'~'的動作,目的是讓RxIndex由"0"變"1",再由"1"變回"0",如此來達到2維
陣列的˙效果,再將tmp裡的資料,設定成PCM mode做DAC輸出,注意:A9101 音頻資料雖然是2維96 Byte的資料,但是在RF上它是1包1包96 Byte來做發送的,並不是一次發送2x96 Byte的資料出去
#ifdef PCM_Mode //SPI SPI_Write(CODECBUF[RxIndex][RXBufIndex++] ); tmp = SPDR; //SPI Read A9101_WriteReg ( CODEC_DACWB, tmp); _nop_(); A9101_WriteReg ( CODEC_DACWB, 0x00 );