Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Уч. пос. МПТ (2.04.12).pdf
Скачиваний:
403
Добавлен:
22.03.2015
Размер:
10.95 Mб
Скачать

проверяет неравенство и возвращает значение ; если оно справедливо и число 16 иначе.

Третий параметр функции 0x80 + k представляет собой сумму базового адреса и смещения. Смещением служит счетчик байтов k, которому дается приращение 16.

Функция Delay, рассмотренная в разделе 3.1.5 обеспечит задержку 5 мс, необходимую для завершения записи каждого блока.

3.21 Интерфейс RS-232. Прием и передача простых команд

3.21.1 Задание

Разработать программу, принимающую по интерфейсу RS-232 команду, кодируемую одним байтом. Команда содержит инструкцию для включения одного из трех светодиодов: символ «r» — красного, символ «g» — зеленого, символ «b» — синего. На каждый полученный байт должен быть послан ответ: символ «!», если команда распознана и символ «E», если не распознана (передан любой другой символ).

3.21.2 Алгоритм программы

Схема программы показана на рисунке 3.21.1. В программе потребуется объявить единственную переменную Byte для хранения байта данных, полученного по UART0.

 

 

 

Начало

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

 

 

 

«r»

 

 

 

Настройка портовых

 

 

 

 

 

 

 

 

 

 

 

 

линий на вывод

 

 

7 Зажечь красный

 

 

 

 

 

 

 

 

 

2

 

 

 

светодиод;

 

 

 

Настройка режима

 

 

 

 

 

 

 

передать «!»

 

 

 

линий P0.0 и P0.1

 

 

 

 

 

 

 

 

 

 

 

3 Настройка UART

 

 

«g»

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

8 Зажечь зеленый

 

 

 

 

 

 

 

 

 

 

 

 

 

 

светодиод;

 

Нет

4

 

 

 

передать «!»

 

 

 

Байт принят?

 

 

«b»

 

 

 

 

 

 

 

 

 

 

 

Да

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

5

 

 

9 Зажечь синий

 

 

 

 

 

 

 

 

Принять байт;

 

 

светодиод;

 

 

 

поместить в Byte

 

 

 

 

 

 

 

передать «!»

 

 

 

 

 

 

 

 

 

6

 

 

 

Иначе

 

 

 

 

 

 

 

 

 

 

Байт

 

 

 

 

 

 

 

 

 

10 Передать «E»

 

 

 

 

 

 

 

Рисунок 3.21.1 – Схема программы приема однобайтных команд по интерфейсу RS-232 с ответом

232

1.Перевести в режим вывода (регистр IO0DIR) портовые линии P0.7– P0.9, к которым подключен трехцветный светодиод.

2.Выбрать режим TxD и RxD для портовых линий P0.0, P0.1 (регистр

PINSEL0).

3.Выполнить настройку UART:

а) установить бит DLAB в регистре U0LCR (присвоить U0LCR значение 0x80). 1. Перевести в режим вывода (регистр IO0DIR) портовые линии P0.7–P0.8, к которым подключен трехцветный светодиод.

2.Выбрать режим TxD и RxD для портовых линий P0.0, P0.1 (регистр

PINSEL0).

3.Выполнить настройку UART:

а) установить бит DLAB в регистре U0LCR (присвоить U0LCR значение

0x80).

б) выбрать одну из стандартных скоростей (например, 9600 бит/с) через регистры U0DLM, U0DLL, U0FDR. При этом руководствоваться таблицей 1.19.1. Напомним, что по умолчанию тактовая частота периферийных устройств МГц.

г) сбросить в ноль бит DLAB регистра U0LCR; в том же регистре выбрать восьмибитный режим с одним стоповым битом без контроля четности.

д) включить буферы установкой в единицу бита FIFO EN в регистре

U0FCR.

Блоки 4–10 поместить в вечный цикл.

4. Дождаться наличия данных в буфере приемника путем циклического тестирования бита RDR регистра U0LSR

while ((U0LSR & 0x1)==0) ;

5.Считать байт из регистра U0RBR в переменную Byte.

