ВВОД-ВЫВОД ДАННЫХ ПО ПРЕРЫВАНИЯМ



 

Ввод цифровых отсчетов аналогового сигнала Х(t) из АЦП и вывод данных в ЦАП программа должна выполнять циклически с периодом дискретизации. Для этого в процессорах обычно используется механизм векторного прерывания. Источниками прерываний являются сигналы, которые поступают на вход контроллера прерываний и временно приостанавливают выполнение основной программы. Процессор, получив сигнал на входе контроллера, заканчивает выполнение текущей команды в произвольной точке основной программы и переходит к одной из подпрограмм обработки прерывания. В приведенном на рис. 9 примере прерывание вызвал импульсный сигнал, формируемый периодически с интервалом TS на входе контроллера, встроенного в микросхему процессора ADSP-2189M. Внешний сигнал поступил на вход микросхемы в тот момент времени, когда процессор выполнял команду n, расположенную в ячейке памяти программ РМ с адресом 0x0210. Прерывание изменяет линейный порядок выполнения программы.

После завершения текущей команды n процессор автоматически заносит в стек информацию о состоянии программы в данный момент времени расположенную в системных регистрах, для ее дальнейшего восстановления по окончании обработки прерывания. Содержимое программного счетчика сохранится в стеке PC, регистры секвенсора ASTAT, MSTAT, IMASK запоминаются в блоке STATUS STACK. Затем вместо следующего адреса 0x0211, на единицу больше текущего, процессор запишет в программный счетчик адрес начала подпрограммы обработки, определяемый таблицей векторов прерываний (табл. 3).

Таблица 3 Источники и векторы прерываний ADSP-2189M

Источник прерывания Адрес вектора прерывания
Сброс (Reset) 0x0000(наивысший приоритет)
Снижение энергопотребления 0x 002С
IRQ2 0x 0004
IRQL1 0x 0008
IRQL0 0x 000C
Передатчик порта SPORT0 0x 0010
Приемник порта SPORT0 0x 0014
IRQE 0x 0018
Байтовый обмен ПДП (DMA) 0x 001C
Передатчик порта SPORT1 или сигнал IRQ1 0x 0020
Приемник порта SPORT1 или сигнал IRQ0 0x 0024
Таймер (timer) 0x 0028 (самый низкий приоритет)

Примечание: IRQ2, IRQL1, IRQL0, IRQE, IRQ1, IRQ0 – внешние сигналы, поступающие на входы процессора. Адреса векторов записаны в 16-ричной системе счисления.

 

Последовательность выполняемых при этом переходов: сигнал на входе контроллера → вектор на выходе контроллера → таблица → адрес начала подпрограммы. Для каждого сигнала контроллера в таблице зарезервировано 4 ячейки памяти и определен вектор. Вектор - это число, соответствующее порядковому номеру сигнала и передаваемое контроллером процессору по внутренней шине с той целью, чтобы процессор смог определить источник прерывания. Для определения вектора необходимо адрес, указанный в таблице, разделить на четыре (четыре ячейки памяти). 

Если, например, периодические прерывания вызывает сигнал внутреннего таймера, то контроллер передает процессору вектор 0х000А. Умножением на четыре процессор рассчитывает первый адрес 0х0028 четырех ячеек памяти и записывает его в программный счетчик. Поскольку разместить реальную подпрограмму обработки в четырех ячейках памяти невозможно, то здесь обычно записывают команду безусловного перехода на начало подпрограммы обработки прерывания таймера. В программах пользователя на языке ассемблера при заполнении таблицы векторов указывается имя подпрограммы в строке, соответствующей вектору 0х000А.

Выполнив подпрограмму обработки прерывания, процессор после команды завершения RTI автоматически восстанавливает системные регистры, читая их содержимое из стека, записывает в программный счетчик адрес команды n+1 и продолжает выполнение основной программы с той точки, в которой произошел выход на подпрограмму. Поэтому приведенная в листинге 1 программа расчета выходного сигнала КИХ-фильтра должна находиться не в основной программе, а в подпрограмме обработки прерывания таймера или последовательного порта, к которому подключены АЦП и ЦАП.

