Лекция 4

Регистры ADSP

С точки зрения программирования, процессоры семейства ADSP-2100 состоят из трех вычислительных устройств, двух генераторов адреса данных, программного автомата. Кроме того, они могут иметь дополнительные устройства и внутреннюю память на кристалле, размеры и вид которой зависят от модификации процессора. Почти все операции, в которых участвуют указанные элементы архитектуры процессора, выполняются с использованием одного или нескольких регистров, необходимых, например, для хранения данных, нахождения адресов значений (указателей) или для определения операционных режимов.

Внутренние регистры используются для хранения данных, адресов, информации, относящейся к управлению или состояниям процессора. Например, в регистре АХО содержится операнд (данные) АЛУ, в 14 - указатель Генератора адреса данных 2 (адрес), в ASTAT - флаги состояний арифметических операций, а группа разрядов DWAIT задает число состояний ожидания для различных зон памяти данных.

Обращение к регистрам может осуществляться двумя способами. Содержимое назначенных регистров, таких как МХО и IMASK, может считываться и записываться при помощи непосредственных явных команд языка ассемблер. Например:

МХ0 = 1234 ;

IMAS K=OxF;

Содержимое регистров, отображенных в карте памяти, - регистра управления системой, регистра управления состояниями ожидания, регистров таймера, последовательных портов и др., - становится доступным при считывании и записи соответствующих ячеек в памяти данных. Например, для очистки содержимого регистра управления состояниями ожидания, отображенного в карте памяти данных по адресу ОхЗFFЕ, используется следующий код команды:

АХО=0;

DM(Ox3FFE)=AXO;

В данном случае АХО используется для хранения константы 0, так как нет команды, с помощью которой можно было бы непосредственно записать значение данных в память используя при этом непосредственный адрес:

Все регистры, встречающиеся в процессорах семейства ADSP-2100, приводятся на рис. 12.1. В каждом процессоре семейства не обязательно имеются все из нижеуказанных регистров. Регистры сгруппированы функционально: регистры генераторов адреса данных, регистры программного автомата, вычислительных устройств (АЛУ, умножителя-накопителя, устройства сдвига), обмена данными между шинами, интерфейса памяти, таймера, последовательных портов, порта интерфейса хост-машины и интерфейса прямого доступа к памяти.

 

Рис. 12.1 Регистры процессоров семейства ADSP-2100

12.1.1 Регистры генераторов адреса данных

В каждом генераторе адреса данных имеется двенадцать регистров разрядностью 14 бит: четыре индексных (1) регистра, использующихся для хранения указателей адреса, четыре регистра модификации (М) для обновления значений этих указателей и четыре регистра длины (L), использующихся для организации циклических буферов. Генератор адреса данных 1 генерирует только адреса памяти данных и может осуществлять битреверсную адресацию. Генератор адреса данных 2 генерирует адреса как памяти данных, так и памяти программы, а также адреса, которые используются в командах условного ветвления (переходы и вызовы) и для доступа к данным. Например:

AXO=DM(IO,MO);

представляет собой команду косвенного считывания из ячейки в памяти данных, адрес которой указан в индексном регистре 10. По завершению считывания содержимое 10 обновляется с использованием для этого модифицирующего значения, содержащегося в МО. Команда:

PM(I4,M5)=MR1;

представляет собой команду косвенной записи в память программы по адресу, указанному в регистре 14 с последующей модификацией содержимого этого регистра значением из регистра М5. Команда:

JUMР (14);

может служить иллюстрацией команды косвенного перехода.

12.1.1.1 Всегда инициализируйте регистры длины L

В процессорах семейства ADSP-2100 предусмотрено два режима адресации для доступа к памяти данных: косвенная и прямая. Косвенная адресация выполняется за счет загрузки значения адреса в индексный регистр I и одновременного выбора одного из регистров модификации М.

Регистры длины L облегчают адресацию с циклическим возвратом по длине циклического буфера. Циклический буфер организуется только в том случае, когда в регистре L содержится любое значение, кроме нуля. Для линейной (нециклической) косвенной адресации регистр длины L, соответствующий определенному индексному регистру I, должен содержать значение ноль. Не стоит надеяться на то, что инициализация регистров L производится автоматически, или что ее можно проигнорировать; после перезапуска процессора в регистрах I, М, L содержатся случайные числа. Следует предусмотреть правильную инициализацию всех регистров L, соответствующих используемым регистрам I, в вашей программе.

12.1.2 Регистры программного автомата

Регистры программного автомата управляют подпрограммами, циклами и прерываниями. Они также содержат указание на состояния и выбранные режимы работы.

12.1.2.1 Прерывания

Регистр ICNTL управляет вложенными прерываниями и срабатыванием внешних прерываний (по фронту или по уровню). Регистр IFC позволяет принудительно устанавливать и сбрасывать прерывания при помощи программных средств. Регистр IMASK маскирует (блокирует) отдельные прерывания. Разрядность регистров IPC и IMASK отличается в разных процессорах, так как различные процессоры семейства ADSP-2100 поддерживают различное количество прерываний.

Процессоры ADSP-2171, ADSP-2181 и ADSP-21msp58/59 поддерживают глобальные команды разрешения (ENA INTS) и запрещения (DIS ENA) прерываний.

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

Команда разрешения прерываний позволяет снова обрабатывать все демаскированные прерывания.

12.1.2.2 Счетчики циклов

Значение счетчика для текущего цикла содержится в регистре CNTR. Использование стека счетчика позволяет вложить до четырех циклов счетчика. При попытке записи значения в регистр CNTR его текущее значение помещается в стек счетчика, а затем только в него записывается новое. Например, по команде:

CNTR=10;

текущее содержимое CNTR помещается в стек счетчика, после чего в этот регистр загружается значение 10.

