Лекция № 10 (1085706), страница 2
Текст из файла (страница 2)
Например:
двоичное число 0111 → 7(10) после операции бит-реверсии станет равным 1110 → 14(10).
двоичное число 100 → 4(10) после операции бит-реверсии станет равным 001 → 1(10).
Операция бит-реверсии буфера на восьми элементах:
Порядок следования n исходных отсчетов x(n) | |||
Прямой | Бит-реверсивный | ||
Десятичная система | Двоичная система | Двоичная система | Десятичная система |
0 | 000 | 000 | 0 |
1 | 001 | 100 | 4 |
2 | 010 | 010 | 2 |
3 | 011 | 110 | 6 |
4 | 100 | 001 | 1 |
5 | 101 | 101 | 5 |
6 | 110 | 011 | 3 |
7 | 111 | 111 | 7 |
Управляющий блок.
Блок управления программой (БУП).
Блок управления программой должен содержать основной источник адреса памяти программ:
Так как разрядность счетчика команд равна 16, то максимальный объем памяти программ должен быть равен 64 Кб.
В регистре команд находятся команды, которые уже сосчитали, но они ещё не дошли до дешифрации. Так же как и конвейер, нам не показывается регистр команд (теневой регистр). Если конвейер трехступенчатый, то должно быть как минимум два теневых регистра.
К управляющей части также относится указатель стека.
Каждая ячейка стека имеет 16-разрядный формат. Стек – возрастающий.
Сам указатель стека (SP) – это 16-разрядный регистр, четыре младших разряда которого (P3, P2, P1, P0) определяют адрес последней записи в стек (от 0 до 15):
SE – это бит-флаг, сообщающий о переполнении стека или его избыточной выгрузке. Переполнение или избыточная выгрузка стека считаются ошибкой стека и вызывают прерывания.
Возможно 15 уровней вложений подпрограмм.
16-разрядный регистр состояния (SR) определяет состояние процессора. В регистре SR также хранятся признаки результатов выполнения очередной операции. Он состоит из двух частей: регистра управления (регистра режима) MR - старшие 8 бит и регистра условий CCR - младшие 8 бит:
Регистр условий CCR:
7 6 5 4 3 2 1 0
X | L | E | U | N | Z | V | C |
C - флаг переноса;
V - флаг переполнения;
Z - флаг нулевого результата;
N - флаг отрицательного результата;
U – флаг показывающий: был ли результат последней операции нормализован;
E - флаг показывающий: использованы ли биты 35 - 32 расширения аккумулятора;
L – флаг показывающий: был ли результат последней операции ограничен (для арифметики с
насыщением);
Регистр режима (MR):
Здесь важно две вещи:
15 14 13 12 11 10 9 8
S1 | S0 | I 1 | I 0 |
I1 – I0 - биты, которые задают уровень маскирования прерываний:
I1- I0 = 11 - маскируются прерывания 0, 1 и 2 уровней;
I1- I0 = 10 - маскируется уровни 0 и 1;
I1- I0 = 01 - маскируется только уровень 0;
I1- I 0 = 00 - отсутствие маскирования.
S1 - S0 - биты, которые используются при накоплении (можем сдвигать влево, вправо и не сдвигать).
Старший уровень системы приоритетов прерываний 3 является немаскируемым, он используется для прерываний ядра при поступлении неправильного кода команды, наличия переполнения, ошибке доступа к данным. Уровни с 0 по 2 (по возрастанию приоритета) - маскируемые, используются при обслуживании программных прерываний, запросов прерываний от периферийных устройств и внешних запросов.
Кроме традиционных, в программном контроллере есть ещё три специфических регистра, которых нет у обычных микроконтроллеров: регистр повторов LC (Loop Counter) (счетчик циклов); регистр адреса перехода LA (Loop Address) и регистр OMR (Operation Mode Register), который управляет режимами памяти процессора.
Регистр адреса перехода LA и счетчик циклов LC применяются вместе с аппаратным стеком при реализации циклов. Два слова в стеке и два комплекта регистров LA и LC позволяют выполнять вложенный цикл внутри основного.
Регистр повторов LC связан с наличием команды REPIT («REP» – повтор). Число (или содержимое регистра), указанное в этой команде, показывает: сколько раз надо повторить следующую команду.
Например:
REP #10
MAC X0, Y0, A X: (R0) −, X0 Y: (R4) +, Y0
По этой команде: содержимое входного регистра X0 умножается на содержимое входного регистра Y0 и результат помещается в аккумулятор (А).
Из памяти X по косвенно указанному адресу, который определяется регистром R0, автоматически уменьшенному на единицу, должны передать в X0 (подготовить для следующего умножения).
Аналогично из памяти Y по косвенно указанному адресу, который определяется регистром R4, автоматически увеличенному на единицу, должны передать в Y0.
Таким образом, вычисляем целую строку при разных значениях X и Y.
Команда REP записывает в регистр LC количество повторов.
В процессорах цифровой обработки сигналов могут повторяться отдельные фрагменты программы. Для этого есть оператор DO («делай»).
После оператора DO весь фрагмент (все команды) программы до метки ENDDO будут повторяться.
Например:
DO #10 ENDDO
………………………….
…………………………
ENDDO
Чтобы запомнить последнюю метку, есть специальный регистр LA (последний адрес).
Таким образом, в блоке управления программой есть шесть программно доступных регистров:
PC; SP; SR; LC; LA; OMR.
Система прерываний (СП).
При использовании процессоров в реальных системах ЦОС часто возникает ситуация, когда необходимо прервать выполнение текущей программы по сигналу, поступившему от некоторого источника. В этом случае выполнение текущей программы приостанавливается, запоминается состояние на момент прерывания, выполняется другая, специальная, заранее загруженная программа, после чего восстанавливается сохраненное до прерывания состояние процессора, и продолжается выполнение прерванной программы (или не продолжается, в зависимости от характера прерывания или условия возврата, указанного пользователем).
Данная процедура называется прерыванием процессора; сигнал, вызвавший прерывание, - запросом на прерывание; источник данного сигнала – источником прерывания; последовательность действий, выполняемая по запросу на прерывание, - обслуживанием прерывания, а выполняемая по прерыванию программа – подпрограммой обслуживания прерывания.
Имеется четырехуровневая система прерываний (т.е. приоритетная) с фиксированными векторами прерываний и с возможностью до 32 источников прерываний.
У сигнального процессора фирмы Motorola, который мы взяли за основу: 4 внешних и 16 внутренних прерываний.
Внешние прерывания – это прерывания по активному сигналу на соответствующем выводе.
Есть 4 вывода, через которые может быть внешнее прерывание:
-
RESET (аппаратный сброс процессора (установка в начальное состояние));
-
MODA/IRQA;
-
MODB/IRQB;
-
MODC/NMI.
Внутренние прерывания – это прерывания от всех внутренних периферийных устройств.
К программным прерываниям относятся:
-
Специальные команды для управляемого программного прерывания процессора: эти
команды предусматриваются пользователем в одной или нескольких точках программы
(например: команда SWI в процессорах фирмы Motorola).
-
Команда программного сброса RESET.
-
Неуправляемые прерывания – исключения, обозначающие ошибку (ошибка стека, деление
на ноль, переполнение и т.д.).
Каждый источник прерывания имеет свой вектор прерывания – ячейку памяти данных, содержимое которой определяет тип прерывания:
-
Быстрый, если подпрограмма обслуживания прерывания размещается непосредственно
в векторе.
-
Долгий, если вектор содержит обращение к более сложной подпрограмме обслуживания
прерывания.
Быстрые прерывания могут использоваться для организации обмена данными между памятью и устройствами ввода/вывода. Они позволяют сократить время обслуживания прерывания, поскольку не требуют команд обращения к подпрограмме и возврата из неё.
Механизм выполнения быстрого прерывания: текущая команда должна быть закончена, а после этого, содержимое счетчика команд отправляется в специальный теневой регистр. На место счетчика команд записывается адрес вектора прерывания. По окончании процедуры обработки прерывания, сохраненное содержимое счетчика команд восстанавливается. Таким образом, быстрые прерывания предполагают сохранение («защелкивание») состояния программного счетчика и автоматический возврат в основную программу.
Долгие прерывания используются для более сложной обработки по запросу на прерывание. При обращении к соответствующим подпрограммам необходимо сохранять не только значение программного счетчика (адрес команды, к которой следует вернуться после обслуживания прерывания), но также состояние процессора на момент прерывания (обычно это содержимое регистров состояния и/или других регистров. Содержимое счетчика и необходимых регистров загружается в стек, сохраняется в нем на время выполнения подпрограммы обслуживания прерывания и изымается после возврата из нее (по команде возврата) перед продолжением прерванной программы.
Средства управления прерываниями.
-
Таблица векторов прерываний. Она занимает 64 нижних ячейки в памяти программ и обычно располагается, начиная с нулевого адреса. В процессорах фирмы Motorola на каждое прерывание выделяется 2 ячейки.
Пример таблицы векторов прерывания:
Адрес вектора прерывания | Вектор прерывания | Приоритет IRL | Источник прерывания |
0000 | 3 | RESET | |
0002 | 3 | ошибка стека | |
0004 | ……………… | 3 | ……………… |
0006 | 3 | команда SWI | |
0008 | 0 – 2 | внешнее прерывание MODA/IRQA | |
000А | 0 – 2 | внешнее прерывание MODB/IRQB |
Приоритеты символически обозначаются целыми положительными числами. В процессорах фирмы Motorola высший приоритет кодируется наибольшим числом три (3 – это безусловное прерывание). Высший приоритет во всех процессорах имеет аппаратный сброс на выводе RESET.
Процедура быстрой обработки прерываний выполняется в том случае, если в таблице векторов прерываний содержится не ссылка на обработчик прерывания, а сама процедура обработки. Быстрые прерывания всегда имеют 2-ой уровень приоритета (приоритет должен быть установлен в 1). Быстрые прерывания не могут прерываться никакими источниками, т.е. не допускают вложенных прерываний.