Регистр маскирования IMASK разрешает или запрещает прерывания индивидуально по каждому внешнему сигналу или встроенному устройству. Если обнулить бит 0 регистра IMASK, то процессор прекратит выполнять подпрограмму, определенную вектором таймера 0х000А.

1 – прерывание разрешено, 0 – запрещено.

Программа пользователя может разрешить обработку отдельного прерывания, если соответствующий бит установить (записать в него единицу), или запретить - при сброшенном бите. Допускается менять содержимое регистра в процессе выполнения программы. При включении питания или сбросе процессора регистр IMASK автоматически обнуляется, т.е. все маскируемые прерывания запрещены. Запись в регистр двоичного числа 0000000001 разрешит прерывания только от таймера. Чтобы разрешить прерывания от приемника последовательного порта SPORT0 (RX0) и от внешнего сигнала IRQ2 необходимо записать в регистр число 1000100000 с установленными битами в разрядах 9 и 5. Прерывания передатчика порта SPORT0 (TX0) будут запрещены. Поступающие сигналы на контроллер не вызовут выполнения процессором подпрограммы обработки прерывания передатчика порта SPORT0.

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

Регистр управления ICNTL содержит 5 разрядов. Бит 4 ICNTL разрешает или запрещает вложенные прерывания, т.е. одновременное выполнение нескольких подпрограмм прерываний с временной приостановкой тех, которые имеют более низкий приоритет. Импульсный сигнал запроса 2 с более высоким приоритетом приостановил выполнение подпрограммы обработки прерывания сигнала 1. Подпрограмма 1 будет продолжена только после того, как полностью завершится подпрограмма 2. Сигнал запроса 1 не может прервать подпрограмму 2.

Если бит 4 в регистре ICNTL установлен, то вложенные прерывания разрешены, при сброшенном бите – запрещены. Разряд 3 в регистре не используется. Биты 0,1,2 ICNTL определяют реакцию контроллера на форму внешних сигналов IRQ0, IRQ1 и IRQ2 соответственно. При установленном бите контроллер реагирует на фронт импульса, при сброшенном бите – на уровень сигнала. Регистр управления ICNTL не обладает чувствительностью к форме сигналов встроенных устройств, подключенных к контроллеру.

Задержка между предоставлением прерывания и выполнением первой команды подпрограммы составляет 3 командных цикла и равна 40 нс для таймера, сигналов IRQx и последовательного порта SPORT.

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

Таблица векторов прерываний занимает в памяти программ РМ фиксированную область адресов от 0х0000 до 0х002F. Программы и подпрограммы пользователя являются перемещаемыми. Распределение адресов памяти программ и памяти данных процессора приведено в табл. 4.

Таблица 4. Области памяти программ РМ и памяти данных DM ADSP-2189М

  Начальный адрес Конечный адрес Длина слова(биты)
Сегмент прерываний РМ 0х00000 0х0002F 24
Сегмент кода РМ 0х00030 0х01840 24
Сегмент кода 2 РМ 0х02000 0х02600 24
Сегмент данных DM 0х00000 0х036AF 16
Сегмент инициализации DM 0х036B0 0х036BF 16
Сегмент страниц DM 0х036C0 0х036CF 16
Сегмент данных DM 0х036D0 0х03C00 16

Встроенная и внешняя память

 

Процессор имеет встроенный контроллер прямого доступа для подключения внешних микросхем памяти, если 32К слов внутрикристальной памяти программ и 48К слов данных оказывается недостаточным. 8-битный порт прямого доступа к памяти BDMA (Byte DMA) обеспечивает подключение микросхем памяти ПЗУ или ОЗУ с байтовой организацией емкостью до 4 Мбайт (рис. 11). Данное адресное пространство играет роль загрузочной области (boot memory). Байтовая память имеет организацию 256 страниц по 16К×8 бит.