Особо следует отметить команду OWRCNTR, посредством которой можно перезаписать значение счетчика для текущего цикла без помещения содержимого CNTR в стек счетчика. OWRCNTR не может быть считана (т.е. использована в качестве исходного регистра) и не может записываться в последней команде цикла DO UNTIL.

12.1.2.3 Биты состояния и режима

Регистр состояния стеков (SSTAT) содержит флаги заполнения стеков. В регистре арифметических состояний (ASTAT) хранятся флаги состояний вычислительных устройств. Биты управления различными возможными режимами и опциями хранятся в регистре состояния режима (MSTAT). Регистр MSTAT содержит четыре бита, управляющих выбором теневых регистров вычислительных устройств, бит режима постановки бит в обратном порядке для Генератора адреса данных 1 и биты режимов фиксации переполнения и насыщения для АЛУ. MSTAT имеет еще три дополнительных бита, указывающих на размещение результата умножителя, активизацию таймера и включение режима Go.

Для активизации или блокирования режимов процессора удобно использовать команду управления режимом (ENA, DIS).

12.1.2.4 Стеки

В программном автомате имеется четыре стека, с помощью которых осуществляется вложение циклов, подпрограмм и прерываний.

Стек счетчика программы (PC) имеет разрядность 14 бит и 16 ячеек в глубину. В нем содержатся адреса, по которым осуществляется возврат из подпрограмм и программ обслуживания прерываний, а также верхние адреса циклов. При вызове подпрограмм и обработке прерываний обращение и запись в стек счетчика программ производится автоматически. Кроме того, можно непосредственно поместить или извлечь данные из стека счетчика программ с помощью команд управления счетчиком программ: TOPPCSTACK=reg, reg=TOPPCSTACK..

Стек циклов разрядностью 18 бит имеет 14 бит для адресов конца цикла и 4 бита для хранения условий прекращения цикла. Глубина этого стека - 4 ячейки. Стек циклов автоматически заполняется при выполнении команды DO UNTIL и опустошается при выходе из цикла в случае вложенного цикла. Команда POP LOOP позволяет непосредственно извлечь данные из стека циклов.

В стек состояний, который автоматически заполняется во время обслуживания прерывания процессором, помещается информация о состоянии регистра маскирования прерываний (IMASK), регистров состояния режима (MSTAT) и арифметических состояний (ASTAT). Глубина и разрядность этого стека различна в разных процессорах семейства из-за того, что разные процессоры обслуживают разное число прерываний. При возвращении в главную программу после обслуживания прерывания (по команде RTI) содержимое стека состояний автоматически извлекается из него. Поместить и извлечь информацию из этого стека можно и непосредственно - при помощи команд PUSH STS и POP STS.

В стеке счетчика разрядностью 14 бит содержатся значения счетчика (CNTR) для вложенных циклов. При каждой записи в регистр CNTR в стек счетчика автоматически помещается текущее значение этого регистра. Команда POP CNTR позволяет непосредственно извлекать данные из стека счетчика.

12.1.3 Регистры вычислительных устройств

Регистры вычислительных устройств используются для хранения данных.

Для большинства операций АЛУ и умножителя-накопителя требуется двое входных данных. Входные значения Х содержатся в регистрах АХО, АХ1, МХО и МХ1, в то время как входные значения Y содержатся в регистрах AYO, AY1, MYO и MY1.

Результаты АЛУ помещаются в регистры AR и AF; содержимое регистра AF может снова подаваться на вход Y АЛУ, а содержимое регистра AR может использоваться в качестве входного значения Х во всех вычислительных устройствах. Аналогичным образом, результаты умножителя-накопителя помещаются в регистры MRO, MR1, MR2 и MF и могут далее подаваться обратно в качестве входных данных для других вычислений. Двух 16-разрядных регистров, MRO и MR1, и одного 8-разрядного регистра, MR2, достаточно для хранения результата разрядностью 40 бит, полученного при выполнении операции умножения с накоплением.

Входные значения устройства сдвига могут браться из АЛУ или умножителя-накопителя, а также из его собственных регистров результата или из регистра (SI), предназначенного для хранения входных значений устройства сдвига. Результат устройства сдвига помещается в регистры SRO и SR1. В регистре SB содержится значение блочного порядка, использующееся при операциях с блочной плавающей точкой. Величина сдвига для операций нормализации и денормализации содержится в регистре SE.

Регистры вычислительных устройств имеют теневые регистры, изображенные на рис. 12.1 позади основных. Теневые регистры полезны, когда требуется выполнить контекстное переключение в течение одного цикла. Выбор набора теневых или основных регистров осуществляется за счет соответствующей установки и сброса бита в регистре MSTAT (состояния режима) при помощи команд:

ENA SEC_REG, (выбор теневых регистров)

DIS SEC_REG; (выбор основных регистров)

12.1.4 Регистр обмена данными между шинами

Регистр РХ является 8-разрядным регистром, при помощи которого осуществляется пересылки данных между 16-разрядной шиной ДПД и 24-разрядной шиной ДПП. При передаче данных из памяти программы в любой 16-разрядный регистр и наоборот, в регистр РХ помещаются или гз него берутся 8 младших бит.

12.1.5 Регистры таймера

Значения периода таймера, счетчика и масштабного коэффициента содержатся в регистрах TPERIOD, TCOUNT и TSCALE, отображенных в карте памяти по адресам Ox3FFD, Ox3FFC и Ox3FFB, соответственно.

 

ÀРХИТЕКТУРА ТАЙМЕРА

Таймер состоит из двух 16-разрядных регистров. TCOUNT и TPERIOD, и одного 8-разрядного регистра TSCALE. Команда управления режима инициализирует и блокирует таймер за счет установки и сброса бита 5 в регистре состояния режима MSTAT. Описание команд управления режима см. в главе 15 "Набор команд". На рис. 6.1 показаны отображенные в карте памяти регистры таймера.

