Устройство триггера.


Триггер – это элемент памяти, способный принимать и поддерживать пока на нём присутствует питание одно из двух состояний – «0» или «1».

Существует множество разновидностей триггеров: RS, D, JKи т.д. Названия этих триггеров происходит от названия их входов. В данном методическом пособии будет рассмотрен RSтриггер.

Вид триггера на схеме представлен на рис 8.5.

Рис 8.5

Вход R(reset) является сигналом сброса (установки нуля), а сигнал S (set) – установки единицы. Выход Qявляется прямым, а – обратным.

Если на входе Rустанавливается 1, то Qпринимает значение 0, а – единица. Если на входе Sустанавливается 1, то на Qпринимает значение 1, а – 0. Если же оба значения равны нулю, то состояние триггера не меняется. Комбинация R=1 и S=1 в данном триггере не определена.

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

 


Стек(Stack).

Стек— это часть оперативной памяти, предназначеннаядля временного хранения данных в режиме LIFO (Last In — First Out).Особенность стекапо сравнению с другой оперативной памятью — это заданный инеизменяемый способ адресации. При записи любого числа в стекчислозаписывается по адресу, определяемому как содержимое регистрауказателя стека,предварительно уменьшенное (декрементированное) на единицу (или на два, если 16-тиразрядные слова расположены в памяти по четным адресам).

При чтении из стекачисло читается из адреса, определяемого содержимым указателя стека, после чего этосодержимое указателя стекаувеличивается (инкрементируется) на единицу (или надва). В результате получается, что число, записанное последним, будет прочитанопервым, а число, записанное первым, будет прочитано последним. Такая памятьназывается LIFO.Принцип действия стекапоказан на рис. 8.5(адреса ячеек памяти выбраны условно).

 

Рис 8.5

 

Пусть, например, текущее состояние указателя стека 1000008, и в него надо записатьдва числа (слова). Первое слово будет записано по адресу 1000006 (перед записьюуказатель стека уменьшится на два). Второе — по адресу 1000004. После записисодержимое указателя стека — 1000004. Если затем прочитать из стека два слова, топервым будет прочитано слово из адреса 1000004, а после чтения указатель стекастанет равным 1000006. Вторым будет прочитано слово из адреса 1000006, ауказатель стека станет равным 1000008. Все вернулось к исходному состоянию.Первое записанное слово читается вторым, а второе — первым.

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

В системе команд любого процессора для обмена информацией состекомпредусмотрены специальные команды записи в стек(PUSH) и чтения из стека(POP). Встекеможно прятать не только содержимое всех внутренних регистровпроцессоров, нои содержимое регистрапризнаков (слово состояния процессора, PSW). Это позволяет,например, при возвращении из подпрограммы контролировать результат последнейкоманды, выполненной непосредственно перед вызовом этой подпрограммы.

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

 

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

 

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

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

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

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

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

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

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

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

 

Внешняя память.

Зачастую случается, что микроконтроллеру не хватает памяти для решения поставленной задачи. В этом случае существует возможность подключения внешнего модуля памяти, с которой микроконтроллер будет взаимодействовать как со своей собственной. При этом обычно происходит адресное расширение памяти. Подключаемый модуль памяти может быть как ОЗУ, так и ПЗУ и располагаться в нём могут любые виды данных (программа, переменные, настройки системы и т.д.).

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

Оба подхода имеют свои плюсы и минусы. Например, использованиесегментов позволяет защитить область программ или данных, но зато границысегментов могут затруднять размещение больших программ и массивов данных.



Дата добавления: 2017-01-16; просмотров: 969;


Поиск по сайту:

Воспользовавшись поиском можно найти нужную информацию на сайте.

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

Считаете данную информацию полезной, тогда расскажите друзьям в соц. сетях.
Poznayka.org - Познайка.Орг - 2016-2024 год. Материал предоставляется для ознакомительных и учебных целей.
Генерация страницы за: 0.009 сек.