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

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

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

Управление программой 3

8 ячейками памяти. Адреса в таблице представляют собой смещения относительно базового адреса. Для таблицы векторов прерываний во внутренней памяти базовый адрес – 0x0002 0000; для таблицы векторов прерываний во внешней памяти базовый адрес – 0x0040 0000. В третьем столбце табл. 3.3 приведен список мнемонических имен прерываний. Ассемблер не требует эти имена, они предусмотрены для удобства.

Таблица векторов прерываний может размещаться во внутренней памяти по адресу 0x0002 0000 (начало блока 0) или во внешней памяти по адресу 0x0040 0000. Если внутренняя память ADSP 2106x загружается из внешнего источника, то таблица векторов прерываний будет расположена во внутренней памяти. Однако если ADSP 2106x не загружается (используется память вне кристалла), то таблица векторов должна размещаться во внешней памяти. Подробнее о выборе режима начальной загрузки см. раздел «Начальная загрузка» в главе

Проектирование системы.

Номер

Адрес

Имя

Функция

бита

вектора* преры

 

IRPTL/

 

вания**

 

IMASK

 

 

 

0

0x00

 

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

1

0x04

RSTI

Сброс (только для чтения, немаскируемое)

 

 

 

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

2

0x08

 

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

3

0x0C

SOVFI

Переполнение стека состояния или стеков цикла,

 

 

 

или полный стек счетчика команд

40x10 TMZHI Таймер=0 (высокий приоритет)

50x14 VIRPTI Векторное прерывание

6

0x18

IRQ2I

 

выставлен

7

0x1C

IRQ1I

 

выставлен

8

0x20

IRQ0I

 

выставлен

9

0x24

 

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

10

0x28

SPR0I

0

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

11

0x2C

SPR1I

1

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

 

 

 

(или буфер 0 линк портов)

12

0x30

SPT0I

2

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

13

0x34

SPT1I

3

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

 

 

 

(или буфер 1 линк портов)

14

0x38

LP2I

4

канал DMA – буфер 2 линк портов

15

0x3C

LP3I

5

канал DMA – буфер 3 линк портов

16

0x40

EP0I

6

канал DMA – буфер 0 внешнего порта

 

 

 

(или буфер 4 линк портов)

91

3 Управление программой

Номер

Адрес

Имя

Функция

бита

вектора* преры

 

IRPTL/

 

вания**

 

IMASK

 

 

 

17

0x44

EP1I

7 канал DMA – буфер 1 внешнего порта

 

 

 

(или буфер 5 линк портов)

18

0x48

EP2I

8 канал DMA – буфер 2 внешнего порта

19

0x4C

EP3I

9 канал DMA – буфер 3 внешнего порта

20

0x50

LSRQ

Запрос обслуживания линк порта

21

0x54

CB7I

Переполнение циклического буфера 7

22

0x58

CB15I

Переполнение циклического буфера 15

23

0x5C

TMZLI

Таймер=0 (низкий приоритет)

24

0x60

FIXI

Переполнение при операции с фиксированной точкой

25

0x64

FLTOI

Исключение при переполнении результата с плавающей

 

 

 

точкой

26

0x68

FLTUI

Исключение потери значащих разрядов результата с

 

 

 

плавающей точкой

27

0x6C

FLTII

Исключение ошибки при операции с плавающей точкой

28

0x70

SFT0I

0 прерывание программы пользователя

29

0x74

SFT1I

1 прерывание программы пользователя

30

0x78

SFT2I

2 прерывание программы пользователя

31

0x7C

SFT3I

3 прерывание программы пользователя

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

Таблица 3.3. Вектора прерываний и их приоритет

* Смещение относительно базового адреса: 0x0002 0000 для таблицы векторов прерываний во внутренней памяти, 0x0040 0000 для таблицы векторов прерываний во внешней памяти.

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

Если загрузка выполняется из внешней EPROM или хост процессора, то бит 16 в регистре IMASK (прерывание EP0I для 6 го канала DMA внешнего порта) будет автоматически установлен в 1 сразу после сброса, – это разрешает прерывание типа DMA выполнен для загрузки по шестому каналу. В регистр IRPTL после сброса записываются нули.

Бит IIVT в регистре управления SYSCON может использоваться для отмены зависимости расположения таблицы векторов прерываний от режима начальной загрузки. Если ADSP 2106x не загружается (режим «нет начальной загрузки»), то установка бита IIVT в 1 задает внутреннее расположение таблицы векторов прерываний, если IIVT=0, то задается внешнее расположение таблицы векторов прерываний. Если ADSP 2106x загружается из внешнего источника (любой режим, кроме режима «нет начальной загрузки»), то установка IIVT не имеет никакого влияния.

92

Управление программой 3

3.6.3. Регистр фиксирования прерывания (IRPTL)