Рис. 6.1 Регистры таймера

TCOUNT является регистром счетчика. Содержимое этого регистра подвергается после активизации таймера декрементированию в каждом командном цикле. Когда счетчик становится равным нулю, генерируется прерывание. Затем

регистр TCOUNT перезагружается значением, хранящимся в регистре TPERIOD и счетчик снова начинает свою работу.

В регистре TSCALE содержится значение коэффициента масштабирования, которое всегда на единицу меньше, чем количество циклов между отрицательными приращениями (декрементами) значения в регистре TCOUNT. Например, когда значение в регистре TSCALE равно нулю, то значение в регистре счетчика декрементируется в каждом цикле. Когда TSCALE содержит 1, счетчик подвергается декрементированию каждые два цикла. На рис.6.2 приведена блок-схема таймера.

6.3 РАЗРЕШАЮЩАЯ СПОСОБНОСТЬ

Регистр TSCALE позволяет задавать более длинные временные интервалы между прерываниями, расширяя, таким образом, возможности 16-разрядного регистра TCOUNT. В таблице 6.1 показан диапазон временных интервалов таймера и зависимость между периодом следования прерываний и разрешающей способностью при максимальном значении регистра TPERIOD.

Таблица 6.1 Диапазон временных интервалов и разрешающая способность таймера

Время цикла = 80 нс

TSCALE

Период

следования

прерываний

Разрешающая способность

0

5,24 мс

 

 

 

 

80 нс

 

 

255

1,34с

 

 

 

 

20 мкс

 

 

 

6.4 РАБОТА ТАЙМЕРА

Таблица 6.2 показывает работу таймера при следующих состояниях регистров:

TPERIOD = 5, TSCALE = 1 и TCOUNT = 5. После активизации таймера (цикл n - 1) счетчик начинает свою работу. Так как TSCALE = ', значение в регистре счетчика TCOUNT декремснтируется каждый второй цикл. Перезагрузка регистра TCOUNT и продолжение работы счетчика происходит так, как это показано в таблице, во время выполнения подпрограммы обслуживания прерывания.

Таблица 6.2 Пример работы таймера

Цикл

TCOUNT

Действие

п-4

 

 

В TPERIOD загружается значение 5

n - 3

 

 

В TSCALE загружается значение 1

n - 2

 

 

В TCOUNT загружается значение 5

n - 1

5

Выполняется команда активизации таймера ENA TIMER

n

5

Так как TSCALE = 1, TCOUNT не декрементируется

n + 1

5

TCOUNT декрементируется

п+ 2

4

Нет декремента

n +3

4

TCOUNT декрементируется

n + 4

3

Нет декремента

n + 5

3

TCOUNT декрементируется

п + 6

2

Нет декремента

n + 7

2

TCOUNT декрементируется

n + 8

1

Нет декремента

n + 9

1

TCOUNT декрементируется

n + 10

0

Нет декремента

n + 11

0

TCOUNT становится равным 0, происходит прерывание,

 

 

 

 

TCOUNT загружается значением из TPERIOD

n + 12

5

Нет декремента

n + 13

5

TCOUNT декрементируется

п + 14

4

Нет декремента

n + 15

4

TCOUNT декрементируется и т.д.

Прерывание происходит через каждые (TPERIOD + 1) * (TSCALE + 1) циклов. Для установки другого временного интервала в последующих прерываниях р регистр TCOUNT из регистра TPERIOD загружается требуемое значение. Интервал первого прерывания также вычисляется по формуле: (TCOUNT + 1) * (TSCALE + I).

Запись нового значения в регистр TSCALE или TCOUNT оказывает эффект незамедлительно. При записи нового значения в регистр TPERIOD никаких изменений не происходит до перезагрузки регистра TCOUNT.

12.1.6 Регистры последовательных портов

В обоих последовательных портах, SPORTO и SPORT 1, имеются регистры приема (RX), передачи (ТХ) и управления. Последние отображены в карте памяти данных по адресам Ox3FEF - Ox3FFA. В SPORTO также имеются регистры управления многоканальными операциями. Регистр управления каждого последовательного порта содержит биты, управляющие кадровой синхронизацией, компандиро-ванием, длиной слова данных, а также, в SPORTO, приемом и передачей данных по нескольким каналам. Значение в регистре SCLKDIV определяет частоту внуг-ренне генерируемых тактовых синхроимпульсов дпя каждого последовательного порта; значение в регистре RFSDIV определяет частоту внутренне генерируемого сигнала кадровой синхронизации приема. Управление автобуферизацией последовательных портов осуществляется регистрами автобуферизации.

Программирование последовательного порта состоит в записи его регистров управления и, в зависимости от выбранных режимов, регистров SCLKDIV и RFSDIV этого порта. Ниже приводится пример программы для SPORTO, в которой задается 8-битовое компандирование по закону с ц-характеристикой, нормальный режим кадровой синхронизации и работа с внутренними тактовыми синхроимпульсами. В регистре RFSDIV установлено значение 255, что дает 256 циклов тактового генератора (SCLK) между подтверждениями RFS. В регистре SCLKDIV содержится значение 2, при котором частота тактовых синхроимпульсов составляет 1/6 частоты SCLKOUT.

S1=ОхВ 27;

DM(Ox3FF6)=SI;

