Последовательный коммуникационный интерфейс SCI, страница 2

передатчик: флаг готовности буфера для приема очередного символа 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;