Регистр фиксирования прерывания (IRPTL) – это 32 разрядный регистр, который фиксирует прерывание. Он указывает на все прерывания, которые были обработаны, а также на те, обработка которых была отложена. Поскольку этот регистр доступен для чтения и записи, любое прерывание (за исключением сброса) может быть установлено или сброшено программно. Не производите запись в бит сброса (бит 1) регистра IRPTL, потому что это переведет процессор в запрещенное состояние.

Когда генерируется прерывание, устанавливается соответствующий бит в IRPTL. Во время выполнения программы обработки прерывания этот бит удерживается нулевым – ADSP 2106x обнуляет бит в каждом цикле, предотвращая фиксирование того же самого прерывания, в то время как программа его обработки уже выполняется.

Однако специальный метод дает возможность многократного использования прерывания во время его обработки. Этот метод обеспечивается модификатором очистки прерывания (CI) в команде JUMP. См. Раздел «Очистка текущего прерывания для повторного использования».

Регистр IRPTL очищается при сбросе процессора. (Замечание: биты в регистре IMASK точно соответствуют битам регистра IRPTL).

3.6.4. Приоритет прерываний

Биты прерываний в регистре IRPTL упорядочены по приоритету. Приоритеты прерываний расположены от 0 (высший) к 31 (низший). Приоритет прерывания определяет, какое из прерываний обрабатывается первым, когда их поступает больше одного за цикл. Он также определяет, какие прерывания являются вложенными, когда вложенность допускается (см. «Вложенность прерывания и IMASKP»).

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

При уменьшении содержимого счетчика таймера до нуля генерируются прерывания 4 и 14 (см. табл. 3.3). Эти прерывания имеют различный приоритет.

93

3 Управление программой

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

3.6.5. Управление прерываниями и их маскирование

Генерация всех прерываний, кроме сброса, может разрешаться или запрещаться битом 12 в регистре MODE1 – битом глобального разрешения прерываний IRPTEN. При сбросе этот бит обнуляется, поэтому для разрешения генерации прерываний необходимо устанавливать этот бит.

3.6.5.1. Регистр маскирования прерываний (IMASK)

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

Маскирование прерываний задается битами в регистре IMASK. Биты в IMASK точно соответствуют битам регистра IRPTL. Например, бит 10 в IMASK маскирует или разрешает то же самое прерывание, которое фиксируется битом 10 в IRPTL.

Если бит в IMASK установлен в 1, то прерывание не маскировано. Если бит установлен в 0, прерывание маскировано.

После сброса процессора все прерывания, кроме прерывания сброса и прерывания EP0I для 6 канала DMA внешнего порта (бит 16 в регистре IMASK), маскированы. Прерывание сброса всегда немаскировано. Прерывание EP0I автоматически демаскируется после сброса, если ADSP 2106x загружается из EPROM или из хост процессора.

3.6.5.2. Вложенность прерываний и IMASKP

Процессор ADSP 2106x поддерживает вложение одной программы обработки прерывания в другую, то есть выполнение программы обработки может быть приостановлено прерыванием с более высоким приоритетом. Этот режим устанавливается битом режима вложенности (NESTM) в регистре MODE1.

Когда бит NESTM равен 0, программа обработки прерывания не может быть прервана. Любое поступившее прерывание будет обработано только после завершения текущей программы обработки прерывания. Когда NESTM равен 1, немаскированные прерывания с более высоким приоритетом могут прерывать программы обработки прерываний с более низким приоритетом. Бит NESTM

94

Управление программой 3

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

Если вложенность разрешена и сразу после прерывания с более низким приоритетом генерируется прерывание с более высоким приоритетом, то начало выполнения программы обработки прерывания с более высоким приоритетом задерживается на один цикл. Это позволяет выполнить первую команду программы обработки прерывания с более низким приоритетом прежде, чем она будет прервана.

В режиме вложенности для создания временной маски прерывания для каждого уровня вложенности процессор ADSP 2106x использует указатель маски прерывания IMASKP; значение регистра IMASK не изменяется. Процессор изменяет IMASKP каждый раз, когда прерывание с более высоким приоритетом прерывает выполнение программы обработки прерывания с более низким приоритетом.

Биты в IMASKP соответствуют тем же прерываниям и упорядочены по приоритету, так же, как в IRPTL и IMASK. Когда происходит прерывание, его бит устанавливается в IMASKP. Если вложенность разрешена, то генерируется новая временная маска прерывания, маскирующая все прерывания равного или более низкого приоритета по отношению к прерыванию высшего приоритета, бит которого установлен в IMASKP. После возврата из программы обработки прерывания (RTI) бит прерывания высшего приоритета, установленный в IMASKP, обнуляется, и снова генерируется новая временная маска прерывания, маскирующая все прерывания равного или более низкого приоритета по отношению к прерыванию высшего приоритета, бит которого установлен в IMASKP. Установленный в IMASKP бит прерывания, которое имеет высший приоритет, всегда соответствует приоритету обрабатываемого в данный момент прерывания.

