передатчик: флаг готовности буфера для приема очередного символа TXRDY и флаг опустошения выходного сдвигового регистра TX EMPTY;
приемник: флаг готовности буфера для приема очередного символа RXRDY; флаг выполнения условия сбоя в потоке данных BRKDT; флаг выполнения условий прерываний RX ERROR.
- Отдельные для приемника и передатчика биты прерываний.
- Максимальная скорость передачи: бит/с.
- Формат передачи – NRZ.
- 16-уровневый буфер приемника/передатчика типа FIFO.
1.3. Управляющие регистры модуля SCI
Конфигурирование и управление работой модулей A и B SCI осуществляется с помощью служебных регистров. Каждый из модулей имеет индивидуальный единообразный набор управляющих регистров, в табл. 1.1 приводится обозначение и краткое описание регистров модуля SCIA
Таблица 1.1 Сводная таблица регистров управления модуля SCI A |
|||
Обозначение |
Адрес hex |
Размер (x16) |
Описание |
SCICCRA |
0x7050 |
1 |
Регистр управления обменом данными (SCI-A Communications Control) |
SCICTL1A |
0x7051 |
1 |
1-й регистр управления (SCI-A Control 1) |
SCIHBAUDA |
0x7052 |
1 |
Старшая часть регистра управления скоростью передачи (SCI-A Baud, High Bits) |
SCILBAUDA |
0x7053 |
1 |
Младшая часть регистра управления скоростью передачи (SCI-A Baud, Low Bits) |
SCICTL2A |
0x7054 |
1 |
2-й регистр управления (SCI-A Control 2) |
SCIRXSTA |
0x7055 |
1 |
Регистр состояния приемника (SCI-A Receive Status) |
SCIRXEMUA |
0x7056 |
1 |
Регистр буфера данных режима эмуляции приема (SCI-A Receive Emulation Data Buffer) |
SCIRXBUFA |
0x7057 |
1 |
Буфер данных приемника (SCI-A Receive Data Buffer) |
SCITXBUFA |
0x7059 |
1 |
Буфер данных передатчика (SCI-A Transmit Data Buffer) |
SCIFFTXA |
0x705A |
1 |
FIFO регистр передачи (SCI-A FIFO Transmit) |
SCIFFRXA |
0x705B |
1 |
FIFO регистр приемника (SCI-A FIFO Receive) |
SCIFFCTA |
0x705C |
1 |
Регистр управления режима FIFO (SCI-A FIFO Control) |
SCIPRIA |
0x705F |
1 |
Регистр управления приоритетом (SCI-A Priority Control) |
При обращении к управляющим регистрам модулей SCI используются назначенные регистрам
мнемоника и определения (в терминах битовых полей и структур, сведенных в
регистровые файлы), прописанные в библиотечном заголовочном файле DSP280x_Sci.h
[2]. Его листинг
с комментариями
приведен в файле ПРИЛОЖЕНИЯриложения. Более подробная информация
об используемом при программировании периферийных модулей подходе приведена в
методических указаниях к лабораторной работе № 1 и в [3]. Ниже представлен фрагмент
текста программы-примера Example_280xSci_FFDLB.c; в программе при помощи SCI осуществляется последовательная
передача символов с кодом от 0 до 255 с последующим повторением в бесконечном
цикле. Пример является частью библиотеки [2], полный текст программы с
русифицированными комментариями приведен в файле ПРИЛОЖЕНИЯ.
.
.
.
LoopCount = 0;
ErrorCount = 0;
// Функции пользователя, определенные ниже
scia_fifo_init(); // Инициализация SCI FIFO
scia_loopback_init(); // Инициализация циклического режима работы SCI
// Присвоение передаваемому символу начального значения
SendChar = 0;
// Последовательная передачеа
символов с бесконечным повторением цикла.
// Проверка содержимого буфера приемника после передачи каждого символа.
for(;;)
{
scia_xmit(SendChar); // Пользовательская функция, определенная ниже
// ожидать приема: XRDY = 1 - FIFO-буфер приемника пуст
while(SciaRegs.SCIFFRX.bit.RXFFST != 1) { }
// Проверка соответствия принятого символа переданному
ReceivedChar = SciaRegs.SCIRXBUF.all;
if(ReceivedChar != SendChar) error(1);
// Переход к следующему символу и повтор передачи
SendChar++;
// Ограничение длины символов 8 разрядами
SendChar &= 0x00FF;
LoopCount++;
}
}
// Блок обработчиков прерываний и пользовательских функций:
void error(int ErrorFlag)
{
Uint16 Error = ErrorFlag;
ErrorCount++;
}
// Тест 1,SCIA DLB, 8-разрядное слово, скорость передачи (baud rate) 0x000F, // настройки по умолчанию, 1 стоп-бит, без проверки паритета.
void scia_loopback_init()
{
SciaRegs.SCICCR.all = 0x0007; // 1 стоп-бит, без зацикливания,
// без проверки паритета, длина слова - 8 бит,
// асинхронный режим, протокол незанятой линии
SciaRegs.SCICTL1.all = 0x0003; // Разрешить передачу, прием, внешнее тактирование SCICLK,
// Запретить RX ERR, SLEEP, TXWAKE
SciaRegs.SCICTL2.all = 0x0003;
SciaRegs.SCICTL2.bit.TXINTENA =1;
SciaRegs.SCICTL2.bit.RXBKINTENA =1;
SciaRegs.SCIHBAUD = 0x0000;
SciaRegs.SCILBAUD = 0x000F;
SciaRegs.SCICCR.bit.LOOPBKENA = 1; // Разрешить зацикливание
SciaRegs.SCICTL1.all = 0x0023; // Вывести SCI из состояния сброса
}
// Передать символ через SCI
void scia_xmit(int a)
{
SciaRegs.SCITXBUF=a;
}
// Настройка FIFO SCI
void scia_fifo_init()
{
SciaRegs.SCIFFTX.all = 0xE040;
SciaRegs.SCIFFRX.all = 0x204f;
SciaRegs.SCIFFCT.all = 0x0;
}
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.