Цитата(IgorKossak @ Nov 23 2007, 17:43)

Перед посылкой команды стоп не должно быть ошибок в линии (анализируется опросом состояния).
Команда стоп как таковая срабатывает аналогично команде установки состояния порта и сигнал появляется на линии в следующий (или через один, не помню точно) такт МК. Срабатывает безусловно. Для этого состояния, в отличие от других, и прерывание не предусмотрено.
А как проверить состояние линии?
При разьединении сигнального кабеля TWI как раз в этом месте у меня происходит зависание master контроллера. Определил, что TWSR = 0x58, но почему то команда в момент прерывания
Код
ISR (TWI_vect)
{
switch(TWSR)
{
case 0x58: // Data byte has been received and NACK transmitted
TWCR = (1<<TWEN)| // TWI Interface enabled
(0<<TWIE)|(1<<TWINT)| // Disable TWI Interrupt and clear the flag
(0<<TWEA)|(0<<TWSTA)|(1<<TWSTO)| // Initiate a STOP condition. TWSTO reset
(0<<TWWC);
}
}
не выполняется и опрос TWI порта не просходит, т.к TWIE не обнуляется.
Код
if( !(TWCR & _BV(TWIE)) )
{
//Check if the last opeation was OK
if(twi_statusReg.lastReceiveOK) // Last transmission competed successfully.
twi_get_data_message ( ...);
twi_start_data_transceiver();
}
Что можно предпринять?
Сообщение отредактировал namelos - Nov 23 2007, 19:16