реклама на сайте
подробности

 
 
> MSP430 I2C & RTC зависаю на while ((~I2CIFG) &ARDYIFG);, Не выставляется флаг ...иногда
Bom_Shankar
сообщение Mar 12 2007, 17:00
Сообщение #1


Участник
*

Группа: Новичок
Сообщений: 20
Регистрация: 15-12-06
Пользователь №: 23 554



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



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 10:06
Рейтинг@Mail.ru


Страница сгенерированна за 0.01442 секунд с 7
ELECTRONIX ©2004-2016