Не могу понять почему не идёт обмен с дисплеем. Возможно all поможет. Мой код:
Работа с TWI:
Код
#include <ioavr.h>
#include <intrinsics.h>
#pragma vector = TWIC_TWIM_vect // Прерывание по приёму.
__interrupt void TWIC_TWIM_foo(void)
{
TWIC.MASTER.STATUS = TWI_MASTER_WIF_bm;
}
void TWI_MasterInit(TWI_t *twi, unsigned char baudRateRegisterSetting)
{
twi->MASTER.CTRLA = TWI_MASTER_INTLVL_LO_gc | TWI_MASTER_WIEN_bm | TWI_MASTER_ENABLE_bm; // Низкий уровень пркрываний | Разрешено прерывание по передаче | Разрешение работы
twi->MASTER.BAUD = baudRateRegisterSetting; // Скорость передачи
twi->MASTER.STATUS = TWI_MASTER_BUSSTATE_IDLE_gc; // Шинf в IDLE
}
void TWI_Send_Start(TWI_t *twi, unsigned char Address)
{
while ((twi->MASTER.STATUS & TWI_MASTER_BUSSTATE_IDLE_gc) == 0); // Ждём освобождения шигы
twi->MASTER.ADDR = Address; // Передать СТАРТ и АДРЕС
}
void TWI_Send_Stop(TWI_t *twi)
{
twi->MASTER.CTRLC = TWI_MASTER_CMD_STOP_gc; // Передать СТОП
}
void TWI_Write(TWI_t *twi, unsigned char data)
{
if (twi->MASTER.STATUS & TWI_MASTER_WIF_bm) // Проверка флага прерывание по приёму
twi->MASTER.STATUS = TWI_MASTER_WIF_bm; // если надо очистка
twi->MASTER.DATA = data; // Запись данных
}
Использование:
Код
TWI_MasterInit(&TWIC, 5); // Инициализация
TWI_Send_Start(&TWIC, TIC13364_ADDR);
TWI_Write(&TWIC, 0x40);
/* Запись настроек и .... */
TWI_Send_Stop(&TWIC);
Изменение скорости никак не влияет.
При этом железо точно в порядке, так как с программным I2C дисплей работает.
Заранее огромное спасибо.