Функции памяти

Память микропроцессорной системы выполняет функцию временно­го или постоянного хранения данных и команд. Объем памяти определяет допустимую сложность выполняемых системой алгоритмов, а также в не­которой степени и скорость работы системы в целом. Модули памяти вы­полняются на микросхемах памяти (оперативной или постоянной). Все чаще в составе микропроцессорных систем используется флэш-память(англ. — flash mеmоrу), которая представляет собой энергонезависимую память с возможностью многократной перезаписи содержимого.

Информация в памяти хранится в ячейках, количество разрядов кото­рых равно количеству разрядов шины данных процессора. Обычно оно кратно восьми (например, 8, 16, 32, 64). Допустимое количество ячеек па­мяти определяется количеством разрядов шины адреса как 2N, где N — количество разрядов шины адреса. Чаще всего объем памяти измеряется в байтах независимо от разрядности ячейки памяти. Используются также следующие более крупные единицы объема памяти: килобайт — 210 или 1024 байта (обозначается Кбайт), мегабайт — 220 или 1 048 576 байт (обо­значается Мбайт), гигабайт — 230 байт (обозначается Гбайт), терабайт — 240 (обозначается Тбайт) Например, если память имеет 65 536 ячеек, каждая из которых 16-разрядная, то говорят, что память имеет объем 128 Кбайт. Совокупность ячеек памяти называется обычно пространством памятисистемы.

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

 
 

Рис. 2.18. Структура модуля памяти.

 

Оперативная память общается с системной магистралью в циклах чте­ния и записи, постоянная память — только в циклах чтения.

Обычно в составе системы имеется несколько модулей памяти, каждый из которых работает в своей области пространства памяти. Селектор адреса как раз и определяет, какая область адресов пространства памяти отведена данному модулю памяти. Схема управления вырабатывает в нужные моменты сиг­налы разрешения работы памяти (СS) и сигналы разрешения записи в па­мять (WR). Буферы данных передают данные от памяти к магистрали или от магистрали к памяти.

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

 

Память программы начального запускавсегда выполняется на ПЗУ или флэш-памяти. Именно с этой области процессор начинает работу после включения питания и после сброса его с помощью сигнала RЕSЕТ.

Память для стека или стек (Stаск) — это часть оперативной памяти, пред­назначенная для временного хранения данных в режиме LIFО (Last In —First Out).

Особенность стека по сравнению с другой оперативной памятью — это заданный и неизменяемый способ адресации. При записи любого числа (кода) в стек число записывается по адресу, определяемому как содержи­мое регистра указателя стека, предварительно уменьшенное (декрементированное) на единицу (или на два, если 16-разрядные слова расположены в памяти по четным адресам). При чтении из стека число читается из ад­реса, определяемого содержимым указателя стека, после чего это содер­жимое указателя стека увеличивается (инкрементируется) на единицу (или на два). В результате получается, что число, записанное последним, будет прочитано первым, а число, записанное первым, будет прочитано после­дним. Такая память называется LIFО или памятью магазинного типа (на­пример, в магазине автомата патрон, установленный последним, будет извлечен первым).

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

 
 

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

Рис. 2.19.Принцип работы стека.

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

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

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

Следующая специальная область памяти — это таблица векторов пре­рываний.

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

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

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

Пусть, например, процессор (рис.2.20) выполнял основную программу и команду, находящуюся в адресе памяти 5000 (условно). В этот момент он получил запрос прерывания с номером (адресом вектора) 4. Процессор за­канчивает выполнение команды из адреса 5000. Затем он сохраняет в стеке текущее значение счетчика команд (5001) и текущее значение РSW. После этого процессор читает из адреса 4 памяти код вектора прерывания. Пусть этот код равен 6000. Процессор переходит в адрес памяти 6000 и приступает к выполнению программы обработки прерывания, начинающейся с этого адреса. Пусть эта программа заканчивается в адресе 6100. Дойдя до этого адреса, процессор возвращается к выполнению прерванной программы. Для этого он извлекает из стека значение адреса (5001), на котором его прерва­ли, и бывшее в тот момент PSW. Затем процессор читает команду из адреса 5001 и дальше последовательно выполняет команды основной программы.

