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