Встраиваемые системы. Проектирование приложений на микроконтроллерах семейства 68HC12/HCS12 с применением языка С
Шрифт:
4.18.4. Алгоритмы программного обслуживания контроллера SCI
Три относительно независимых последовательности действий должна выполнить прикладная программы в процессе использования контроллера асинхронного обмена SCI:
• Инициализацию приемника и передатчика контроллера;
• Управление процессом передачи информации;
• Управление процессом приема информации.
Обобщенные блок-схемы алгоритмов управления программно-доступными ресурсами контроллера SCI для каждого из перечисленных действий приведены на рис. 4.69.
Рис. 4.69.
Инициализация контроллера SCI. Инициализацию контроллера SCI рекомендуется проводить в следующем порядке:
• Установить скорость обмена;
• Выбрать формат кадра обмена: 8 или 9 бит данных;
• Назначить параметры приема и передачи в регистрах управления SCxCR1 и SCxCR2;
• Очистить флаг TDRE. Для этого сначала считать регистр состояния SCxSR1, а затем выполнить операцию записи в регистр данных SCxRD.
Следует заметить, что аппаратные средства модуля SCI предполагают, что и прием, и передача информации могут происходить только с одинаковой скоростью, с одинаковым форматом кадра и одинаковой логикой паритета.
Управление процессом передачи информации. Для того чтобы передать один байт информации с использованием передатчика контроллера SCI, следует сначала проверить состояние флага TDRE. Если этот флаг установлен в 1, то регистр данных передатчика пуст, и в него может быть записан новый байт для передачи. Далее данные загружаются в один регистр данных SCxDRL, если обмен происходит в 8-разрядном формате, или в два регистра данных SCxDRH:SCxDRL, если обмен производится в 9-разрядном формате. Коды из регистра данных загружаются в сдвиговый регистр передатчика автоматически, после чего начинается собственно процесс передачи. О завершении передачи информирует бит TC, который установится в 1, когда все разряды регистра сдвига будут последовательно выданы на выход TxD. Флаги TDRE и TC могут генерировать запросы на прерывания, если соответствующие биты разрешения прерывания установлены.
Управление процессом приема информации. При приеме информации с использованием приемника контроллера SCI, следует постоянно контролировать состояние флага RDRF. Этот флаг устанавливается в 1, когда прием очередного байта закончен, и принятые данные доступны в регистре данных приемника. Бит может генерировать запрос на прерывание, при условии, что эти прерывания разрешены. Обнаружив в процессе мониторинга флага RDRF или прервавшись по его запросу, МК должен считать данные из регистров SCxDRH:SCxDRL.
4.18.5. Пример программирования контроллера SCI
Приведенный ниже программный фрагмент SCI.c иллюстрирует технику программного обслуживания асинхронного последовательного интерфейса МК семейства 68HC12.
Отладочная плата MC68HC912B32EVB предоставляет возможность использования только одного контроллера SCI с номером 0. Поэтому в именах регистров специальных функций символ «x» будет заменен нами на символ «0».
Ниже перечислены биты и регистры управления, которые используются в данном примере:
• SC0BDH:SC0BDL — регистры скорости обмена контроллера SCI. Записанное в него двоичное число определяет скорость передачи данных и скорость приема данных, которые для одного контроллера в соответствии с его принципом действия могут быть только равными;
• SC0CR1 — первый регистр управления контроллера SCI. Используется для
выбора формата 8-ми или 9-ти разрядного представления слова в кадре обмена данными (бит M), для выбора режима работы с паритетом или без него (бит PE), для назначения четной или нечетной логики формирования паритета (бит PT);• SC0CR2 — второй регистр управления контроллера SCI. Его биты разрешают работу передатчика (бит TE) и приемника (бит RE);
• SC0DRL — регистр данных контроллера SPI, младший байт. Используется для обмена данными в последовательном коде в 8-разрядном формате;
• SC0SR1 — первый регистр состояния контроллера SCI. Этот регистр содержит флаг готовности буфера передатчика к приему новых данных TDRE и флаг завершения приема очередного слова в буфер приемника RDRF.
В нашем примере задействован только передатчик контроллера SCI. Он будет непрерывно посылать по линии последовательной связи TxD (вывод PORTS0) код символа «S». Прерывания от контролера SCI в данном примере не используются.
Контроль за состоянием флага TDRE ведется методом полинга.