ESP8266 Developer Zone The Official ESP8266 Forum 2016-04-19T14:47:16+08:00 https://bbs.espressif.com:443/feed.php?f=7&t=1940 2016-04-19T14:47:16+08:00 2016-04-19T14:47:16+08:00 https://bbs.espressif.com:443/viewtopic.php?t=1940&p=6524#p6524 <![CDATA[Re: rom_i2c_writeReg_Mask会导致系统崩溃???]]>
麻烦发邮件至我们的技术支持邮箱 feedback@espressif.com,以获得更多的技术帮助。

感谢您对 ESP8266 的关注!

Statistics: Posted by ESP_Faye — Tue Apr 19, 2016 2:47 pm


]]>
2016-04-17T15:26:11+08:00 2016-04-17T15:26:11+08:00 https://bbs.espressif.com:443/viewtopic.php?t=1940&p=6493#p6493 <![CDATA[Re: rom_i2c_writeReg_Mask会导致系统崩溃???]]>
Espressif_Faye wrote:
您好,

1.请问,您是否直接在中断函数里调用的 gen_carrier_clk?
2.请使用以下的函数,代替上面的函数试一下,
在 ir_tx_init() 里调用 BF_i2c_writeReg_Mask(0x67, 4, 4 , 7, 7, 1);

Code:

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





你好,将rom_i2c_writeReg_Mask放进初始化函数后问题已经解决,红外发射基于38k载波,提供的示例占空比为1/2,能否提供一个调节频率和占空比的函数,可以供开发者自定义频率和占空比。

Statistics: Posted by zxl965210 — Sun Apr 17, 2016 3:26 pm


]]>
2016-03-30T10:06:06+08:00 2016-03-30T10:06:06+08:00 https://bbs.espressif.com:443/viewtopic.php?t=1940&p=6257#p6257 <![CDATA[Re: rom_i2c_writeReg_Mask会导致系统崩溃???]]>
1.请问,您是否直接在中断函数里调用的 gen_carrier_clk?
2.请使用以下的函数,代替上面的函数试一下,
在 ir_tx_init() 里调用 BF_i2c_writeReg_Mask(0x67, 4, 4 , 7, 7, 1);

Code:

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

Statistics: Posted by ESP_Faye — Wed Mar 30, 2016 10:06 am


]]>
2016-03-25T22:38:09+08:00 2016-03-25T22:38:09+08:00 https://bbs.espressif.com:443/viewtopic.php?t=1940&p=6228#p6228 <![CDATA[Re: rom_i2c_writeReg_Mask会导致系统崩溃???]]> Statistics: Posted by zxl965210 — Fri Mar 25, 2016 10:38 pm


]]>
2016-03-25T18:38:50+08:00 2016-03-25T18:38:50+08:00 https://bbs.espressif.com:443/viewtopic.php?t=1940&p=6226#p6226 <![CDATA[rom_i2c_writeReg_Mask会导致系统崩溃???]]>

Code:

#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
rom_i2c_writeReg_Mask(i2c_bbpll, i2c_bbpll_hostid, i2c_bbpll_en_audio_clock_out, i2c_bbpll_en_audio_clock_out_msb, i2c_bbpll_en_audio_clock_out_lsb, 1);

Statistics: Posted by zxl965210 — Fri Mar 25, 2016 6:38 pm


]]>