Рис. 2.20. Упрощенный алгоритм обработки прерывания.

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

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

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

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

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

 

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

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

Остановимся на проблеме разделения адресов памяти и адресов устройств ввода/вывода. Существует два основных подхода к ре­шению этой проблемы:

• выделение в общем адресном пространстве системы специальной
области адресов для устройств ввода/вывода;

• полное разделение адресных пространств памяти и устройств ввода/вывода.

 

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

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

3.3. Функции устройств ввода/вывода

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

Но модули памяти системы обмениваются информацией только с ма­гистралью, с процессором, а устройства ввода/вывода взаимодействуют еще и с внешними устройствами, цифровыми или аналоговыми. Поэтому разнообразие устройств ввода/вывода неизмеримо больше, чем модулей памяти. Часто используются еще и другие названия для устройств ввода/ вывода: устройства сопряжения, контроллеры, карты расширения, интер­фейсные модули и т.д.

Объединяют все устройства ввода/вывода общие принципы обмена с ма­гистралью и, соответственно, общие принципы организации узлов, которые осуществляют сопряжение с магистралью. Упрощенная структура устройства ввода/вывода (точнее, его интерфейсной части) приведена на рис. 2.21. Как и в случае модуля памяти, она обязательно содержит схему селектора адреса, схему управления для обработки стробов обмена и буферы данных.

Самые простейшие устройства ввода/вывода выдают на внешнее уст­ройство код данных в параллельном формате и принимают из внешнего устройства код данных в параллельном формате. Такие устройства ввода/ вывода часто называют параллельными портами ввода/вывода. Они наи­более универсальны, то есть удовлетворяют потребности сопряжения с большим числом внешних устройств, поэтому их часто вводят в состав мик­ропроцессорной системы в качестве стандартных устройств. Параллельные порты обычно имеются в составе микроконтроллеров. Именно через па­раллельные порты микроконтроллер связывается с внешним миром.

Входной порт (порт ввода) в простейшем случае представляет собой параллельный регистр, в который процессор может записывать инфор­мацию. Выходной порт (порт вывода) обычно представляет собой просто однонаправленный буфер, через который процессор может читать инфор­мацию от внешнего устройства. Именно такие порты показаны для при­мера на рис. 2.21. Порт может быть и двунаправленным (входным/выходным). В этом случае процессор пишет информацию во внешнее устрой­ство и читает информацию из внешнего устройства по одному и тому же адресу в адресном пространстве системы. Входные и выходные линии для связи с внешним устройством при этом могут быть объединены поразрядно, образуя двунаправленные линии.

Рис. 2.21.Структура простейшего устройства ввода/вывода.

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

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

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

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

В составе микропроцессорных систем, как правило, выделяются три специальные группы устройств ввода/вывода:

• устройства интерфейса пользователя (ввода информации пользова­телем и вывода информации для пользователя);

• устройства ввода/вывода для длительного хранения информации;

• таймерные устройства.

 

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

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

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

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

Еще один важный класс устройств ввода/вывода — это устройства для подключения к информационным сетям (локальным и глобальным). Эти устройства распространены не так широко, как устройства трех перечис­ленных ранее групп, но их значение с каждым годом становится все боль­ше. Сейчас средства связи с информационными сетями вводятся иногда даже в простые контроллеры.

Иногда устройства ввода/вывода обеспечивают сопряжение с внешни­ми устройствами с помощью аналоговых сигналов. Это бывает очень удоб­но, поэтому в состав некоторых микроконтроллеров даже вводят внутрен­ние ЦАП и АЦП.


Контрольные вопросы








Дата добавления: 2015-08-26; просмотров: 831;


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

При помощи поиска вы сможете найти нужную вам информацию.

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

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.015 сек.