Читаем Встраиваемые системы. Проектирование приложений на микроконтроллерах семейства 68HC12/HCS12 с применением языка С полностью

Управление процессом приема информации. При приеме информации с использованием приемника контроллера 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 ведется методом полинга.

/*-------------------------------------------------------------------*/

/* filename: SCI.c                                                   */

/* МAIN PROGRAМ: Эта программа реализует непрерывную посылку кода    */

/* символа "S"с скоростью 9600 бод в 8-разрядном формате (кадр 10 бит)*/

/* с битом паритета                                                  */

/*-------------------------------------------------------------------*/

/*подключаемые файлы*/

#include <912b32.h>


/*используемые функции*/

void sci_init(void);

void sci_trans(void);


void main(void) {

 sci_init; /*инициализация модуля SCI*/

 while(1) {

  sci_trans; /*передавать данные непрерывно*/

 }

}


/*-------------------------------------------------------*/

/* Функция sci_init производит инициализацию модуля SCI. */

/*-------------------------------------------------------*/

void sci_init(void) {

 unsigned char clear;

 SC0BDL = 0x34; /*установить скорость 9600 бод*/

 SC0BDH = 0x00;

 SC0CR1 = 0х04; /*10-разрядный формат кадра 8 бит данных, с*/

                /*контролем паритета, логика паритета нечетная */

 clear = SC0SR1; /*операция для сброса флага TDRE*/

                 /*флаг сбрасывается в два действия*/

                 /*сначала читать регистр SC0SR1*/

                 /*затем записать в регистр SC0DRL*/

}


/*-------------------------------------------------------------------*/

Перейти на страницу:
Нет соединения с сервером, попробуйте зайти чуть позже