(регистр управления SPORTO!

(SCLKDIV =2} (RFSDIV =255}

SI=2 ; DM(Ox3FF5)=SI;

SI=25 5;

DM (Ox3FF4)=SI;

 

5.2 ÎÁÙÅÅ ÎÏÈÑÀÍÈÅ ÏÎÑËÅÄÎÂÀÒÅËÜÍÎÃÎ ÏÎÐÒÀ

Àïïàðàòíî êàæäûé ïîñëåäîâàòåëüíûé ïîðò èìååò èíòåðôåéñ ñ ïÿòüþ âûâîäàìè.

Òàáëèöà 5.1 Îïèñàíèå âûâîäîâ ïîñëåäîâàòåëüíîãî ïîðòà

Íàçâàíèå âûâîäîâ Ôóíêöèÿ

SCLK Òàêòîâûé ñèãíàë

RFS Ïðèåì êàäðîâûõ ñèíõðîèìïóëüñîâ

TFS Ïåðåäà÷à êàäðîâûõ ñèíõðîèìïóëüñîâ

DR Ïðèåì äàííûõ

DT Ïåðåäà÷à äàííûõ

Ïîñëåäîâàòåëüíûé ïîðò ïðèíèìàåò ïîñëåäîâàòåëüíî ïåðåäàâàåìûå äàííûå íà âûâîäå DR è ïîñëåäîâàòåëüíî ïåðåäàåò äàííûå ÷åðåç âûâîä DT. Ðàáîòàÿ â äóïëåêñíîì ðåæèìå îí ìîæåò îäíîâðåìåííî ïðèíèìàòü è ïåðåäàâàòü äàííûå. Ýòè áèòû äàííûõ ñèíõðîííû ñ òàêòîâûìè ñèíõðîèìïóëüñàìè ãåíåðàòîðà SCLK,

5.2.2 Ðàáîòà ïîñëåäîâàòåëüíîãî ïîðòà

Ïîñëå çàïèñè äàííûõ â ðåãèñòð ÒÕ ïîñëåäîâàòåëüíîãî ïîðòà ýòîò ïîðò ãîòîâ äëÿ ïåðåäà÷è; ïîáèòîâàÿ ïåðåäà÷à äàííûõ èíèöèàëèçèðóåòñÿ ñèãíàëîì TFS. Ïîñëå íà÷àëà ïåðåäà÷è êàæäîå çíà÷åíèå, çàïèñàííîå â ðåãèñòð ÒÕ, ïîäàåòñÿ íà âíóòðåííèé ïåðåäàþùèé ðåãèñòð ñäâèãà, îòêóäà ïåðåäàåòñÿ ïîñëåäîâàòåëüíî ïî áèòàì, íà÷èíàÿ ñ ñàìîãî ñòàðøåãî áèòà. Êàæäûé áèò ñäâèãàåòñÿ ïî ïåðåäíåìó ôðîíòó òàêòîâîãî ñèíõðîèìïóëüñà.

Ïîñëå îêîí÷àíèÿ ïåðåäà÷è ïåðâîãî áèòà ñëîâà (ñàìîãî ñòàðøåãî áèòà) ïîñëåäîâàòåëüíûé ïîðò ãåíåðèðóåò ïðåðûâàíèå ïåðåäà÷è. Íåñìîòðÿ íà òî, ÷òî ïåðåäà÷à ïåðâîãî ñëîâà åùå ïðîäîëæàåòñÿ, ñòàíîâèòñÿ âîçìîæíîé çàïèñü íîâîãî ñëîâà äàííûõ â ðåãèñòð ÒÕ.

 ïðèíèìàþùåé ÷àñòè ïîñëåäîâàòåëüíîãî ïîðòà áèòû íàêàïëèâàþòñÿ â òîì ïîðÿäêå, êàê îíè ïîñòóïàþò âî âíóòðåííèé ðåãèñòð ïðèåìà. Ïî îêîí÷àíèè ïðèåìà îäíîãî öåëîãî ñëîâà îíî çàïèñûâàåòñÿ â ðåãèñòð RX, è ïîñëåäîâàòåëüíûé ïîðò ãåíåðèðóåò ïðåðûâàíèå ïðèåìà.

Ïðè ðàçðåøåííîì ðåæèìå àâòîáóôåðèçàöèè ïðåðûâàíèÿ ãåíåðèðóþòñÿ íåñêîëüêî îòëè÷íûì îáðàçîì (ñì. ðàçäåë "Àâòîáóôåðèçàöèÿ" äàííîé ãëàâû).

5.3 ÏÐÎÃÐÀÌÌÈÐÎÂÀÍÈÅ ÏÎÑËÅÄÎÂÀÒÅËÜÍÎÃÎ ÏÎÐÒÀ

Ñ òî÷êè çðåíèÿ ïðîãðàììèñòà, ïîñëåäîâàòåëüíûé ïîðò ìîæíî ïðåäñòàâèòü ñîñòîÿùèì èç äâóõ ñåêöèé. Ñåêöèÿ êîíôèãóðàöèè ïðåäñòàâëÿåò ñîáîé áëîê óïðàâëÿþùèõ ðåãèñòðîâ (îòðàæåííûõ â êàðòå ïàìÿòè äàííûõ), êîòîðûå äîëæíû áûòü èíèöèàëèçèðîâàíû ïðîãðàììîé ïåðåä òåì, êàê èñïîëüçîâàòü ïîñëåäîâàòåëüíûå ïîðòû. Ñåêöèþ äàííûõ îáðàçóåò ðåãèñòðîâûé ôàéë, êîòîðûé èñïîëüçóåòñÿ äëÿ ïåðåäà÷è è ïðèåìà çíà÷åíèé ÷åðåç ïîñëåäîâàòåëüíûé ïîðò.

5.3.1 Êîíôèãóðàöèÿ ïîñëåäîâàòåëüíîãî ïîðòà

Êîíôèãóðàöèÿ ïîñëåäîâàòåëüíîãî ïîðòà ôîðìèðóåòñÿ ïðè ïîìîùè óñòàíîâêè ñîîòâåòñòâóþùèõ áèòîâ â ðåãèñòðàõ êîíôèãóðàöèè. Ýòè ðåãèñòðû îòîáðàæåíû â êàðòå ïàìÿòè äàííûõ. Ðåãèñòðû êîíôèãóðàöèè SPORTO çàíèìàþò ÿ÷åéêè ñ Ox3FF3 no Ox3FFA; ðåãèñòðû êîíôèãóðàöèè SPORT 1 çàíèìàþò ÿ÷åéêè ñ Ox3FEF ïî Ox3FF2. Ñîäåðæèìîå ýòèõ ðåãèñòðîâ ïðåäñòàâëåíî â òàáë. 5.3 è â îáçîðå ðåãèñòðîâ â Ïðèëîæåíèè Å. Ïîñëåäñòâèÿ ðàçëè÷íûõ óñòàíîâîê ïîäðîáíî ðàçúÿñíÿþòñÿ â ñëåäóþùèõ äàëåå ðàçäåëàõ.

Òàáëèöà 5.3

Ðåãèñòðû êîíôèãóðàöèè ïîñëåäîâàòåëüíîãî ïîðòà

Àäðåñ Ñîäåðæèìîå

Ox3FFA

Ðàçðåøåíèå ìíîãîêàíàëüíîãî ïðèåìà ñëîâà ÷åðåç SPORTO

(31-16)

Ox3FF9

Ðàçðåøåíèå ìíîãîêàíàëüíîãî ïðèåìà ñëîâà ÷åðåç SPORTO

(15-0)

Ox3FF8

Ðàçðåøåíèå ìíîãîêàíàëüíîé ïåðåäà÷è ñëîâà ÷åðåç SPORTO

* (31-16)

Ox3FF7

Ðàçðåøåíèå ìíîãîêàíàëüíîé ïåðåäà÷è ñëîâà ÷åðåç SPORTO

* (15-0)

Ox3FF6

Óïðàâëÿþùèé ðåãèñòð SPORTO

 

 

 

 

Óïðàâëåíèå ìíîãîêàíàëüíûì ðåæèìîì ðàáîòû

 

 

 

 

Èñòî÷íèê òàêòîâûõ ñèíõðîèìïóëüñîâ

 

 

 

 

Óïðàâëåíèå êàäðîâîé ñèíõðîíèçàöèåé

 

 

 

 

Ðåæèì êîìïàíäèðîâàíèÿ

 

 

 

 

Äëèíà ïîñëåäîâàòåëüíî ïåðåäàâàåìîãî ñëîâà

 

 

 

Ðåãèñòðû êîíôèãóðàöèè SPORTO îïðåäåëåíû òîëüêî â ïðîöåññîðàõ ñ äâóìÿ ïîðòàìè.

òàáë. 5.3 (ïðîäîëæåíèå)

Ox3FF5

Êîýôôèöèåíò äåëåíèÿ òàêòîâûõ ñèíõðîèìïóëüñîâ SPORTO" (îïðåäå

 

 

ëÿåò ÷àñòîòó)

