Уважаемые знатоки...внимание вопрос.
Почему-то первый раз проходя в отладчике это место, флаг выставляется, но в real-time не выставляется, и после второго раза пошагового исполнения всё равно зависаю на ожидании флага.
Вот код, может у меня глаз замылился уже, подскажите кто видит ошибку.
void i2c_write_byte (unsigned char SlaveAddress, unsigned char Addr, unsigned char Byte)
{
I2CIE |= TXRDYIE;
I2CIFG &= ~ARDYIFG;
I2CIFG &= ~TXRDYIFG;
I2CIFG &= ~RXRDYIFG;
i2c_finish = 0;
I2CSA = SlaveAddress;
I2CNDAT = 0x02;
i2c_tx_n = 1;
U0CTL |= MST;
i2c_buf[0] = Byte;
i2c_buf[1] = Addr;
I2CTCTL |= I2CTRX + I2CSTT;
while ((~I2CIFG) &ARDYIFG); // ВОТ ЗДЕСЬ ФЛАГ НЕ ВЫСТАВЛЯЕТСЯ (иногда реальные данные уходят //и ложаться в микруху
while (i2c_finish == 0);
}
void init_i2c(void)
{
P3SEL |= 0x0a; // Assign I2C pins to module
U0CTL |= I2C + SYNC ; // Switch USART0 to I2C mode
U0CTL &= ~I2CEN; // Recommended I2C init procedure
I2CTCTL = I2CSSEL_1; // ACLK
I2CPSC = 0x00; // I2C prescaler
I2CSCLH = 40; // High period of SCL
I2CSCLL = 40; // Low period of SCL // 7372800 / 22 = 335khz
I2CIE = RXRDYIE + RXRDYIE + NACKIE;
U0CTL |= I2CEN; // Enable I2C, 7 bit addr,
_EINT(); // Enable interrupts
}
Заранее большое спасибо.
shanti_shanti@mail.ru