Для увеличения разрядности шины адреса кроме 14 сигналов А13-А0 программного счетчика в контроллере используются дополнительно 8 сигналов шины данных D23-D16. Общее количество адресных сигналов, равное 22, определяет максимальную емкость внешней памяти 222 = 4М, которую можно подключить к порту BDMA для хранения программ и данных. Контроллер обеспечивает передачу слова за один цикл и поддерживает начальную загрузку процессора при включении напряжения питания.

 Выходные сигналы процессора RD и WR определяют направление передачи по шине данных. Сигнал шины управления RD организует чтение данных, поступающих от микросхемы памяти, сигнал WR – запись данных во внешнюю микросхему памяти. В обоих случаях обмен выполняется между встроенной памятью процессора и внешней микросхемой. Сигнал BMS [d1] используется для включения и отключения Z-состояния внешней памяти. Высокий уровень сигнала BMS на выходе процессора переводит микросхему ПЗУ или ОЗУ в высокоомное (Z) состояние для отключения шины данных и шины адреса от соответствующих шин процессора DATA и ADDR. Низкий уровень переводит внешнюю память в активное состояние, в котором контроллер процессора выполняет операции чтения и записи по двунаправленной шине данных, используя поочередно сигналы RD, WR.

 


Рисунок 8. Использование внешней памяти

Обмен с внешней микросхемой памяти контроллер BDMA выполняет в фоновом режиме одновременно с выполнением секвенсором основной программы. Формат данных, передаваемых и принимаемых по шине DAT, автоматически определяется типом внутренней памяти. При обращении к памяти программ РМ длина слова составляет 24 бита, при выполнении обмена с памятью данных длину слова можно задать программно размером в 16 или 8 бит.

14-разрядный регистр BWCOUNT выполняет функцию счетчика переданных слов. Перед обменом по интерфейсу BDMA в счетчик программно записывается число слов для обмена. Контроллер уменьшает содержимое BWCOUNT на единицу после каждого переданного слова. Обмен данными завершается по условию BWCOUNT = 0. Максимальный размер одного блока данных составляет 214 = 16К слов. При запуске процессора по умолчанию в регистр записывается число 32. Это означает, что для начальной загрузки в процессор будет считано 32 слова из внешней микросхемы ПЗУ, которые используются для настройки контроллера BDMA на прием оставшейся части программного кода ПЗУ. Затем процессор начинает выполнение программы с адреса 0.

Разрядность программного счетчика (14 бит) позволяет процессору формировать 14 сигналов А13-А0 на шине адреса как для внутренней, так и внешней памяти. Это ограничивает максимальный размер исполняемого кода PM и данных DM до 214 = 16К слов. Чтобы преодолеть данное ограничение в процессоре используется оверлейный механизм для работы с программами, размер которых больше 16К слов.

Расширение адресного пространства выполняется с помощью регистров процессора PMOVLAY (program memory overlay) и DMOVLAY (data memory overlay). Число, записанное в оверлейные регистры, используется процессором для выбора одной из нескольких страниц памяти размером по 8К слов памяти программ и 8К слов памяти данных. В указанные регистры необходимо программно записать одно из значений ряда 0,1,2,4,5,6,7. Страницы оверлея можно менять в ходе выполнения программы, но процессор может работать в определенный момент времени только с одной страницей. Распределение номеров сегментов оверлея между внутренней и внешней памятью для одного из возможных режимов процессора приведено на рис. 12. Внешняя память программ и данных может использовать только страницы 1 и 2.

Секвенсор и генераторы адреса используют абсолютный адрес текущей выполняемой команды и не контролируют состояние регистров PMOVLAY, DMOVLAY. Неправильное изменение сегментов оверлея в командах безусловного перехода и при вызове процедур может привести к сбою программы. Во время обращения к внешней памяти регистры управляют состоянием разряда А13 шины адреса. Если в регистр PMOVLAY записана единица, то выходной сигнал процессора А13 = 0, при PMOVLAY = 2 адресный сигнал А13 = 1.

Не следует путать оверлейную память со страничной памятью, которая используется в универсальных процессорах Pentium. Загрузка оверлейного сегмента происходит под контролем программиста, в то время как распределением и загрузкой страниц в процессорах Pentium управляет операционная система. Оверлеи можно считать средством принудительного управления распределением памяти.

 


Дата добавления: 2018-08-06; просмотров: 338; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!