Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: ATTINY2313A регистр USIBR – USI Buffer Register
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > MCS51, AVR, PIC, STM8, 8bit
sigmaN
В даташите написано, что
Цитата
The content of the USI Data Register is loaded to the USI Buffer Register when the transfer has
been completed.
мне не очень понятно как определить что transfer has been completed?
Я вот реализую i2c сниффер и для того чтобы поймать ACK я модифицирую счетчик чтобы словить прерывание по переполнению через два тика счётчика. Это уже считается что transfer has been completed? Просто тут не очень пока стабильно ACK ловится...Но может быть дело конечно и не в этом, щас я разбираюсь. Но вопрос всё равно остаётся.
sigmaN
В общем действительно подтверждается, что все дело в этом буфере...
Меняю USIDR на USIBR и начинается какая-то ерунда.... А раз ерунда начинается при изменении в одном месте, то вывод очевиден )

На всякий случай код для конкретики.
Код
#define USIBR _SFR_IO8(0x000)

USICR = (1 << USISIE) | (1 << USIOIE) | (1 << USIWM1 ) | (1 << USIWM0) | (1 << USICS1);

ISR(USI_START_vect)
{        
    USISR &=~(15);
    USISR |=(15);
    i2c_state = I2C_START_WAITING;    
    buf_add_byte(start);        
    USISR |= (1 << USISIF);
}

ISR(USI_OVERFLOW_vect)
{    
    USISR &=~(15);    
    if( i2c_state & 0x03 )
    {        
        USISR |= (14);
        //buf_add_byte(USIBR);
        buf_add_byte(USIDR);
        i2c_state = I2C_ACK_RECEIVING;                
    }    
    else if( i2c_state == I2C_ACK_RECEIVING )
    {
        //if( USIBR & 0x1 )
        if( USIDR & 0x1 )
            buf_add_byte(nack);
        else
            buf_add_byte(ack);
        i2c_state = I2C_DATA_RECEIVING;
    }
    else if( i2c_state ==  I2C_START_WAITING )
    {
        i2c_state = I2C_ADDR_RECEIVING;
    }
    USISR |= (1 << USIOIF);
}
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.