Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Руководство пользователя по сигнальным процессорам Sharc

.pdf
Скачиваний:
143
Добавлен:
01.05.2014
Размер:
9.49 Mб
Скачать

Линк-порты 9

/*________ Программа обработки прерывания буфера 2 линк-портов ___________*/

lp2_orig_slave:

/*__Разрешение задержки «подтягивания» к земле на выводе LxACK ведомого __*/

bit clr imask LSRQI; /*Запрещение прерывания запроса обслуживания линкпорта*/

r0=0x10;

dm(LSRQ)=r0; /* Демаскирование состояния запроса передачи lport0 в LSRQ */

r0=0x00000000;

 

dm(LCTL)=r0;

/* LCTL: блокировка всех LBUF */

disabled2:

 

r0=dm(LSRQ);

/* Проверка, чтобы гарантировать, что LxACK сброшен */

/*с помощью «подтягивающего» к земле резистора на его выводе */

r0=FEXT r0 BY 20:1; /* И первоначально */

r0=pass r0;

/*ведомый, и первоначально ведущий будут */

if NE jump disabled2; /* синхронизированы. Следующее выставление LxACK */ /* будет указывать ведущему, что ведомый */ /* запрашивает маркер */

/*________________________________________________________________________*/

bit clr imask LP2I;

/* Запрещение прерывания буфера 2 линк-портов */

r0=0x3fe3f;

 

dm(LAR)=r0;

/*Регистр LAR: LBUF2->Port 0 */

r0=0x00000100;

 

dm(LCTL)=r0;

/*разрешение LBUF2 (ведомый), без DMA */

bit clr mode1 NESTM;

/*Запрещение вложенности прерываний, */

 

/*чтобы избежать срыва синхронизации */

r0=dm(LBUF2);

/* Разрешения считывания маркера для ведущего */

/*Следующие строки – это проверка, является ли первое слово после DMA словом*/ /* освобождения маркера. Если нет, ведомый считывает другие фиктивные слова */ /*и продолжает оставаться ведомым. Если это – слово освобождения маркера, */ /*ведущий продолжает передавать, а ведомый будет решать, */ /* примет ли он это слово */

r1=trw;

/*Слово освобождения маркера

*/

r0

= r0 - r1;

/*Проверка принимаемого слова

и установка флага ALU */

if

NE jump second_slave_mode;

/* Нет разрешения передачи маркера */

nop;

341

9 Линк-порты

nop;

/*Следующие 3 строки показывают, как отклонить маркер */ /* Если их закомментировать, этот ведомый станет ведущим */

/*Если их не комментировать, этот ведомый останется ведомым */

LCNTR=20, DO reject_token UNTIL LCE; reject_token: nop;

jump second_slave_mode;

nop;

/* Задержка считывания приходящего сообщения */

nop;

 

master_mode:

 

r0=dm(LBUF2);

/* Считывание 3 раза, чтобы очистить */

r0=dm(LBUF2);

/* LBUF предыдущего ведущего. Т. о., предыдущий ведущий */

r0=dm(LBUF2);

/* освободит маркер */

/*_________Защита от одновременной передачи двумя линк-портами _________*/

bit clr imask LSRQI; /* Запрет прерывания запроса обслуживания линк-порта */

r0=0x10;

dm(LSRQ)=r0; /* Демаскирование состояния запроса передачи lport в LSRQ */

r0=0x00000000;

 

 

dm(LCTL)=r0;

/* LCTL: блокировка всех LBUF */

disabled3:

 

 

r0=dm(LSRQ);

/* Проверка, чтобы гарантировать, что LxACK сброшен */

/*с помощью «подтягивающего» к земле резистора на его выводе */

r0=FEXT r0 BY 20:1; /* И первоначальный ведомый, */

r0=pass r0;

/* и первоначальный ведущий будут синхронизированы */

if NE jump disabled3;

/* Следующее выставление LxACK будет указывать */

 

 

/* ведущему, что ведомый запрашивает маркер. */

slave_enabled:

 

 

r0=dm(LSRQ);

/*Проверка, чтобы гарантировать, что первоначальный */

r0=FEXT r0 BY 20:1;

/* ведущий стал ведомым, увидев, что */

