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

 
 
 
Reply to this topicStart new topic
> I2C ATTiny214, новые ATTiny
alexf
сообщение Aug 23 2018, 23:53
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 420
Регистрация: 22-12-04
Пользователь №: 1 608



Искал я чип для очень простой задачи и обнаружил новые ATTiny серий 0 и 1. Вроде ATTiny214 как раз мне подойдет. Там есть аппаратная поддержка I2C, но в даташите больше не публикуют примеров использования. А драйвер I2C на сайте весьма громозкий - поддерживает multiple masters, lost arbitration и т.д. что мне ни к чему. Один мастер, один слейв.

Кто нибуть видел примеры очень простого драйвера I2C для этих чипов?
Go to the top of the page
 
+Quote Post
alexf
сообщение Aug 24 2018, 04:24
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 420
Регистрация: 22-12-04
Пользователь №: 1 608



Попробовал совсем простой код.
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 все равно перезапустит. Господа гуру: какие подводные камни ожидать?
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 18th April 2024 - 08:58
Рейтинг@Mail.ru


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