Олег Вальпа - Разработка устройств на основе цифровых сигнальных процессоров фирмы Analog Devices с использованием Visual DSP++
Рис. 21.2
Рис. 21.3
Рис. 21.4
Рис. 21.5.
Рис. 21.6
Рис. 21.7
Рис. 21.8
Рис. 21.9
Рис. 21.10
Рис. 21.11
Рис. 21.12
Рис. 21.13
SPORT0 в отличие от SPORT1 может кроме того работать в режиме многоканальности. Т.е. он может избирательно принимать и передавать данные последовательного потока с использованием мультиплексирования 24 или 32 каналов с временным разделением информации. Это необходимо для использования цифровых коммуникационных интерфейсов T1 и E1, а также может использоваться для сетевой коммуникации нескольких процессоров. В одноканальном режиме сигналы кадровой синхронизации обозначают начало слова или непрерывного потока слов. В многоканальном режиме сигнал кадровой синхронизации приема данных RFS0 обозначает начало конкретного слова в потоке данных, состоящих из 24 или 32 слов, для одновременного приема и передачи этого слова по раздельным линиям приемопередатчика. Многоканальный режим разрешается установкой в единичное состояние 15-го разряда в регистре управления SPORT0 по адресу 0x3FF6. Формат пакетов при этом определяется разрядом 9 этого же регистра. Если он установлен в единицу, будет задан 32-словный формат, при установке в ноль задается 24-словный формат данных. Кроме того, разряды с 10-го по 13-й этого же регистра, с условным названием MFD, устанавливают задержку сигнала кадровой синхронизации в многоканальном режиме для того, чтобы кадровый синхроимпульс обозначал необходимое для приема и передачи слово в потоке данных. Диаграмма задержки сигнала кадровой синхронизации для нескольких значений MFD при работе SPORT0 в многоканальном режиме показана на рис. 21.14.
Рис. 21.14. Диаграмма задержки сигнала кадровой синхронизации
Сигнал кадровой синхронизации передатчика TFS0 в многоканальном режиме работает как сигнал TDV (Transmit Data Valid), переводимый как правильные данные передачи и предназначенный для управления включением и отключением внешней буферной логики передатчика. Фактически этот сигнал осуществляет стробирование тех слов данных, которые были разрешены в конфигурационном регистре для передачи. В зависимости от установки 7-го разряда в регистре управления SPORT0 по адресу 0x3FF6 описанный сигнал может иметь активное значение с высоким или с низким уровнем потенциала. На рис. 21.15 приведен пример диаграммы работы SPORT0 в многоканальном режиме.
Рис. 21.15. Пример диаграммы работы SPORT0 в многоканальном режиме
Рассмотрим пример программного конфигурирования обоих последовательных портов сигнального процессора, приведенный ниже.
{ ============================= SPORT0 ============================= }
{ Регистры разрешения мультиканального приема/передачи данных SPORT0 }
{ Регистр разрешения приема SPORT0_RX_Channels1 = 0x3ffa }
{ Биты: FEDCBA9876543210 0-игнорирован 1-доступен }
{ Каналы: 3322222222211111 }
{ 1098765432109876 }
ax0 = b#0000000000000000; DM(SPORT0_RX_Channels1) = ax0;
{ Регистр разрешения приема SPORT0_RX_Channels0 = 0x3ff9 }
{ Биты: FEDCBA9876543210 0-игнорирован 1-доступен }
{ Каналы: 111111 }
{ 5432109876543210 }
ax0 = b#0000000000000010; DM(SPORT0_RX_Channels0) = ax0;
{ Регистр разрешения передачи SPORT0_TX_Channels1 = 0x3ff8 }
{ Биты: FEDCBA9876543210 0-игнорирован 1-доступен }
{ Каналы: 3322222222211111 }
{ 1098765432109876 }
ax0 = b#0000000000000000; DM(SPORT0_TX_Channels1) = ax0;
{ Регистр разрешения передачи SPORT0_TX_Channels0 = 0x3ff7 }
{ Биты: FEDCBA9876543210 0-игнорирован 1-доступен }
{ Каналы: 111111 }
{ 5432109876543210 }
ax0 = b#0000000000000011; DM(SPORT0_TX_Channels0) = ax0;
{ Регистр SPORT0_Control_Reg = 0x3FF6 (Регистр управления SPORT0) }
{ Биты: FEDCBA9876543210 }
{ Исх.сост: 0000000000000000 }
ax0 = b#1100011100110111; DM(SPORT0_Control_Reg) = ax0;
{ Регистр SPORT0_SCLKDIV = 0x3FF5 (Модуль деления последов. такт. импульсов) }
{ частота CLKOUT внутренняя удвоенная частота процессора }
{ SCLKDIV = ------------------------------------------------------ - 1; }
{(кадр.с.и.) 2*(частота SCLK синхронизация бит порта) }
{ }
{ SCLKDIV =(( 2*16384КГц ) / ( 2*2048КГц )) -1=8-1=7 }
ax0 = 7; DM(SPORT0.SCLKDIV) = ax0;
{Регистр SPORT0_RFSDIV = 0x3FF4 (Модуль деления последоват. такт. импульсов) }
{ частота SCLK }
{ RFSDIV = ------------ - 1; }
{ частота RFC }
{ RFSDIV = 2048КГц / 8КГц - 1 = 256-1 = 255 }
ax0 = 255; DM(SPORT0_RFSDIV) = ах0;
{Регистр SPORT0_Autobuf = 0x3FF3 (Регистр управления автобуферизацией SPORT0)}
{ Биты: FEDCBA9876543210 }
{ Исх.сост: 0000XXXXXXXXXX00 }
ax0 = b#0000011110101011; DM(SPORT0_Autobuf) = ах0;
{ Регистр SPORT1_Control_Reg = 0x3ff2 (Регистр управления SPORT1) }
{ Биты: FEDCBA9876543210 }
{ Исх.сост: 0000000000000000 }
ax0 = b#0111101001001001; DM(SPORT1_Control_Reg) = ах0;
{Регистр SPORT1_SCLKDIV = 0x3FF1 (Модуль деления последоват. такт. импульсов)}
{ частота CLKOUT внутренняя удвоенная частота процессора }
{ SCLKDIV = ------------------------------------------------------ - 1; }
{(кадр.с.и.) 2*(частота SCLK синхронизация бит порта) }
{ }
{ SCLKDIV = (( 2 *16384КГц ) / ( 2*115200 Гц )) -1 = 142-1 = 852 }
ax0 = 141; DM(SPORT1_SCLKDIV) = ax0; { 115200 бод }
{ Регистр SPORT1_RFSDIV = 0x3FF0 (Модуль деления последоват. такт, импульсов)}
{ частота SCLK }
{ RFSDIV = ------------ - 1; (или число бит в пакете -1) }
{ частота RFC }
{ RFSDIV = 19200 Гц / 1920 Гц - 1 = 10-1 = 9 }
ax0 = 9; DM(SPORT1_RFSDIV) = ax0;
{Регистр SPORT1_Autobuf = 0x3FEF (Регистр управления автобуферизацией SPORT1)}
{ Биты: FEDCBA9876543210 }
{ Исх.сост: 0000XXXXXXXXXX00 }
ax0 = b#0000000000000000; DM(SPORT1_Autobuf) = ax0;
В первых двух блоках программы разрешается работа первого канала приемника SPORT0. В следующих двух блоках программы разрешается работа нулевого и первого канала передатчика SPORT0. Далее в регистр SPORT0_Control_Reg заносится информация о длине слова, формате данных, выравнивании слова, типе компандирования, инвертировании кадровых импульсов и др. режимов работы порта. После чего вычисляется коэффициент деления для тактовой частоты синхронизации SCLK и записывается в регистр SPORT0_SCLKDIV. Аналогично, в следующем блоке программы, производится вычисление коэффициента деления для тактовой частоты кадровых импульсов и запись этого значения в регистр SPORT0_RFSDIV. Завершается конфигурирование SPORT0 записью режима работы порта в регистр управления автобуферизацией SPORT0_Autobuf. Аналогично производится конфигурирование порта SPORT1.
Прием и передача данных через порты могут осуществляться с помощью регистров передатчика TX0, TX1 и регистров приемника RX0, RX1 в портах SPORT0 и SPORT1 соответственно. Эти регистры не отображены в карте памяти процессора, но распознаются мнемоникой ассемблера. Доступ к этим регистрам обеспечивается в произвольный момент во время выполнения программы. Например, следующая команда записывает данные из регистра AX0 в регистр передатчика SPORT1: