Уважаемые знатоки...внимание вопрос. Почему-то первый раз проходя в отладчике это место, флаг выставляется, но в 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
|