Эмулируемое устройство назовем UART. Программа (async.asm)
поддержки UART приведена на рис. 1.17.
//---------- Содержимое файла async.asm
#include <Reg2181.inc>;
// Частота кварцевого резонатора в КГц
#define CRYSTAL_FREQ_IN_kHZ 16667
{
Для поддержки интерфейса RS-232 ADSP-2181 в составе EZ-KIT Lite
использует ресурсы FLAG_IN, FLAG_OUT и TIMER следующим
образом:
ADSP-2181 FLAG_OUT ----------> AD233 ----------> RS-232 TX
ADSP-2181 FLAG_IN <----------- AD233 <---------- RS-232 RX
(TIMER определяет скорость обмена)
Или (в зависимости от определения HOST):
ADSP-2181 PF[2] ----------> AD233 ----------> RS-232 TX
ADSP-2181 PF[1] <---------- AD233 <---------- RS-232 RX
Формат посылки (число информационных бит, число стоп бит,
наличие/отсутствие контроля по четности) и скорость обмена задаются
программно. Преобразование логических уровней сигналов RxD и TxD в
уровни интерфейса RS-232 производится микросхемой AD233.
Подпрограммы инициализации передатчика и приемника
функционируют независимо друг от друга. Передача и прием данных
синхронизируются сигналами таймера. Это не мешает производить
одновременный асинхронный (по отношению друг к другу)
прием/передачу. По умолчанию приемник заблокирован (выключен),
поэтому перед его использованием необходимо вызвать подпрограмму
"turn_rx_on".
Используемые подпрограммы:
init_uart Должна быть вызвана после сброса системы.
get_char_ax1 Ожидание приема байта с линии RX и возврат
его через ax1.
out_char_ax1 Ожидание текущей выдачи байта через линию
TX и выдача следующего байта из ax1.
turn_rx_on Разрешение работы приемника.
turn_rx_off Запрет работы приемника.
Используемый флаг: DM(flag_rx_ready)
Если flag_rx_ready содержит все единицы, то это означает, что
UART готов получать данные. Если flag_rx_ready содержит все нули, то
это означает, что UART уже получает данные. Может использоваться для
управления потоком данных по протоколу xon, xoff.
}
// Если определено символическое имя HOST, то используются флаги
// FLAG_IN, FLAG_OUT, в противном случае биты PF[1], PF[2]