Форматы данных, передаваемых через последовательные порты

 

Форматы слов данных, передаваемых через последовательный порт, определяются битами DTYPE, SENDN, SLEN и PACK в регистрах STCTLn и SRCTLn.

Длина слова, передаваемого или принимаемого через последовательный порт, задается 5‑битовым полем SLEN, в которое заносится количество разрядов в слове, уменьшенное на 1. Поле SLEN не может быть меньше 2 (длина слова не менее 3 бит). Слова длиной менее 32-х разрядов выравниваются по правому краю в регистрах RX и TX.

Принимаемые данные размерностью 16 битов и менее могут упаковываться в 32-битные слова, а передаваемые 32-битные слова могут выводиться как два 16-битных слова. Если бит PACK=1 в регистре SRCTLn, два последовательно принятых слова упаковываются в одно, причем первое принятое слово будет находиться в младших 16 битах, а второе – в старших 16 битах. Оба слова будут выровнены к правым границам своих полей. При передаче данных распаковка выполняется аналогично (если установлен бит PACK в регистре STCTLn). В этом случае прерывания по приему или передаче слова генерируются для 32-битного слова, а не для каждого 16-битного слова.

Внимание! Режим с упаковкой данных целесообразно использовать для снижения загрузки I/O-шины, поскольку в этом случае за одну пересылку передается два 16-разрядных слова. При этом каждая половинка упакованного 32-битного слова, полученного через последовательный порт и записанного в пространство памяти нормальных адресов, может быть доступна через пространство памяти коротких адресов.

Поле DTYPE задает один из четырех форматов данных, которые могут быть переданы через последовательный порт.

 

Значение DTYPE Формат данных
в одноканальном режиме
выравнивание вправо, неиспользуемые биты равны 0
выравнивание вправо, знаковое расширение
компандирование по m-закону
компандирование по А-закону
в многоканальном режиме
x0 выравнивание вправо, неиспользуемые биты равны 0
x1 выравнивание вправо, знаковое расширение
0x компандирование по m-закону
1x компандирование по А-закону

 

Эти форматы применяются к данным, находящимся в TX- и RX-регистрах.

Примечание. Для многоканального режима выбор типа компандирования и заполнение старших битов устанавливается независимо друг от друга. В этом случае передача значений в линейном формате осуществляется, когда канал активен и режим компандирования для данного канала в регистре MTCCSx или MRCCSx выключен (см. ниже). Режим знакового расширения (нулем или знаковым битом) одинаков для всех каналов при приеме и для всех каналов при передаче и определяется младшим битом поля DTYPE. Если включен режим знакового расширения, то оно выполняется только для тех каналов, для которых не включено компандирование. В противном случае старшие биты слов будут заполнены нулями.

 

Запись в TX-регистры 32-битного значения приводит к его компрессии до 8-битового значения, расширенному со знаком до длины слова, подлежащего передаче. Если исходное 32-битное значение больше максимально допустимого при компандировании по А- или m-закону (соответственно максимального 14-разрядного и 13-разрядного значения), оно преобразуется в максимально возможное значение с учетом знака.

Аналогично, при приеме через последовательный порт в режиме компандирования получаемые 8-битные данные декомпандируются и записываются в 32-разрядный RX-регистр со знаковым расширением.

Аппаратные схемы компандирования и декомпандирования могут быть использованы и без передачи или получения данных через последовательный порт, например в целях тестирования или отладки программы.

 

... // передача через порт должна быть запрещена

R0 = 0x0000000; // разрешить компандирование

dm(STCTL0) = R0; // записать значение в регистр управления SPORT0

dm(TX0) = R1; // записать исходное 32-битное значение в TX0

nop; // 1 такт чтобы новое значение перезаписалось в TX0

R1 = dm(TX0); // прочитать 8-битовое компандированное значение

...

Аналогичная последовательность действий применяется для выполнения аппаратного декомпандирования без передачи через последовательный порт, но в этом случае необходимо использовать RXn-регистр.