Ox3FF4

Êîýôôèöèåíò äåëåíèÿ êàäðîâûõ ñèíõðîèìïóëüñîâ ïðèåìà SPORTO

 

 

(îïðåäåëÿåò ÷àñòîòó)

Ox3FF3

Ðåãèñòð óïðàâëåíèÿ àâòîáóôåðèçàöèåé SPORTO

Ox3FF2

Ðåãèñòð óïðàâëåíèÿ SPORT 1

 

 

Çíà÷åíèå ôëàãà

 

 

Èñòî÷íèê òàêòîâûõ ñèíõðîèìïóëüñîâ

 

 

Óïðàâëåíèå êàäðîâîé ñèíõðîíèçàöèåé

 

 

Ðåæèì êîìïàíäèðîâàíèÿ

 

 

Äëèíà ïîñëåäîâàòåëüíî ïåðåäàâàåìîãî ñëîâà

Ox3FFl

Êîýôôèöèåíò äåëåíèÿ òàêòîâûõ ñèíõðîèìïóëüñîâ SPORT1 (îïðåäåëÿåò

 

 

÷àñòîòó)

Ox3FFO

Êîýôôèöèåíò äåëåíèÿ êàäðîâûõ ñèíõðîèìïóëüñîâ ïðèåìà SPORT1

 

 

(îïðåäåëÿåò ÷àñòîòó)

Ox3FEF

Ðåãèñòð óïðàâëåíèÿ àâòîáóôåðèçàöèåé SPORT1 (îòñóòñòâóåò â ïðîöåñ

 

 

ñîðå ADSP-21msp58/59)

 

Èìååòñÿ äâà ñïîñîáà èíèöèàëèçàöèè èëè èçìåíåíèÿ çíà÷åíèé â ðåãèñòðàõ êîíôèãóðàöèè ïîñëåäîâàòåëüíîãî ïîðòà: çàïèñü ñîäåðæèìîãî ðåãèñòðà ïî íåïîñðåäñòâåííîìó àäðåñó (òèï êîìàíäû 3) èëè çàïèñü íåïîñðåäñòâåííî ïîëó÷àåìûõ äàííûõ ïî êîñâåííîìó àäðåñó (òèï êîìàíäû 2). Ïðè ëþáîì èç âûøåíàçâàííûõ ñïîñîáîâ âàæíî çàäàòü êîíôèãóðàöèþ ïîñëåäîâàòåëüíîãî ïîðòà ïåðåä åãî ðàçáëîêèðîâàíèåì.

Ïðè ïåðâîì ñïîñîáå ïðîãðàììèðîâàíèÿ ðåãèñòðîâ êîíôèãóðàöèè íå òðåáóåòñÿ óñòàíàâëèâàòü ðåãèñòðû ãåíåðàòîðà àäðåñà äàííûõ, çàòî äëÿ âûïîëíåíèÿ çàïèñè òðåáóþòñÿ äâå êîìàíäû. Íàïðèìåð:

ÀÕÎ=Îõ6Â27;

DM(Ox3FF2)=AXO;

À Õ 0 = 0 ;