6.Проанализировать результат через конструкцию switch…case.

switch (Byte)

{

case 'r': ... ; break; case 'g': ... ; break; case 'b': ... ; break; default: ... ;

}

7–10. Каждая ветвь содержит команду записи в порт для включения соответствующего светодиода и команду передачи ответа. Передача выполняется путем записи символьной константы в регистр U0THR, например,

U0THR='!';

Для проверки программы следует воспользоваться утилитой

232Analyzer (см. раздел 2.6.4).

233

3.21.3 Автоматическая настройка скорости

Для проверки работы UART в режиме автоматического определения скорости следует исключить команды выбора скорости. Вместо этого после настройки UART0 включить команду

U0ACR=1;

После запуска программы и установки связи через терминал передать символ «a». Если скорость определена верно, этот символ будет правильно распознан программой, как недопустимая команда, на что она ответит символам «E». Если скорость не определится, скорее всего, получим «мусор». Чтобы повторить попытку необходимо сбросить программу микроконтроллера.

3.22 Интерфейс RS-232.

Передача пакета с использованием прерываний

3.22.1 Задание

Разработать программу, выполняющую передачу по интерфейсу RS-232 массива байтов, расположенного в оперативной памяти микроконтроллера. Запросом на передачу служит символ «t» принимаемый по каналу RS-232 от персонального компьютера.

3.22.2 Основные рекомендации

Для обнаружения готовности канала UART для приема или передачи воспользуемся системой прерываний. Как известно, микроконтроллер LPC2148 воспринимает любое прерывание от UART, как вызванное одним источником. Поэтому процедура обработки прерываний должна содержать ветвления для идентификации прерывающего события. Если прерывающим событием является получение запроса (принят символ «t»), то необходимо инициировать процесс передачи массива. Другим возможным прерывающим событием является опустошение буфера передатчика. В этом случае в него следует направить очередной блок из 16 байт.

3.22.3 Алгоритм программы

Алгоритм основной программы показан на рисунке 3.22.1. В программе потребуются несколько глобальных переменных:

а) массив байтов Data, элементам которого здесь же присваиваются произвольные начальные значения;

char Data[]={0,1,2,3,... };

б) целочисленный счетчик байтов n.

Рекомендуется ввести обозначение N — число элементов в массиве Data. Это можно сделать следящей директивой.

#define N sizeof(Data)

1–2. Первые два блока подробно рассмотрены в предыдущей программе и здесь не комментируются.

3. Настройка прерываний состоит из включения прерываний от приемника и передатчика UART через регистр U0IER. Требуется установить би-

ты THRE и RBR.

234

Процедура обработки прерывания Начало

1

i= 0

2

Считать

идентификатор

 

прерывания в IntID

 

3

IntID

 

 

 

 

Иначе

0x04,

0x02

7

i < 16

 

n < N

 

Нет

11

 

Инициализация

 

системы прерываний

 

Конец

 

0x0C

4

Принят

 

символ «t»

 

Нет

Да

8

i= i + 1

9

Передача Data[n]

10 n = n +1

Основная программа Начало

1 Настройка режимов

P0.0 и P0.1

2

Настройка UART

3

Настройка прерываний

4

Пустая команда

Да

5

Передача Data[0]

6

n = 1

Рисунок 3.22.1 – Схема программы обмена данными через RS-232 с использованием прерываний

Далее требуется настроить систему прерываний через регистры

VICVectAddr0, VICVectCntl0, VICIntEnable (раздел 1.11.5).

4. Основная программа завершается конструкцией пустого вечного

цикла.

Схема процедуры обработки прерываний на том же рисунке 3.22.1

1.Объявить локальную переменную–счетчик i, которая будет изменяться от 0 до 15 и содержать номер байта в блоке из шестнадцати. Счетчику нужно присвоить нулевое начальное значение. Здесь же потребуется локальная переменная IntID для хранения кода, идентифицирующего прерывающее событие.

2.Присвоить переменной IntID содержимое четырех младших битов регистра U0IIR. Воспользоваться наложением маски.

235