如题,使用IIC驱动0.96寸的OLED显示屏,我在定时器里面每个2S调用一次这个函数,每次调用就会导致看门狗复位,是IIC的通信速率太慢了,还是软件存在有其他问题。
那个大佬能帮忙看下。
//*********************************************************************
//OLED全屏显示
//*********************************************************************
void OLED_Fill(unsigned char bmp_dat)
{
unsigned char y,x;
for(y=0;y<8;y++)
{
// system_soft_wdt_feed(); //此处喂狗,则看门狗不会溢出
OLED_WrCmd(0xb0+y);
OLED_WrCmd(0x01);
// OLED_WrCmd(0x00);
OLED_WrCmd(0x10);
for(x=0;x<128;x++)
i2c_master_writeByte(bmp_dat);
}
}
//*********************************************************************
//*********************************************************************
//OLED写入指令
//*********************************************************************
bool OLED_WrCmd(unsigned char IIC_Command)
{
uint8 ack = 0;
i2c_master_start();
//******************************************************
i2c_master_writeByte(0x78); //Slave address,SA0=0
ack = i2c_master_getAck();
if(ack)
{
os_printf("addr not ack when tx write cmd \n");
i2c_master_stop();
return false;
}
//******************************************************
i2c_master_writeByte(0x00); //write command
ack = i2c_master_getAck();
if(ack)
{
os_printf("addr not ack when tx write cmd \n");
i2c_master_stop();
return false;
}
//******************************************************
i2c_master_writeByte(IIC_Command);
ack = i2c_master_getAck();
if(ack)
{
os_printf("addr not ack when tx write cmd \n");
i2c_master_stop();
return false;
}
//******************************************************
i2c_master_stop();
}
//*********************************************************************
|