📄 si47xx_tx_digital_audio.c
字号:
/****************************************
Si47XX TX part - digital audio input mode
*****************************************/
#include "Si47xx_common.h"
/**********************************************************
Si47XX_Power_Up()
Please note: Si47XX_power_up[] = {0x01,0xc2,0x0f};
**********************************************************/
/**********************************************************
Si47XX_Set_Property_INPUT_SAMPLE_RATE()
The input sample rate must be set to 0 before removing the
DCLK input or reducing the DCLK frequency below 2 MHz.
DLCK: 2M~40MHz!
2MHz in Si471x-A20
1MHz in Si471x-B30 and Si472x-B20 and Si4704/05-B20
32000Hz~48000Hz: 32,40,44.1,48KHz
**********************************************************/
T_ERROR_OP Si47XX_Set_Property_INPUT_SAMPLE_RATE(void)
{
unsigned short loop_counter = 0;
unsigned char Si47XX_reg_data[32];
unsigned char error_ind = 0;
unsigned char Si47XX_set_property[] = {0x12,0x00,0x01,0x03,0xac,0x44}; //max:0xac44 = 44.1KHz
//send CMD
error_ind = OperationSi47XX_2w(WRITE, &(Si47XX_set_property[0]), 6);
if(error_ind)
return I2C_ERROR;
//wait CTS = 1
do
{
error_ind = OperationSi47XX_2w(READ, &(Si47XX_reg_data[0]), 1);
if(error_ind)
return I2C_ERROR;
loop_counter++;
}
while(((Si47XX_reg_data[0]) != 0x80) && (loop_counter < 0xff)); //loop_counter limit should guarantee at least 300us
if(loop_counter >= 0xff)
return LOOP_EXP_ERROR;
return OK;
}
/**********************************************************
Si47XX_Set_Property_INPUT_Format()
This routine can be called any time.
default is:
DCLK failing edge
I2S mode
stereo audio mode
16 bits
**********************************************************/
T_ERROR_OP Si47XX_Set_Property_INPUT_Format(void)
{
unsigned short loop_counter = 0;
unsigned char Si47XX_reg_data[32];
unsigned char error_ind = 0;
unsigned char Si47XX_set_property[] = {0x12,0x00,0x01,0x01,0x00,0x00};
//send CMD
error_ind = OperationSi47XX_2w(WRITE, &(Si47XX_set_property[0]), 6);
if(error_ind)
return I2C_ERROR;
//wait CTS = 1
do
{
error_ind = OperationSi47XX_2w(READ, &(Si47XX_reg_data[0]), 1);
if(error_ind)
return I2C_ERROR;
loop_counter++;
}
while(((Si47XX_reg_data[0]) != 0x80) && (loop_counter < 0xff)); //loop_counter limit should guarantee at least 300us
if(loop_counter >= 0xff)
return LOOP_EXP_ERROR;
return OK;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -