Составители:
236
Последовательный канал
W riteU A R T
Обработчик преры вания
Буфер чтения Буфер записи
ReadUART
API -
функции
Рис. 133. Компоненты драйвера последовательного канала, организующего обмен данными по
прерыванию
Функция чтения байта ReadUART() проверяет состояние буфера RFIFO, и
если он не пуст, считывает из него байт. Функция WriteUART() записывает байт
в буфер записи последовательного канала WFIFO. Если до записи буфер был
пуст, необходимо аппаратно вызвать обработчик прерывания, чтобы
инициировать передачу данных. В случае, когда к моменту записи в буфере уже
находятся какие-либо данные
, обработчик вызывать не надо, так как запись
была инициирована раньше и в данный момент последовательный канал занят
передачей данных, записанных в буфер ранее.
Принятые при помощи драйвера UART данные требуют обработки в
соответствии с вариантом задания: смена нижнего регистра на верхний,
фильтрация только по числовым или буквенным значениям, по количеству
вводимых
значений и др. Таким образом, требуется написать функцию
(разборщик/преобразователь), которая будет отфильтровывать значения,
неудовлетворяющие заданному алфавиту корректных символов. Далее над
отфильтрованными данными производится указанная в варианте задания
операция: арифметическое действие или конвертирование. Обработка ошибок в
разборщике/преобразователе и прикладном алгоритме тоже должна быть
предусмотрена.
Кроме того, для выполнения задания
требуется использовать драйвер DIP-
переключателей и светодиодных индикаторов.
Б.3.5 Организация обработчика прерывания UART
Окончание передачи байта и окончание приема байта по
последовательному каналу вызывают одно и тоже прерывание и в обработчике
два этих прерывания различаются программно. Обработчик логически разделен
на две части: одна работает при установленном флаге RI (окончание приема), а
другая при
установленном флаге TI (окончание передачи). Ниже приведен
шаблон обработчика прерывания последовательного канала:
//////////////////////// SIO_ISR //////////////////////////////
// Обработчик прерывания UART.
// Вход: нет.
// Выход: нет.
// Результат: нет.
//////////////////////////////////////////////////////////////
void SIO_ISR( void ) __interrupt ( 4 )
Страницы
- « первая
- ‹ предыдущая
- …
- 235
- 236
- 237
- 238
- 239
- …
- следующая ›
- последняя »
