Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: I2C ATTiny214
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
alexf
Искал я чип для очень простой задачи и обнаружил новые ATTiny серий 0 и 1. Вроде ATTiny214 как раз мне подойдет. Там есть аппаратная поддержка I2C, но в даташите больше не публикуют примеров использования. А драйвер I2C на сайте весьма громозкий - поддерживает multiple masters, lost arbitration и т.д. что мне ни к чему. Один мастер, один слейв.

Кто нибуть видел примеры очень простого драйвера I2C для этих чипов?
alexf
Попробовал совсем простой код.
CODE
// write addr to start write op
TWI0.MADDR = slave_adr << 1;
while((TWI0_MSTATUS & TWI_WIF_bm) == 0); // wait to write done
TWI0.MDATA = 0; // addr 0
while((TWI0_MSTATUS & TWI_WIF_bm) == 0); // wait to write done
TWI0.MCTRLB |= TWI_ACKACT_NACK_gc; //?
TWI0.MADDR = slave_adr << 1 | 1; // addr to read
while((TWI0_MSTATUS & TWI_RIF_bm) == 0); // wait for read done
data = TWI0.MDATA;
TWI0.MCTRLB |= TWI_ACKACT_NACK_gc;
TWI0.MCTRLB |= TWI_MCMD_STOP_gc;


// end
TWI0.MSTATUS |= (TWI_RIF_bm | TWI_WIF_bm);
TWI0.MCTRLA &= ~(TWI_RIEN_bm | TWI_WIEN_bm);




Даже работает. Понятно что бесконечных циклов делать не следует, но вроде флаги WIF и RIF всегда устанавливаются. При одном клиенте на линии вроде бы ошибок ждать не приходится. А если совсем зависнет, Watchdog все равно перезапустит. Господа гуру: какие подводные камни ожидать?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.