r0=pass r0;

/* выставление LxACK сгенерировало LxRRQ */

if EQ jump slave_enabled;

/*________________________________________________________________________*/

r0=0x3f1ff;

 

 

dm(LAR)=r0;

/*Регистр LAR: LBUF3->Port

0 */

r0=0x00009000;

 

 

dm(LCTL)=r0;

/* Разрешение LBUF3 без DMA */

r0=@source_3;

/*Размер блока для передачи по DMA */

dm(LBUF3)=r0;

/*Посылка размера блока DMA */

342

Линк-порты 9

r0=0xc0;

 

 

wait: r1=dm(LCOM);

/*Проверка, пуст ли LBUF3 */

r0=r0 AND r1;

 

 

if NE jump wait;

 

/* Если размер DMA не верен, ожидание */

nop;

 

 

r0=source_3;

 

 

dm(II5)=r0;

 

/* Установка индекса DMA на начало буфера источника */

r0=1;

 

 

dm(IM5)=r0;

 

/*Установка модификатора в 1 */

r0=@source_3;

 

 

dm(C5)=r0;

/*Установка счетчика DMA равным длине буфера данных */

r0=0x0000b000; /*Регистр LCTL: 32-разрядные данные, */ /*LBUF3 настроен на передачу */

dm(LCTL)=r0;

/*Разрешение DMA

â

LBUF3

*/

/*Это начало передачи по DMA */

 

 

 

/* Всегда записывайте LCTL

после

LAR */

bit clr irptl LP3I;/*Очистка отложенного прерывания буфера 3 линк-портов */ bit set imask LP3I; /*Разрешение прерывания буфера 3 линк-портов */

rti;

second_slave_mode:

r0=dm(LBUF2);

/* Считывание 3 раза, чтобы очистить */

r0=dm(LBUF2);

/* LBUF предыдущего ведущего. Т. о., предыдущий ведущий */

r0=dm(LBUF2);

/* освободит маркер */

r0=0x3f1ff;

 

dm(LAR)=r0;

/*Регистр LAR: LBUF3->Port 0 */

r0=0x00001000;

 

dm(LCTL)=r0;

/*Разрешение LBUF3 без DMA */

r1=dm(LBUF3); /*Считывание нового размера блока, передаваемого по DMA */ r0=destination_2;

dm(II5)=r0;

/*Установка индекса DMA на начало буфера адресата */

r0=1;

 

dm(IM5)=r0;

/*Установка модификатора в 1 */

r0=@destination_2;

dm(C5)=r1;

/*Реальный размер блока DMA должен быть взят из ведущего */

r0=0x00003000;

/*Регистр LCTL:32-разрядные данные, */

/* LBUF3 настроен для приема */

dm(LCTL)=r0;

/*Разрешение DMA в LBUF3 */

/*Это начало передачи по DMA */

/* Всегда записывайте LCTL после LAR */

343

9 Линк-порты

bit

clr

irptl LP3I;/*Очистка отложенного прерывания буфера 3 линк-портов */

bit

set

imask LP3I;

/* Разрешение прерывания буфера 3 линк-портов */

rti;

/*_____________Начало программы первоначально ведомого _______________*/

start_as_slave:

 

r0=destination_1;

 

dm(II4)=r0;

/* Установка индекса DMA на начало буфера адресата */

r0=1;

 

dm(IM4)=r0;

/* Установка модификатора DMA (шаг) в 1 */

r0=@destination_1;

dm(C4)=r0;

/* Реальный размер DMA должен быть взят из ведущего */

r0=0xc000;

/*Регистр LCOM: удвоенная частота, */

dm(LCOM)=r0; /*Замечание: используйте r0=0x10000 для */

/*версии кристалла 0.х */

/* первоначально: 0x0000c000 */

r0=0x3fe3f;

/*Регистр LAR: LBUF2->Port 0 */

dm(LAR)=r0;

/*Все остальные неактивны */

bit set imask LP2I;

 

/*Разрешение прерывания буфера 2 линк-портов */

bit set mode1 IRPTEN;

/* Глобальное разрешение прерываний */

r0=0x00000300;

/*Регистр LCTL:32-разрядные данные, /*

/* LBUF2 настроен для приема */