Если вложенность запрещена, то процессор маскирует все прерывания и IMASKP не используется, хотя IMASKP все равно обновляется для создания временной маски прерывания.

Когда IRPTL модифицируется, процессор не переходит сразу же к обработке сгенерированного прерывания, если уже выполняется программа обработки другого прерывания. Он ждет выполнения команды RTI для того, чтобы войти в программу обработки прерывания снова.

3.6.6. Сохранение и восстановление стека состояния

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

95

3 Управление программой

режима для прерванной программы. Три внешних прерывания (),

прерывание по таймеру и векторное прерывание VIRPT вызывают автоматическое помещение содержимого регистров ASTAT и MODE1 в стек состояния, который состоит из пяти ячеек. Эти данные автоматически извлекаются из стека состояния после выполнения команды возврата из прерывания RTI (и команды JUMP (CI), описанной далее в разделе «Очистка текущего прерывания для повторного использования»).

Только прерывания , прерывания таймера и VIRPT вызывают помещение содержимого регистров в стек состояния. Для всех других прерываний требуется явное сохранение в памяти и восстановление из нее соответствующих регистров.

При помещении содержимого регистров ASTAT и MODE1 в стек установки битов состояния и управления сохраняются. Т. о., если в программе обработки прерывания эти биты изменятся, то после возврата из прерывания установки автоматически восстановятся.

Заметим, что на биты FLAG3&0 в ASTAT не влияют помещение и извлечение из стека состояния; значения этих битов переносятся из основной программы в программу обработки и из программы обработки обратно в основную программу.

Вершина стека состояния содержит текущие значения ASTAT и MODE1. При считывании и записи этих регистров указатель стека не перемещается. Указатель стека перемещается при выполнении явных команд POP и PUSH.

3.6.7. Программные прерывания

Процессор ADSP 2106x поддерживает программные прерывания, которые эмулируют выполнение прерывания, но активизируются программой, а не аппаратурой. При установке одного из битов 28 31 в регистре IRPTL либо по команде BIT SET, либо путем записи в IRPTL генерируется программное прерывание. Процессор переходит к соответствующей программе обработки прерывания, если это прерывание не маскировано и все прерывания разрешены.

3.6.8. Очистка текущего прерывания для повторного использования

Обычно процессор ADSP 2106x игнорирует и не фиксирует прерывание, которое происходит повторно, когда программа его обработки уже выполняется. Когда прерывание происходит в первый раз, в IRPTL устанавливается

96

Управление программой 3

соответствующий бит. Во время выполнения программы обработки этот бит сохраняется нулевым – ADSP 2106x обнуляет бит в каждом цикле, предотвращая фиксацию прерывания, программа обработки которого уже выполняется.

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

При выполнении команды JUMP (CI) программа обработки прерывания сводится к стандартной подпрограмме, при этом обнуляется соответствующий бит в регистре фиксации прерывания IRPTL и регистре указателя маски прерывания IMASKP, и извлекаются данные из стека состояния. Затем процессор останавливает автоматическое обнуление бита фиксации прерывания в IRPTL в каждом цикле, что позволяет снова сгенерировать то же прерывание.

При возвращении из подпрограммы, в которую была сведена программа обработки прерывания в результате выполнения команды JUMP (CI), команда RTS должна использоваться с модификатором (LR) (в случае, если прерывание генерируется в течение двух последних команд цикла). Команда RTS (LR) описана в разделе 3.5.1.1 «Циклы», «общие ограничения».

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

Instr1;

{вход в программу обработки

 

прерывания из основной программы}

JUMP (PC, 3) (DB, CI);

{очистка состояния прерывания}

Instr3;

 

Instr4;

 

Instr5;

 

RTS (LR);

{используйте модификатор LR в команде

 

возврата из подпрограммы}

Обратите внимание, что после команды JUMP (PC, 3) (DB, CI) фактически продолжается линейное выполнение программы, переход происходит к ячейке PC+3 (Instr5). Две следующие команды (Instr3, Instr4) выполняются, так как

97

3 Управление программой

переход задержанный (DB). Эта команда JUMP является только примером – при выполнении JUMP (CI) переход может осуществляться к любой ячейке.

3.6.9. Синхронизация и режим срабатывания внешних прерываний

Каждое из трех внешних прерываний может срабатывать как по уровню (прерывание по уровню), так и по фронту (прерывание по фронту) сигнала.

