Глинченко А.С. Принципы организации и программирования сигнальных процессоров ADSP-21xx (2000) (1264223), страница 5
Текст из файла (страница 5)
Выходное значениеинкрементора выводится на шину PMA и загружается обратно в счетчиккоманд для начала следующего цикла.Стек счетчика команд используется в качестве источника адресаследующей инструкции при возврате из подпрограммы или процедурыобработки прерываний. Значение с вершины стека используется также вкачестве следующего адреса при возврате к началу цикла DO UNTIL.Регистр команд определяет следующий адрес в командах безусловногоперехода.
Адрес перехода разрядностью 14 бит содержится непосредственнов командном слове, например: JUMP <addr>; CALL<addr>;При обработке прерывания адрес следующей команды определяетсяконтроллером прерываний. Он соответствует ячейке памяти программ,содержащей вектор принятого прерывания.PC загружается через мультиплексор следующего адреса в концекаждого цикла процессора.Еще одним возможнымисточником адреса следующей командыявляются индексные регистры (I4–I7) генератора адреса данных DAG2,используемые при безусловном косвенном переходе по адресу,содержащемуся в индексном регистре, например: JUMP (I4); CALL (I7);.В этом случае PC загружается из DAG2 по шине PMA.26Шина DMDСТЕКСЧЕТЧИКАЦИКЛАMUXИз регистракомандКод управленияАдрес JUMP/CALLПоле функцийАдреспоследнейкоманды вциклеи условиеПрекращенияСчетчикциклаCNTRCEOUTСтекцикловогокомпаратораСтекстатусаЛогикаВыбораЦикловыйкомпараторMUXРегистрыстатусаАрифметическийстатус (из ALU)ПрерыванияКонтролерПрерыванияСтекPCСчетчиккомандPCMUXотвыводаFIИнкрементМультиплексор следующего адресаШина PMAРис.
6. Блок-схема программного автомата27Выбористочникаследующегоадреса4.3. СЧЕТЧИК КОМАНД И СТЕК СЧЕТЧИКА КОМАНДСчетчик команд PC представляет 14-разрядный регистр, всегдасодержащий адрес выполняемой в данный момент инструкции. Выход егоподается на 14-разрядный инкрементор, добавляющий единицу к текущемузначению PC. С PC связан стек (PC STACK) глубиной 16 14-битовых слов, вкоторый автоматически помещается и извлекается содержимое PC привыполнении команд CALL, DO UNTIL и обработке прерываний(инкрементированное в первых двух случаях и неинкрементированное втретьем случае). Возможно также непосредственное извлечение данных изстека посредством команды РОР: POP PC;.Для непосредственного чтения/записи значения вершины стека счетчикакоманд предусмотрена специальная команда, использующая псевдорегистрТОРРСSТАСК, например: reg = ТОРРСSТАСК; ТОРРСSТАСК = reg;, где reg− любые программно-доступные регистры процессора.4.4.
СЧЕТЧИК ЦИКЛОВ И СТЕК СЧЕТЧИКА ЦИКЛОВСчетчик циклов (CNTR) представляет собой 14-битовый регистр свозможностью автоматического пост-декрементирования, управляющийпоследовательностью циклов программы, которые выполняются заданноечисло раз. Значения счетчика являются беззнаковыми числами разрядностью14 бит.Перед входом в цикл в счетчик CNTR с 14 младших бит шины DMDзагружается код требуемого числа повторений, например: CNTR = 10; Вконце каждого цикла DO UNTIL проверяется состояние счетчика СЕ(счетчик пуст или число повторений истекло) и уменьшается на единицу егосодержимое. При выполнении условия CE цикл завершается.Счетчик также проверяется и автоматически декрементируетсяинструкцией условного перехода, использующей условие CE или NOT CE(счетчик не пуст), например: IF CE JUMP <addr>.
Счетчик не уменьшается наединицу инструкцией возврата по условию CE и арифметическойинструкцией, выполняемой по условию CE.Содержимое счетчика CNTR в любое время можно непосредственносчитать на шину DMD. При этом два старших бита шины DMD заполняютсянулями.Стек счетчика циклов (СOUNT STACK) может хранить до 4-х14-битных значений счетчика, позволяя создавать вложенные циклы. В немвременно сохраняется значение счетчика внешнего цикла при выполнениивнутреннего. При загрузке нового значения в счетчик с шины DMD еготекущее значение автоматически помещается в стек. Старое значение, еслионо было помещено в стек, автоматически восстанавливается из стека припроверке состояния CE, если условие завершения цикла истинно.
Дляпреждевременного выхода из цикла счетчик цикла можно восстановить изстека вручную.28Значение счетчика не заносится в стек при записи в него новогозначения в двух случаях: когда счетчик пуст и когда используетсяпсевдорегистр OWRCNTR. Запись значения в OWRCNTR переписываетсодержимое регистра CNTR без сохранения его предыдущего содержимого.4.5.
КОМПАРАТОР ЦИКЛОВ И СТЕК ЦИКЛОВКоманда DO UNTIL инициализирует цикл с нулевыми потерямиресурсов (циклов процессора), используя компаратор (сравнивающееустройство) циклов и стек циклов программного автомата.При выполнении команды DO UNTIL 14-разрядный адрес последнейкоманды и одно из 16 возможных условий завершения цикла разрядностью 4бита (и то, и другое содержится в команде DO UNTIL, например: DO loopUNTIL CE;) помещаются в стек циклов (LOOP STACK), содержащий 4слова по 18 бит. Одновременно с этим выходное значение инкременторасчетчика команд помещается в стек счетчика команд.
Так как команда DOUNTIL находится непосредственно перед первой командой цикла, то в стекесчетчика команд содержится адрес первой команды цикла, а в стеке циклов адрес последней команды цикла и условие его завершения. В процессевыполнения операций внутри цикла компаратор сравнивает адрес каждойкоманды с адресом последней команды цикла в вершине стека циклов. Додостижения этого адреса программа выполняется линейно. Когда два этиадреса становятся равными, компаратор циклов уведомляет устройствовыбора источника следующего адреса о том, что в следующем цикле будетвыполнена последняя команда цикла.
Следующий адрес будет выбрансхемой выбора адреса следующей команды на основе условия завершенияцикла, хранящегося в вершине стека циклов. Если это условие невыполняется, то выбирается верхний адрес стека счетчика команд, т.е. перваякоманда цикла. В случае выполнения условия завершения цикла выбираетсяинкрементор счетчика команд и выполняется команда, непосредственноследующая за последней командой цикла, т.е. происходит выход из цикла.Затем извлекаются (выталкиваются) данные из стека циклов, стека счетчикакоманд и стека счетчика циклов (если он используется).Добавочный цикл процессора при зацикливании программы обусловленисполнением самой инструкции DO UNTIL, а при использовании условия CE– также начальной загрузкой счетчика циклов.4.6.
КОНТРОЛЛЕР ПРЕРЫВАНИЙПри получении сигнала прерывания контроллер прерыванийпрограммного автомата передает управление программой команде,расположенной по адресу соответствующего вектора прерывания.Прерывания и адреса их векторов для процессора АDSP-2181 приведены втабл. 1.29Таблица 1Источник прерыванияАдрес вектора прерыванияЗапуск программы после RESET (или 0х0000 (высший приоритет)после выхода из режима пониженноймощности, когда PUCR=1)Понижение потребляемой мощности Ох002С(не маскируется)IRQ 20x0004IRQL1 (по уровню)0x0008IRQL0 (по уровню)0x000CПередача SPORT00x0010Прием SPORT00x0014IRQE (по фронту)0x0018Прерывание прямого побайтового 0х001Сдоступа к памятиПередача SPORT1/IRQ10x0020Прием SPORT1/IRQ00x0024Таймер0x0028 (низший приоритет)Вектора прерываний хранятся в памяти программ с интервалом в четыреячейки.
Это позволяет размещать короткие подпрограммы обслуживанияпрерываний непосредственно “на месте” без дополнительного перехода..Если четырех команд недостаточно для обработки прерывания, управлениепередается обслуживающей подпрограмме командой перехода JUMP,размещаемой по адресу вектора прерывания.После обслуживания прерывания управление возвращается главнойпрограмме при помощи безусловной или условной команды RTI.Прерывания также могут быть сгенерированы программно с помощьюрегистра IFC.Последовательность обработки прерыванийПри получении процессором запроса на прерывание оно фиксируется навремя, которое необходимо ему, чтобы закончить выполнение текущейкоманды.
Затем контроллер прерываний сравнивает запрос на прерывание срегистром маски прерывания IMASK.В случае немаскируемого прерывания программный автомат помещаеттекущее значение счетчика команд PC (который содержит адрес следующейкоманды) в стек PC. В стек статуса помещаются регистры ASTAT, MSTAT иIMASK, в том порядке, как они перечислены. После помещения IMASK в30стек статуса он автоматически загружается значением, которое определяет,возможно ли вложение прерываний (в соответствии со значением флагаразрешения вложения прерываний в ICNTL). После этого процессорвыполняет пустой цикл NOP, в то время как загружается инструкция,расположенная по адресу соответствующего вектора прерывания. Послевозврата из процедуры обработки прерывания значения из стеков PC истатуса выталкиваются и исполнение основной программы продолжается соследующей инструкции.Конфигурирование прерыванийДля задания конфигурации прерываний используются следующиерегистры:маскирования прерываний IMASK;управления прерываниями ICNTL;установки/сброса прерываний IFC.Каждый бит 10-разрядного регистра IMASK (для процессора ADSP2181) разрешает (1) или запрещает (0) обслуживание определенногопрерывания.
Битам с номерами 9, 8,…., 0 соответствуют маскируемыепрерывания согласно табл.1: IRQ2, IRQL1,…., таймер в порядке убывания ихприоритетов. После перезапуска процессора регистр IMASK обнуляется.Биты 0, 1, 2 5-разрядногорегистра ICNTL конфигурируютсоответствующие им прерывания IRQ0, IRQ1, IRQ2 по чувствительности ихк фронту (1) или к уровню (0) внешних сигналов запроса прерывания.При обработке сконфигурированных по фронту прерываний IRQx запросна прерывание фиксируется каждый раз, когда уровень сигнала на выводе, накоторый приходят прерывания, изменяется от высокого к низкому. Фиксациязапроса сохраняется до окончания обслуживания прерывания, а затем онавтоматически сбрасывается. Задержанные прерывания по фронту могуттакже сбрасываться программными средствами путем установкисоответствующего бита сброса в регистре IFC.Сконфигурированные по уровню прерывания должны оставатьсяподтвержденными до окончания обслуживания прерывания.