dm(LCTL)=r0;

/* Разрешение DMA в LBUF2 */

/*Это – начало передачи DMA */

/* Всегда записывайте LCTL после LAR */

wait_2: idle;

 

/*Ожидание прерывания буфера 2 линк-портов */

jump wait_2; /* Здесь окончание после выполнения DMA */

nop;

/*Все прерывания ведомого возвращаются сюда */

nop;

 

 

.ENDSEG;

344

Последовательные порты 10

10.1. Обзор

ADSP 2106x имеет два независимых синхронных последовательных порта SPORT0 и SPORT1, которые обеспечивают интерфейс ввода вывода (I/O) с различными периферийными устройствами. Каждый последовательный порт имеет собственные регистры управления и буферы данных. Возможность использования различных вариантов тактовой и кадровой синхронизации позволяет поддерживать ряд протоколов обмена данными через последовательный порт и обеспечивать аппаратный интерфейс со многими преобразователями данных и кодеками промышленного стандарта.

Каждый последовательный порт может работать на полной тактовой частоте процессора, поддерживая скорость передачи данных n Мбит/с, где n – тактовая частота процессора. Возможность независимых приема и передачи данных обеспечивает значительную гибкость при организации коммуникаций через последовательные порты. Данные последовательного порта могут автоматически передаваться во внутреннюю память и из нее с использованием режима передачи с прямым доступом к памяти (DMA – Direct Memory Access). Каждый последовательный порт поддерживает многоканальный режим с временным разделением каналов (TDM – Time Division Multiplexing).

Сигналы тактовой и кадровой синхронизации последовательного порта могут генерироваться внутри процессора или приниматься от внешнего источника. Последовательные порты могут работать с длиной слова от 3 до 32 бит и с различными форматами передачи данных: передача начинается со старших бит или с младших. Они обеспечивают различные режимы синхронизации и передачи, а также компандирование по m закону или А закону.

Последовательные порты имеют следующие характеристики:

независимые функции приема и передачи;

передача слов данных длиной до 32 бит, начиная со старших бит или с младших бит;

двойная буферизация данных – в каждой части последовательного порта (и принимающей и передающей) имеется регистр данных, а также регистр

345

10 Последовательные порты

сдвига; двойная буферизация сокращает время обслуживания последовательного порта;

аппаратное компандирование принимаемых и передаваемых данных по µ закону и А закону;

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

управляемые прерываниями передачи одиночных слов данных во внутреннюю память и из нее, которые контролируются ядром процессора ADSP 2106x;

передачи по DMA во внутреннюю память и из нее – каждый SPORT может автоматически принимать и/или передавать целый блок данных;

цепочка операций DMA для передачи нескольких блоков данных;

многоканальный режим с временным разделением каналов – каждый SPORT может избирательно принимать и передавать данные из потока последовательно передаваемых бит с использованием временного разделения каналов; этот режим полезен для интерфейсов Т1.

В табл. 10.1 приведены сигнальные выводы для каждого последовательного порта:

Функция

Выводы SPORT0

Выводы SPORT1

Передача данных

DT0

DT1

Сигнал тактовой синхронизации передачи

TCLK0

TCLK1

Сигнал кадровой синхронизации передачи

TFS0

TFS1

Прием данных

DR0

DR1

Сигнал тактовой синхронизации приема

RCLK0

RCLK1

Сигнал кадровой синхронизации приема

RFS0

RFS1

Таблица 10.1. Выводы последовательного порта

Последовательный порт принимает последовательно передаваемые данные на входе DR и последовательно передает данные на выходе DT. Работая в дуплексном режиме, он может одновременно принимать и передавать данные.

Связь через последовательный порт синхронизируется сигналом тактовой синхронизации – каждый бит данных должен сопровождаться импульсом тактовой синхронизации. Каждый последовательный порт может генерировать или принимать собственный сигнал тактовой синхронизации передачи (TCLK) и принимать сигнал тактовой синхронизации приема (RCLK). Частота сигнала тактовой синхронизации, генерируемого процессором самостоятельно, задается в регистрах TDIV и RDIV.

346

Последовательные порты 10