ADSP 2106x фиксирует запрос на прерывание один раз в каждом цикле CLKIN. Запрос на прерывание по уровню рассматривается как истинный, если при опросе уровень сигнала активный (низкий уровень). Сигнал запроса прерывания по уровню должен стать неактивным (высокий уровень) до возвращения процессора из программы обработки прерывания. Если сигнал запроса прерывания по уровню остается активным при опросе процессором входа прерывания, то процессор обрабатывает его как новый запрос, повторяя ту же самую программу обработки прерывания без возвращения к основной программе (предполагается, что нет активных прерываний с более высоким приоритетом).

Запрос на прерывание по фронту рассматривается как истинный, когда уровень сигнала на выводе, на который приходит запрос, изменяется от высокого уровня в низкий. Сигнал запроса прерывания может оставаться в таком состоянии неопределенно долго. Для выдачи запроса на обработку другого прерывания сигнал должен снова переключиться из высокого уровня в низкий.

Для обработки запроса прерывания по фронту требуется меньше внешних устройств, чем для прерывания по уровню, так как нет необходимости сбрасывать сигнал запроса. Однако, несколько устройств, генерирующих прерывания, могут использовать одну линию запроса прерывания по уровню, объединяя сигналы запроса по схеме «ИЛИ», что облегчает расширение системы.

Режим срабатывания прерывания задается следующими битами в регистре MODE2.

Бит MODE2

Имя

Описание

0

IRQ0E

1= по фронту; 0= по уровню

1

IRQ1E

1= по фронту; 0= по уровню

2

IRQ2E

1= по фронту; 0= по уровню

3.6.9.1. Внешние асинхронные прерывания

Процессор принимает прерывания, которые являются асинхронными по отношению к тактовой частоте ADSP 2106x, то есть сигнал прерывания может

98

Управление программой 3

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

3.6.10. Многопроцессорное векторное прерывание VIRPT

Векторные прерывания используются для выполнения межпроцессорных команд в многопроцессорных системах. Когда внешний процессор записывает адрес в регистр VIRPT, вызывается векторное прерывание. Внешним процессором может быть или другой ADSP 2106x, или хост процессор.

При обработке векторного прерывания процессор ADSP 2106x автоматически помещает содержимое регистров ASTAT и MODE1 в стек состояния и начинает выполнение программы обработки, размещенной по адресу, определенному в VIRPT. 24 младших бита VIRPT содержат адрес; 8 старших бит могут использоваться как данные, которые будут считаны программой обработки прерывания. После сброса VIRPT инициализируется по его обычному адресу в таблице векторов прерываний ADSP 2106x.

Минимальное время ожидания для векторных прерываний – шесть циклов, пять из которых являются NOP. Когда в программе обработки прерывания выполняется команда RTI (возврат из прерывания), ADSP 2106x автоматически извлекает данные из стека состояния.

Бит VIPD в регистре SYSTAT отражает состояние регистра VIRPT. Если VIRPT записывается в то время, когда предыдущее векторное прерывание отложено, то новый адрес вектора замещает предыдущий. Если VIRPT записывается в то время, когда предыдущее векторное прерывание обрабатывается, то новый адрес вектора игнорируется и никакое новое прерывание не генерируется. Если ADSP 2106x выполняет запись в собственный регистр VIRPT, то эта запись игнорируется.

Для использования возможности векторного прерывания в ADSP 2106x внешний процессор может выполнять следующую последовательность действий:

1.Опрашивать регистр VIRPT, пока процессор не считает определенное значение маркера (то есть ноль).

2.Записать адрес программы обработки векторного прерывания в VIRPT.

3.Когда программа обработки завершается, процессор записывает маркер обратно в VIRPT, чтобы указать, что она закончена и что другое векторное прерывание может быть инициализировано.

99

3 Управление программой

3.7. Таймер

В процессоре ADSP 2106x имеется программируемый таймер, который может периодически генерировать прерывания. Программирование таймера выполняется путем записи значений в два его регистра, а управление работой таймера – с помощью бита в регистре MODE2. Внешний выход TIMEXP служит для сообщения другим устройствам о том что счетчик таймера пустой.

На рис. 3.11 показана блок схема таймера. Таймер управляется двумя универсальными регистрами: TPERIOD и TCOUNT.

Регистр

Функция

Разрядность

TPERIOD

Регистр периода таймера

32

TCOUNT

Регистр счетчика таймера

32

 

Шина данных памяти данных

 

32

 

 

 

TPERIOD

 

32

 

 

 

 

32

 

 

 

MUX

 

32

 

32

 

 

32

TCOUNT

 

 

 

Уменьшение на 1

 

 

 

 

Y

прерывание;

 

TCOUNT=0?

 

 

 

вывод TIMEXP;

 

 

 

перезагрузка TPERIOD

 

N

 

 

Рис. 3.11. Структурная схема таймера

100