您好,
1.请问,您是否直接在中断函数里调用的 gen_carrier_clk?
2.请使用以下的函数,代替上面的函数试一下,
在 ir_tx_init() 里调用 BF_i2c_writeReg_Mask(0x67, 4, 4 , 7, 7, 1);
Code: Select all
#define I2C_BASE 0x60000D00
#define I2S_BCK_DIV_NUM 0x0000003F
#define I2S_BCK_DIV_NUM_S 22
#define I2S_CLKM_DIV_NUM 0x0000003F
#define I2S_CLKM_DIV_NUM_S 16
#define I2S_BITS_MOD 0x0000000F
#define I2S_BITS_MOD_S 12
#define I2SCONF (DR_REG_I2S_BASE + 0x0008)
#define DR_REG_I2S_BASE (0x60000e00)
#define U32 uint32
#define i2c_bbpll 0x67
#define i2c_bbpll_en_audio_clock_out 4
#define i2c_bbpll_en_audio_clock_out_msb 7
#define i2c_bbpll_en_audio_clock_out_lsb 7
#define i2c_bbpll_hostid 4
void ir_tx_carrier_clr()
{
//PIN_FUNC_SELECT(IR_GPIO_OUT_MUX, IR_GPIO_OUT_FUNC);
//GPIO_OUTPUT_SET(IR_GPIO_OUT_NUM, 1);
WRITE_PERI_REG(0x60000e08, READ_PERI_REG(0x60000e08) & 0xfffffdff | (0x0<<8) ) ; //i2s clk stop
}
u8 BF_i2c_readReg(u8 block,u8 host_id,u8 reg_add)
{
u32 mst_ctrl_addr = (0x60000d00 + host_id*4);
WRITE_PERI_REG(mst_ctrl_addr, (0<<24)|(0<<16)|(reg_add<<8)|block ) ;//
while(GET_PERI_REG_BITS(mst_ctrl_addr,25,25)!=0){};
return(READ_PERI_REG(mst_ctrl_addr)>>16)&0xff;
return ;
}
u8 BF_i2c_writeReg(u8 block,u8 host_id,u8 reg_add, u8 pData)
{
u32 mst_ctrl_addr = (0x60000d00 + host_id*4);
WRITE_PERI_REG(mst_ctrl_addr, (1<<24)|(pData<<16)|(reg_add<<8)|block ) ;//
while(GET_PERI_REG_BITS(mst_ctrl_addr,25,25)!=0){};
return ;
}
void BF_i2c_writeReg_Mask(u8 block,u8 host_id,u8 reg_add, u8 Msb, u8 Lsb,u8 indata)
{
BF_i2c_writeReg
(
block, host_id,reg_add,
BF_i2c_readReg(block, host_id, reg_add)&
(~(((1<<(Msb-Lsb+1))-1)<<Lsb)) |
(indata<<Lsb)
);
void gen_carrier_clk()
{
WRITE_PERI_REG(I2SCONF, READ_PERI_REG(I2SCONF) & 0xf0000fff|
( (( 62&I2S_BCK_DIV_NUM )<<I2S_BCK_DIV_NUM_S)|
((2&I2S_CLKM_DIV_NUM)<<I2S_CLKM_DIV_NUM_S)|
((1&I2S_BITS_MOD ) << I2S_BITS_MOD_S ) ) );
WRITE_PERI_REG(IR_NEC_TX_IO_MUX, (READ_PERI_REG(IR_NEC_TX_IO_MUX)&0xfffffe0f)| (0x1<<4) );
WRITE_PERI_REG(0x60000e08, READ_PERI_REG(0x60000e08) & 0xfffffdff | (0x2<<8) ) ;//i2s rx start
}