Помимо этого, данные могут передаваться с использованием сигнала кадровой синхронизации. Сигнал кадровой синхронизации может генерироваться либо в начале передачи или приема отдельного слова данных, либо в начале блока слов. Выбор вида генерации сигнала кадровой синхронизации зависит от типа устройства, подключенного к ADSP 2106х через последовательный порт. Каждый последовательный порт может генерировать или принимать собственный сигнал кадровой синхронизации передачи (TFS) и сигнал кадровой синхронизации приема (RFS). Частота внутреннего сигнала кадровой синхронизации задается в регистрах TDIV и RDIV.

На рис. 10.1 изображена блок схема последовательного порта. Данные, предназначенные для передачи, записываются в буфер TX. Эти данные сжимаются (опционально) в схеме компандирования, а затем автоматически пересылаются в передающий регистр сдвига. Из регистра сдвига данные сдвигаются на вывод DT последовательного порта синхронно с сигналом TCLK. Если используется кадровая синхронизация, то сигнал TFS указывает на начало побитовой передачи каждого слова данных. Если последовательный порт активизирован (SPEN=1 в регистре управления STCTL), вывод DT всегда управляется, т. е. не переводится в третье состояние. Исключением является работа последовательного порта в многоканальном режиме. Когда канал не

Рис. 10.1. Блок-схема последовательного порта

347

10 Последовательные порты

используется для передачи, то вывод DT находится в третьем состоянии (см. раздел 10.7 «Работа в многоканальном режиме»).

В приемной части SPORT данные сдвигаются с выхода DR синхронно с сигналом RCLK. При использовании кадровой синхронизации сигнал RFS указывает на начало принимаемого слова данных. После приема целого слова данные расширяются (опционально), а затем автоматически передаются в буфер RX.

Примечание: SPORT ADSP 2106х не является универсальным асинхронным приемопередатчиком (UART) и не может использоваться для связи с устройствами стандарта RS 232 или использовать любые другие протоколы асинхронной связи. Однако, существует один способ реализовать связь ADSP 2106 х с устройствами стандарта RS 232. В этом случае два вывода FLAG можно использовать как асинхронные сигналы приема и передачи данных. Пример реализации этого способа рассмотрен в главе Программирование UART в Digital Signal Processing Applications Using The ADSP 2100 Family, Volume 2.

10.1.1. Прерывания SPORT

Каждый последовательный порт генерирует прерывание передачи по DMA и прерывание приема по DMA. Когда режим DMA через последовательный порт запрещен, прерывания генерируются для каждого принимаемого и передаваемого слова данных. Приоритет прерываний последовательного порта приведен в табл. 10.2.

Имя прерывания*

Прерывание

 

SPR0I

0

канал DMA, прием через SPORT0

ВЫСШИЙ ПРИОРИТЕТ

SPR1I

1

канал DMA, прием через SPORT1

 

SPT0I

2

канал DMA, передача через SPORT0

 

SPT1I

3

канал DMA, передача через SPORT1

НИЗШИЙ ПРИОРИТЕТ

*Эти имена определены в заголовочном файле def21060.h, поставляемом с программным обеспечением для процессоров семейства ADSP 21000.

Таблица 10.2. Прерывания SPORT

Прерывания SPORT генерируются во втором цикле тактовой синхронизации после того, как последний бит слова зафиксирован или выведен.

10.2. Сигнал сброса последовательного порта

Существует два способа перевода последовательных портов в состояние сброса: аппаратный сброс, использующий вывод процессора , и программный сброс, когда обнуляется бит активизации последовательного порта (SPEN) в

348

Функция
Регистр управления передачей SPORT Буфер передачи данных
Коэффициент деления частот тактовой и кадровой синхронизации передачи Выбор режима многоканальной передачи
Выбор компандирования в режиме многоканальной передачи Регистр управления приемом SPORT
Буфер приема данных Коэффициент деления частот тактовой и кадровой синхронизации приема
Выбор режима многоканального приема Выбор компандирования в режиме многоканального приема
Длина пути SPORT (для многопроцессорной сети)
Сравнение при приеме через SPORT** Маска сравнения при приеме через SPORT**

Последовательные порты 10