DM (Îõ 3 FF3 )=ÀÕÎ ;

(ñîäåðæèìîå ðåãèñòðà ÀÕÎ çàïèñûâàåòñÿ) (ïî àäðåñó Ox3FF2)

(ñîäåðæèìîå ðåãèñòðà ÀÕÎ çàïèñûâàåòñÿ {ïî àäðåñó Ox3FF3)

Ïðè âòîðîì ñïîñîáå èíäåêñíûå ðåãèñòðû (I) ãåíåðàòîðà àäðåñà äàííûõ äîëæíû ñîäåðæàòü àäðåñà çàïèñûâàåìûõ ðåãèñòðîâ êîíôèãóðàöèè â êàðòå ïàìÿòè. Ðåãèñòð ìîäèôèêàöèè (Ì), ñîäåðæèìîå êîòîðîãî îáíîâëÿåò ðåãèñòð I ïîñëå

çàïèñè, òàêæå äîëæåí ñîäåðæàòü òðåáóåìîå çíà÷åíèå. À ðåãèñòð äëèíû L ñ òåì æå íîìåðîì, ÷òî è èíäåêñíûé ðåãèñòð I, äîëæåí ñîäåðæàòü çíà÷åíèå íîëü, ÷òîáû öèêëè÷åñêèå áóôåðû íå áûëè àêòèâíû. Íàïðèìåð:

IO=Ox3FF2;

ÌÎ = 1 ;

L 0 = 0 ;

DM(IO,MO)=Ox6B27; (ïîñòîÿííàÿ Îõ6Â27 çàïèñûâàåòñÿ ïî) {àäðåñó, óêàçàííîìó â ðåãèñòðå 10; çàòåì) (óêàçàòåëü ìîäèôèöèðóåòñÿ íà âåëè÷è-) (íó, ñîäåðæàùóþñÿ â ÌÎ)

DM(IO,MO)=0; (àäðåñ Ox3FF3 óñòàíàâëèâàåòñÿ ðàâíûì 0}

Ïðè èñïîëüçîâàíèè âòîðîãî ìåòîäà äëÿ çàäàíèÿ êîíôèãóðàöèè ðåãèñòðîâ òðåáóåòñÿ òîëüêî îäèí öèêë, êîãäà ðåãèñòðû I, Ì è L èíèöèàëèçèðîâàíû. Îäíàêî ïðè èñïîëüçîâàíèè ýòîãî ìåòîäà âîçìîæíî ãîðàçäî áîëüøåå ÷èñëî îøèáîê, òàê êàê îñóùåñòâëÿåòñÿ êîñâåííàÿ çàïèñü âñåõ ðåãèñòðîâ. Ïåðåä çàïèñüþ ñëåäóåò óáåäèòüñÿ, ÷òî ðåãèñòð I ñîäåðæèò òðåáóåìîå çíà÷åíèå.

5.3.2 Ïðèåì è ïåðåäà÷à äàííûõ

 êàæäîì ïîñëåäîâàòåëüíîì ïîðòå èìåþòñÿ ðåãèñòðû ïðèåìà è ïåðåäà÷è. Ýòè ðåãèñòðû íå îòîáðàæåíû â êàðòå ïàìÿòè, íî ðàñïîçíàþòñÿ ìíåìîíèêîé àññåìáëåðà. Ðåãèñòðû ïåðåäà÷è íàçûâàþòñÿ ÒÕÎ è ÒÕ1 â ïîðòàõ SPORTO è SPORT 1 ñîîòâåòñòâåííî. Ðåãèñòðû ïðèåìà ñîîòâåòñòâåííî íàçûâàþòñÿ RXO äëÿ SPORTO è RX1 äëÿ SPORT1. Äîñòóï ê ýòèì ðåãèñòðàì îáåñïå÷èâàåòñÿ â ëþáîé ìîìåíò âî âðåìÿ âûïîëíåíèÿ ïðîãðàììû èñïîëüçóÿ äîñòóï ê ïàìÿòè äàííûõ ñ íåïîñðåäñòâåííûì àäðåñîì, çàãðóçêó ðåãèñòðîâ íåïîñðåäñòâåííî ïîëó÷àåìûìè äàííûìè èëè ïåðåäà÷ó ìåæäó ðåãèñòðàìè (êîìàíäû òèïà 3, 7 è 17). Íàïðèìåð, ñëåäóþùàÿ êîìàíäà ïîäãîòîâèò SPORT1 äëÿ ïîñëåäîâàòåëüíîé ïåðåäà÷è äàííûõ, ñ÷èòàÿ, ÷òî SPORT1 óæå ñêîíôèãóðèðîâàí è ðàçáëîêèðîâàí:

Ò Õ 1 = À Õ 0 ; (ñîäåðæèìîå ðåãèñòðà ÀÕÎ ïåðåäàåòñÿ â ïîðò ) (SPORT1}

Ñëåäóþùàÿ êîìàíäà îáåñïå÷èò äîñòóï ê ïîñëåäîâàòåëüíî ïåðåäàííîìó çíà÷åíèþ, ïðèíÿòîìó ÷åðåç SPORTO:

A Y 0 = R Õ 0 ; (ñîäåðæèìîå ðåãèñòðà ïðèåìà SPORTO ïåðåäàåò-) (ñÿ â ðåãèñòð AYO)

Òàê êàê ïîñëåäîâàòåëüíûå ïîðòû óïðàâëÿþòñÿ ïðåðûâàíèÿìè, òî ýò1 êîìàíäû, êàê ïðàâèëî, áóäóò âûïîëíÿòüñÿ â îòâåò íà ïðåðûâàíèå ïîñëåäîâà òåëüíîãî ïîðòà.

5.4 ÀÊÒÈÂÈÇÀÖÈß ÏÎÑËÅÄÎÂÀÒÅËÜÍÎÃÎ ÏÎÐÒÀ

Ïîñëåäîâàòåëüíûå ïîðòû àêòèâèçèðóþòñÿ áèòàìè â ðåãèñòðå óïðàâëåíþ ñèñòåìîé. Ýòîò ðåãèñòð îòîáðàæåí â êàðòå ïàìÿòè äàííûõ ïî àäðåñó Ox3FFF Êîãäà áèò 12 ðàâåí 1, ðàáîòà SPORTO ðàçðåøåíà, à êîãäå áèò 11 ðàâåí 1, ðàç ðåøåíà ðàáîòà SPORT 1. Îáà ýòèõ áèòà ñáðàñûâàþòñÿ ïðè ïåðåçàïóñêå ñèñòåìû áëîêèðóÿ ïðè ýòîì îáà ïîñëåäîâàòåëüíûõ ïîðòà.

Ðåãèñòð óïðàâëåíèÿ ñèñòåìîé Ox3FFF

Ðèñ. 5.2 Àêòèâèçàöèÿ ïîñëåäîâàòåëüíîãî ïîðòà óñòàíîâêîé áèò â ðåãèñòðå óïðàâëåíèÿ ñèñòåìîé

Áèò 10 ðåãèñòðà óïðàâëåíèÿ ñèñòåìîé îïðåäåëÿåò êîíôèãóðàöèþ SPORT1, çàäàâàÿ åãî ëèáî êàê ïîñëåäîâàòåëüíûé ïîðò, ëèáî êàê ïðåðûâàíèÿ è ôëàãè, ñîãëàñíî òàáë. 5.4. Åñëè áèò 10 óñòàíîâëåí ðàâíûì 1, SPORT1 ôóíêöèîíèðóåò êàê ïîñëåäîâàòåëüíûé ïîðò; åñëè îí óñòàíîâëåí ðàâíûì 0, ðàáî÷èìè ñòàíîâÿòñÿ àëüòåðíàòèâíûå ôóíêöèè (à áèò 11 èãíîðèðóåòñÿ). Ïðè ïåðåçàïóñêå, áèò 10 ðàâåí 1, òàêèì îáðàçîì SPORT1 ôóíêöèîíèðóåò êàê ïîñëåäîâàòåëüíûé ïîðò.

 

 

14.5 ÀÏÏÐÎÊÑÈÌÀÖÈß ÑÈÍÓÑÀ

Ñëåäóþùàÿ ôîðìóëà àïïðîêñèìèðóåò ñèíóñ âõîäíîé ïåðåìåííîé õ:

sin(x)=3,140625x + 0,02026367õ2 - 5,325196õ3 + 0,5446778õ4 + 1,800293õ5

Àïïðîêñèìàöèÿ âåðíà äëÿ ëþáîãî çíà÷åíèÿ õ îò 0° äî 90° (ïåðâûé êâàäðàíò). Îäíàêî, òàê êàê sin(-x)=-sin(x), a sin(x)=sin(180° - õ), ñèíóñ ëþáîãî óãëà ìîæåò áûòü âûâåäåí èç ñèíóñà óãëà ïåðâîãî êâàäðàíòà.

Íèæå ïîêàçàíà ïðîãðàììà, êîòîðàÿ âûïîëíÿåò àïïðîêñèìàöèþ ñèíóñà ñ òî÷íîñòüþ äî äâóõ ìëàäøèõ ðàçðÿäîâ. Ýòà ïðîãðàììà ðàáîòàåò ñî âõîäíûìè çíà÷åíèÿìè â ôîðìàòå 1.15. Êîýôôèöèåíòû, èíèöèàëèçèðîâàííûå â ïàìÿòè äàííûõ â ôîðìàòå 4.12, ïîäáèðàþòñÿ òàê, ÷òîáû îòðàæàòü âõîäíûå çíà÷åíèÿ íàñêîëüêî ïîçâîëÿåò ýòîò ôîðìàò.  äàííîé øêàëå 180° ðàâíÿåòñÿ ìàêñèìàëüíîìó ïîëîæèòåëüíîìó çíà÷åíèþ, Ox7FFF, a -180° ðàâíÿåòñÿ ìàêñèìàëüíîìó (ïî àáñîëþòíîé âåë7è÷èíå) îòðèöàòåëüíîìó çíà÷åíèþ, 0õ8000.

Ïðèâåäåííàÿ íèæå ïðîãðàììà ñïåðâà íàõîäèò óãîë ïåðâîãî êâàäðàíòà ýêâèâàëåíòíûé âõîäíîìó çíà÷åíèþ. Ñèíóñ ìîäèôèöèðîâàííîãî óãëà âû÷èñëÿåòñÿ ïðè óìíîæåíèè âîçðàñòàþùèõ ñòåïåíåé óãëà íà ñîîòâåòñòâóþùèå êîýôôèöèåíòû. Çàòåì ðåçóëüòàò ìîæåò èçìåíÿòüñÿ ïî çíàêó â ñîîòâåòñòâèè ñî çíàêîì ñèíóñà â êâàäðàíòå, êîòîðîìó ïåðâîíà÷àëüíî ïðèíàäëåæàëî ââåäåííîå çíà÷åíèå óãëà.

.MODULE S i n _ À ð ð ãî õ i m a t i î n ;

(Àïïðîêñèìàöèÿ ñèíóñà Y=Sin(x)

Ïàðàìåòðû âûçîâà

ÀÕÎ=õ â ìàñøòàáèðîâàííîì ôîðìàòå 1.15

Ì3= 1

L3=0

Âîçâðàùàåìûå çíà÷åíèÿ

AR=y â ôîðìàòå 1.15

.VAR/DM sin_coeff(5);

,INIT sin_coeff:0x3240,0õ005 3,OxAACC,Ox08B7, Ox 1CCE;

.ENTRY sin;

sin: l3=ësin_coeff•, (óêàçàòåëü íà áóôåð}

{ êîýôôèöèåíòîâ}

AYO=Ox4000;

AR=AXO, AF=AXO AND AYO; {ïðîâåðêà 2-ãî è 4-ãî)

(êâàäðàíòîâ)

IF NE AR=-AXO; {åñëè äà, òî îòðèöàíèå

âõîäíîãî çíà÷åíèÿ}

AYO=Ox7FFF;

AR=AR AND AYO; (óäàëèòü çíàêîâûé áèò)

MY1=AR;MF=AR*MY1(RND), MX 1=DM(I3,M3); {MF=x2}

MR=MX1*MY1(SS), MX1=DM(I3,M3);{MR=C1x}

CNTR=3;

DO approx UNTIL CE;

MR=MR+MX1*MF(SS);

approx: MF=AR*MF(RND), MX 1 =DM(I3 ,M3);

MR=MR+MX 1 *MF(SS);

S R = -\ S H I F T MR1 BY 3 (HI);

SR=SR OR LSHIFT MRO BY 3 (LO); {Ïðåîáðàçîâàíèå â ôîðìàò 1.15}

AR=PASS SR1 ;

IF LT AR=PASS AYO;

AF=PASS AXO;

IF LT AR=-AR;

RTS;

 

{íàñûùåíèå, åñëè)}{òðåáóåòñÿ}

{Îòðèöàíèå ðåçóëüòàòà, åñëè òðåáóåòñÿ)

.ENDMOD;

14.6 ÓÌÍÎÆÅÍÈÅ ÌÀÑÑÈÂÎÂ Ñ ÎÄÈÍÀÐÍÎÉ ÒÎ×ÍÎÑÒÜÞ

 äàííîì ðàçäåëå ïðåäñòàâëåíà ïðîãðàììà, êîòîðàÿ ïåðåìíîæàåò äâà âõîäíûõ ìàññèâà: Õ ðàçìåðíîñòüþ RxS (R ñòðîê, S ñòîëáöîâ), õðàíÿùèéñÿ â ïàìÿòè äàííûõ, è Y ðàçðÿäíîñòüþ SxT (S ñòðîê, Ò ñòîëáöîâ), õðàíÿùèéñÿ â ïàìÿòè ïðîãðàììû. Âûõîäíîé ìàññèâ Z ðàçðÿäíîñòüþ RxT (R ñòðîê, Ò ñòîëáöîâ) çàïèñûâàåòñÿ â ïàìÿòü äàííûõ.

Äëÿ äàííîé ïðîãðàììû òðåáóåòñÿ èíèöèàëèçèðîâàòü íåñêîëüêî ðåãèñòðîâ, ÷òî ïîêàçàíî â ðàçäåëå "Ïàðàìåòðû âûçîâà" â íà÷àëüíîì êîììåíòàðèè. Ðåãèñòð SE äîëæåí ñîäåðæàòü çíà÷åíèå, íåîáõîäèìîå äëÿ ñäâèãà ðåçóëüòàòà êàæäîãî óìíîæåíèÿ â òðåáóåìûé ôîðìàò. Íàïðèìåð, ÷òîáû ïîëó÷èòü ìàññèâ çíà÷åíèé â ôîðìàòå 1.31 â ðåçóëüòàòå ïåðåìíîæåíèÿ äâóõ ìàññèâîâ â ôîðìàòå 1.15, SE äîëæåí ñîäåðæàòü çíà÷åíèå íîëü.

.MODULE matmul;

{Óìíîæåíèå ìàññèâîâ ñ îäèíàðíîé òî÷íîñòüþ

s

z(i,j)= S [X(i,k)xY(k,j)] i=0...R; j=o...t

k=0

X - ìàññèâ RxS

Y - ìàññèâ SxT Z - ìàññèâ RxT

Ïàðàìåòðû âûçîâà

11-> áóôåð Z â ïàìÿòè äàííûõ L1=0

12-> X, õðàíèòñÿ ïî ðÿäàì â ïàìÿòè äàííûõ L2=0

16-> Y, õðàíèòñÿ ïî ðÿäàì â ïàìÿòè ïðîãðàììû L6=0

Ì0=1 M1=S

Ì4=1 Ì5=Ò

LO, L4, L5=0

SE=MacuiTa6Hpyioiuee çíà÷åíèå

CNTR=R

Âîçâðàùàåìûå çíà÷åíèÿ

Áóôåð Z, çàïîëíåííûé ñòðîêàìè

Èçìåíÿåìûå ðåãèñòðû

I0, I1, I2, I4, I5, MR, MX 0, MYO, SR

Âðåìÿ âû÷èñëåíèÿ

((S +8)xT+4)xR+2+2 öèêëà

.ENTRY spmm;

spmm: DO row_loop UNTIL CE;

I5=I6; (I5 - íà÷àëî Y) CNTR=M5;

DO column_loop UNTIL CE;

I0=I2; {10 óêàçûâàåò íà}

(òåêóùóþ ñòðîêó X)

I4=I5; (14 óêàçûâàåò íà}

(òåêóùèé ñòîëáåö Y)

CNTR=M1;

MR=0, MXO=DM(IO,MO), MYO=PM(I4,M5);

{ïîëó÷åíèå ïåðâûõäàííûõ}

Do element_loop UNTIL CE;

clementJoop: MR=MR+MXO*MYO(SS), MXO=DM(IO,MO), MYO=PM(I4,M4);

SR=ASHIFT MRl(HI), MYO=DM(I5,M4); (îáíîâëåíèå 15)

SR=SR OR SHIFT MRO(LO); (îêîí÷àíèå ñäâèãà)

columnJoop: DM(I1,MO)=SR;

row_loop: MODIFY(I2,M1);

RTS;

.ENDMOD;

.

1