Библиотеку не использую намеренно. Как раз потому, что работает на прерываниях. Хочется обойтись без них. У кого-нибудь есть идеи откуда берется состояния 0х28 еще до обращения по I2C?
Вот используемые функции:
Код
uint8_t I2C_Handler(uint32_t set, uint32_t clear, uint32_t code) {
LPC_I2C->CONSET = set;
LPC_I2C->CONCLR = clear;
while((LPC_I2C->CONSET & I2CONSET_SI) != I2CONSET_SI);
return (LPC_I2C->STAT == code) ? 1 : 0;
}
void I2C_Write(uint8_t buf, LCDCmdData cd)
{
while(1) {
if(!I2C_Handler(I2CONSET_STA, I2CONCLR_SIC, 0x08)) break;
if (cd) LPC_I2C->DAT = 0x72;
else LPC_I2C->DAT = 0x70;
if(!I2C_Handler(0, I2CONCLR_STAC | I2CONCLR_SIC, 0x18)) break;
LPC_I2C->DAT = buf;
if(!I2C_Handler(0, I2CONCLR_SIC, 0x28)) break;
}
LPC_I2C->CONSET = I2CONSET_STO;
LPC_I2C->CONCLR = I2CONCLR_SIC;
}
Сообщение отредактировал Влад Р. - Apr 21 2012, 21:01