|
|
|
|
@ -7,6 +7,7 @@
|
|
|
|
|
|
|
|
|
|
#define wait_ms(ms) chThdSleepMilliseconds(ms)
|
|
|
|
|
|
|
|
|
|
void tlv320aic3204_config_adc_filter(void);
|
|
|
|
|
|
|
|
|
|
void tlv320aic3204_init(void)
|
|
|
|
|
{
|
|
|
|
|
@ -69,6 +70,9 @@ void tlv320aic3204_init(void)
|
|
|
|
|
I2CWrite(AIC3204_ADDR, 0x00, 0x00); /* Select Page 0 */
|
|
|
|
|
I2CWrite(AIC3204_ADDR, 0x51, 0xc0); /* Power up Left and Right ADC Channels */
|
|
|
|
|
I2CWrite(AIC3204_ADDR, 0x52, 0x00); /* Unmute Left and Right ADC Digital Volume Control */
|
|
|
|
|
|
|
|
|
|
tlv320aic3204_config_adc_filter();
|
|
|
|
|
tlv320aic3204_adc_filter_enable(TRUE);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void tlv320aic3204_select_in3(void)
|
|
|
|
|
@ -87,6 +91,167 @@ void tlv320aic3204_select_in1(void)
|
|
|
|
|
I2CWrite(AIC3204_ADDR, 0x00, 0x00); /* Select Page 0 */
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void tlv320aic3204_adc_filter_enable(int enable)
|
|
|
|
|
{
|
|
|
|
|
if (enable)
|
|
|
|
|
I2CWrite(AIC3204_ADDR, 0x3d, 0x02); /* Select ADC PRB_R2 */
|
|
|
|
|
else
|
|
|
|
|
I2CWrite(AIC3204_ADDR, 0x3d, 0x01); /* Select ADC PRB_R1 */
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#if 0
|
|
|
|
|
/* bb, aa = signal.ellip(5, 0.1, 100, (4800.0/24000, 5200.0/24000), 'bandpass') */
|
|
|
|
|
const uint8_t adc_filter_config[] = {
|
|
|
|
|
/* len, page, reg, data.... */
|
|
|
|
|
|
|
|
|
|
/* left channel C7 - C31 */
|
|
|
|
|
92, 8, 36,
|
|
|
|
|
/* Pg8 Reg36-127 */
|
|
|
|
|
0x0b, 0xb3, 0xea, 0x00,
|
|
|
|
|
0xf5, 0xeb, 0x1c, 0x00,
|
|
|
|
|
0x0b, 0xb3, 0xea, 0x00,
|
|
|
|
|
0x63, 0x04, 0xf8, 0x00,
|
|
|
|
|
0x82, 0xf3, 0x20, 0x00,
|
|
|
|
|
0x0b, 0xb3, 0xea, 0x00,
|
|
|
|
|
0xf8, 0xac, 0x58, 0x00,
|
|
|
|
|
0x0b, 0xb3, 0xea, 0x00,
|
|
|
|
|
0x64, 0x26, 0x9e, 0x00,
|
|
|
|
|
0x83, 0x9c, 0x9a, 0x00,
|
|
|
|
|
0x0b, 0xb3, 0xea, 0x00,
|
|
|
|
|
0xf5, 0x92, 0x43, 0x00,
|
|
|
|
|
0x0b, 0xb3, 0xea, 0x00,
|
|
|
|
|
0x65, 0xcc, 0x37, 0x00,
|
|
|
|
|
0x82, 0xd1, 0x6e, 0x00,
|
|
|
|
|
0x0b, 0xb3, 0xea, 0x00,
|
|
|
|
|
0xf7, 0xd5, 0x05, 0x00,
|
|
|
|
|
0x0b, 0xb3, 0xea, 0x00,
|
|
|
|
|
0x67, 0x48, 0x63, 0x00,
|
|
|
|
|
0x81, 0x0a, 0xab, 0x00,
|
|
|
|
|
0x0b, 0xb3, 0xea, 0x00,
|
|
|
|
|
0x00, 0x00, 0x00, 0x00,
|
|
|
|
|
0xf4, 0x4c, 0x16, 0x00,
|
|
|
|
|
8, 9, 8,
|
|
|
|
|
/* Pg9 Reg 8-15 */
|
|
|
|
|
0x62, 0xdd, 0xc7, 0x00,
|
|
|
|
|
0x81, 0x1e, 0xf9, 0x00,
|
|
|
|
|
|
|
|
|
|
/* right channel C39 - C63 */
|
|
|
|
|
84, 9, 44,
|
|
|
|
|
/* Pg9 Reg 44-127 */
|
|
|
|
|
0x0b, 0xb3, 0xea, 0x00,
|
|
|
|
|
0xf5, 0xeb, 0x1c, 0x00,
|
|
|
|
|
0x0b, 0xb3, 0xea, 0x00,
|
|
|
|
|
0x63, 0x04, 0xf8, 0x00,
|
|
|
|
|
0x82, 0xf3, 0x20, 0x00,
|
|
|
|
|
0x0b, 0xb3, 0xea, 0x00,
|
|
|
|
|
0xf8, 0xac, 0x58, 0x00,
|
|
|
|
|
0x0b, 0xb3, 0xea, 0x00,
|
|
|
|
|
0x64, 0x26, 0x9e, 0x00,
|
|
|
|
|
0x83, 0x9c, 0x9a, 0x00,
|
|
|
|
|
0x0b, 0xb3, 0xea, 0x00,
|
|
|
|
|
0xf5, 0x92, 0x43, 0x00,
|
|
|
|
|
0x0b, 0xb3, 0xea, 0x00,
|
|
|
|
|
0x65, 0xcc, 0x37, 0x00,
|
|
|
|
|
0x82, 0xd1, 0x6e, 0x00,
|
|
|
|
|
0x0b, 0xb3, 0xea, 0x00,
|
|
|
|
|
0xf7, 0xd5, 0x05, 0x00,
|
|
|
|
|
0x0b, 0xb3, 0xea, 0x00,
|
|
|
|
|
0x67, 0x48, 0x63, 0x00,
|
|
|
|
|
0x81, 0x0a, 0xab, 0x00,
|
|
|
|
|
0x0b, 0xb3, 0xea, 0x00,
|
|
|
|
|
|
|
|
|
|
16, 10, 8,
|
|
|
|
|
/* Pg10 Reg 8-23 */
|
|
|
|
|
0x00, 0x00, 0x00, 0x00,
|
|
|
|
|
0xf4, 0x4c, 0x16, 0x00,
|
|
|
|
|
0x62, 0xdd, 0xc7, 0x00,
|
|
|
|
|
0x81, 0x1e, 0xf9, 0x00,
|
|
|
|
|
0 /* sentinel */
|
|
|
|
|
};
|
|
|
|
|
#elsif 0
|
|
|
|
|
/* bb, aa = signal.ellip(2, 0.1, 100, (4500.0/24000, 5500.0/24000), 'bandpass') */
|
|
|
|
|
const uint8_t adc_filter_config[] = {
|
|
|
|
|
/* len, page, reg, data.... */
|
|
|
|
|
/* left channel C7 - C31 */
|
|
|
|
|
40, 8, 36,
|
|
|
|
|
/* Pg8 Reg36-127 */
|
|
|
|
|
0x02, 0x65, 0xce, 0x00,
|
|
|
|
|
0x02, 0x65, 0x1b, 0x00,
|
|
|
|
|
0x02, 0x65, 0xce, 0x00,
|
|
|
|
|
0x65, 0x27, 0x96, 0x00,
|
|
|
|
|
0x90, 0x4b, 0xd5, 0x00,
|
|
|
|
|
0x52, 0x46, 0xbb, 0x00,
|
|
|
|
|
0xad, 0xb9, 0x96, 0x00,
|
|
|
|
|
0x52, 0x46, 0xbb, 0x00,
|
|
|
|
|
0x56, 0x5f, 0xd2, 0x00,
|
|
|
|
|
0x94, 0x52, 0x41, 0x00,
|
|
|
|
|
/* right channel C39 - C63 */
|
|
|
|
|
40, 9, 44,
|
|
|
|
|
/* Pg9 Reg 44-127 */
|
|
|
|
|
0x02, 0x65, 0xce, 0x00,
|
|
|
|
|
0x02, 0x65, 0x1b, 0x00,
|
|
|
|
|
0x02, 0x65, 0xce, 0x00,
|
|
|
|
|
0x65, 0x27, 0x96, 0x00,
|
|
|
|
|
0x90, 0x4b, 0xd5, 0x00,
|
|
|
|
|
0x52, 0x46, 0xbb, 0x00,
|
|
|
|
|
0xad, 0xb9, 0x96, 0x00,
|
|
|
|
|
0x52, 0x46, 0xbb, 0x00,
|
|
|
|
|
0x56, 0x5f, 0xd2, 0x00,
|
|
|
|
|
0x94, 0x52, 0x41, 0x00,
|
|
|
|
|
0 /* sentinel */
|
|
|
|
|
};
|
|
|
|
|
#else
|
|
|
|
|
/* bb, aa = signal.bessel(2, (4500.0/24000, 5500.0/24000), 'bandpass') */
|
|
|
|
|
const uint8_t adc_filter_config[] = {
|
|
|
|
|
/* len, page, reg, data.... */
|
|
|
|
|
/* left channel C7 - C31 */
|
|
|
|
|
40, 8, 36,
|
|
|
|
|
/* Pg8 Reg36-127 */
|
|
|
|
|
0x02, 0x9b, 0xed, 0x00,
|
|
|
|
|
0x02, 0x9b, 0xed, 0x00,
|
|
|
|
|
0x02, 0x9b, 0xed, 0x00,
|
|
|
|
|
0x5d, 0x91, 0x0f, 0x00,
|
|
|
|
|
0x8e, 0x4b, 0x9a, 0x00,
|
|
|
|
|
0x18, 0x22, 0x1d, 0x00,
|
|
|
|
|
0xe7, 0xdd, 0xe3, 0x00,
|
|
|
|
|
0x18, 0x22, 0x1d, 0x00,
|
|
|
|
|
0x62, 0xd9, 0x9b, 0x00,
|
|
|
|
|
0x8d, 0x2c, 0xda, 0x00,
|
|
|
|
|
|
|
|
|
|
/* right channel C39 - C63 */
|
|
|
|
|
40, 9, 44,
|
|
|
|
|
/* Pg9 Reg 44-127 */
|
|
|
|
|
0x02, 0x9b, 0xed, 0x00,
|
|
|
|
|
0x02, 0x9b, 0xed, 0x00,
|
|
|
|
|
0x02, 0x9b, 0xed, 0x00,
|
|
|
|
|
0x5d, 0x91, 0x0f, 0x00,
|
|
|
|
|
0x8e, 0x4b, 0x9a, 0x00,
|
|
|
|
|
0x18, 0x22, 0x1d, 0x00,
|
|
|
|
|
0xe7, 0xdd, 0xe3, 0x00,
|
|
|
|
|
0x18, 0x22, 0x1d, 0x00,
|
|
|
|
|
0x62, 0xd9, 0x9b, 0x00,
|
|
|
|
|
0x8d, 0x2c, 0xda, 0x00,
|
|
|
|
|
0 /* sentinel */
|
|
|
|
|
};
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void tlv320aic3204_config_adc_filter(void)
|
|
|
|
|
{
|
|
|
|
|
const uint8_t *p = adc_filter_config;
|
|
|
|
|
|
|
|
|
|
while (*p != 0) {
|
|
|
|
|
uint8_t len = *p++;
|
|
|
|
|
uint8_t page = *p++;
|
|
|
|
|
uint8_t reg = *p++;
|
|
|
|
|
I2CWrite(AIC3204_ADDR, 0x00, page);
|
|
|
|
|
while (len-- > 0)
|
|
|
|
|
I2CWrite(AIC3204_ADDR, reg++, *p++);
|
|
|
|
|
}
|
|
|
|
|
I2CWrite(AIC3204_ADDR, 0x00, 0x00); /* page 0 */
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void tlv320aic3204_set_gain(int lgain, int rgain)
|
|
|
|
|
{
|
|
|
|
|
if (lgain < 0)
|
|
|
|
|
|