регистрах управления STCTL и SRCTL. Каждый способ по разному влияет на последовательный порт.

Аппаратный сброс блокирует последовательные порты, обнуляя все биты регистров управления STCTL и SRCTL (включая бит активизации SPEN) и регистров деления частоты кадровой синхронизации TDIV и RDIV. Все выполняющиеся операции прерываются.

Программный сброс с помощью бита SPEN блокирует последовательные порты и прерывает все выполняющиеся операции. Также обнуляются биты состояния.

Последовательные порты будут готовы к началу передачи и приема данных через два процессорных цикла после того, как они будут активизированы (в регистрах управления STCTL и SRCTL).

10.3. Регистры управления и буферы данных SPORT

Регистры, которые используются для управления и задания конфигурации последовательного порта, являются частью набора регистров устройства ввода вывода (Input Output Processor – IOP). Каждый SPORT имеет собственный набор регистров управления и буферов данных:

Название

регистра*

STCTLx TXx TDIVx

MTCSx

MTCCSx

SRCTLx

RXx

RDIVx

MRCSx

MRCCSx

SPATHx

KEYWDx KEYMASKx * x=0,1

** только в ADSP 21061

349

10 Последовательные порты

В табл. 10.3 приведены адреса отображенных в карте памяти регистров SPORT и их содержимое при инициализации после сброса. Все регистры 32 разрядные, за исключением 16 разрядного регистра SPATH и ячейки 0xFFFF (Заметим, что для обычной работы последовательного порта (не в режиме многопроцессорной сети) значения регистра SPATH и ячейки 0xFFFF должны оставаться равными значениям инициализации после сброса, т. е. 0х0001).

Программирование регистров управления SPORT осуществляется путем записи значений по соответствующему адресу в памяти. Символические имена регистров и отдельных битов управления могут использоваться в программах ADSP 2106х – определения #define этих имен содержатся в заголовочном файле def21060.h, который находится в каталоге INCLUDE Программного обеспечения процессоров семейства ADSP 21000. Файл def21060.h приведен в приложении Регистры управления/состояния этого руководства. Все биты управления и состояния считаются активными, если равны 1 (если другой вариант не оговаривается специально).

Адрес

Название

Инициализация Определение

памяти

регистра

после сброса

 

0x00E0

STCTL0

0x0000 0000

Регистр управления передачей SPORT0

0x00E1

SRCTL0

0x0000 0000

Регистр управления приемом SPORT0

0x00E2

TX0

ni

Буфер передачи данных SPORT0

0x00E3

RX0

ni

Буфер приема данных SPORT0

0x00E4

TDIV0

ni

Коэффициент деления частот тактовой и кадровой

 

 

 

синхронизации при передаче через SPORT0

0x00E5

 

 

Зарезервирован

0x00E6

RDIV0

ni

Коэффициент деления частот тактовой и кадровой

 

 

 

синхронизации при приеме через SPORT0

0x00E7

 

 

Зарезервирован

0x00E8

MTCS0

ni

Выбор режима многоканальной передачи SPORT0

0x00E9

MRCS0

ni

Выбор режима многоканального приема SPORT0

0x00EA

MTCCS0

ni

Выбор компандирования в режиме многоканальной

 

 

 

передачи через SPORT0

0x00EB

MRCCS0

ni

Выбор компандирования в режиме

 

 

 

многоканального приема через SPORT0

0x00EC

KEYWD

ni

Сравнение при приеме через SPORT0 (ADSP 21061)

0x00ED

KEYMASKni

Маска сравнения при приеме через SPORT0

 

 

 

(ADSP 21061)

0x00EE

SPATH0

0x0001

Длина пути SPORT0 (для многопроцессорной сети)

0x00EF

 

0x0001

Зарезервирован

0x00F0

STCTL1

0x0000 0000

Регистр управления передачей SPORT1

0x00F1

SRCTL1

0x0000 0000

Регистр управления приемом SPORT1

0x00F2

TX1

ni

Буфер передачи данных SPORT1

0x00F3

RX1

ni

Буфер приема данных SPORT1

0x00F4

TDIV1

ni

Коэффициент деления частот тактовой и кадровой

 

 

 

синхронизации при передаче через SPORT1

350