Сообщение от atsys
|
Это мне не приходилов голову. Очень интересно. Может Вы можете поделиться примерами реализации такого конвертора I2C-›Serial ?
|
Дело в том ТАКОЙ конвертер я Не ПИСАЛ.. я писл другое.. просто там было реализовано 2 USART SOFT и два USART HARD. I2C не было.. была Шина MDB.
но Могу поделится алгоритмом... а уж закодировать...
АЛГОРИТМ: Я бы сделал задачу в 3 потока.
1-й поток (в прерывании таймера 26 микросек, приоритет высший) обрабатывает 2шт USART SOFT,
а) приём побитно 1-го байта (4-ре прохода на один бит, 4*26=102микросек=1 бит), с установкой флага когда байт принят, и байт записывать в 8bit буфер. USART1 SOFT
б) передача одного байта из 8bit буфера (если есть флаг наличия в байта для передачи) с установкой флага когда байт передан, готов к следующему. USART1 SOFT
в) приём битов и формирование байта (4-ре прохода на один бит), с установкой флага когда байт принят, и байт записывать в 8bit буфер. USART2 SOFT
г) передача одного байта из 8bit буфера (если есть флаг наличия в байта для передачи) с установкой флага когда байт передан, готов к следующему.
USART2 SOFT
2-й поток в прерывании 1000 микросек(=время приёма одного байта на скорости 9600.)возможно прерывание первым потоком.
обрабатывает USART0 HARD, проверяет наличие принятого байта, ложит байт в буфер приёма, проверяет наличие в буфере передачи байтов и переписывает их из буфера передачи в USART0 HARD для передачи.
То же самое ещё для двух USART1 SOFT и USART2 SOFT.
3-й поток в основной задаче, пишеш приём-передачу I2C шины и разруливаеш что и куда передавать. Пишеш из USART БУФЕРОВ В ШИНУ I2C и наоборот.. из ШИНЫ в буферы передачи 3-х USART.
Нужно предусмотреть торможение i2c шины, если буферы USART не успевают разгружатся.. т.е. если i2c слишком быстро передаёт/принимает данные.