Задача такова: на шине TWI меги16 висят часы DS1307 и термометр DS1621.
1)Чтение времени из часов идет постоянно - раз в 1секунду,
2)запись-установка времени - по моему желанию.
3)Команда "измерить Т" дается 1 раз в 10 секунд,
4)чтение температуры - 1 раз в 10секунд.
Эти четыре пакета, могут накладываться по времени. Как бы правильно организовать "ОЧЕРЕДЬ" пакетов с какими-нибудь указателями/буферами в области памяти, где лежат передаваемые данные и куда складывать принимаемые. Чтоб контроллер сформировал очередной пакет, поставил в "очередь" и...
а дальше два варианта:
- забыл о пакете, а потом использовал данные из памяти, которые "автоматически" обновились во время приема,
- прочитав какой-нибудь "статус", увидел, что пакет обработан или нет.
работа с шиной TWI должна быть в прерывании по "TWI завершение очередного действия", чтоб не останавливать работу.
Хорошо бы, чтоб алгоритм был расширяем на много устройств, был универсальным.
Для этих четырех пакетов, (их вид фиксирован), я написал, но получилось громоздко и коряво, с кучей проверок флагов, хотя работоспособно.