17. Работа с прерываниями в МК Atmega 163
Контроллер Atmega163 имеет 17 внешних и 15 внутренних прерываний. Каждый узел МК является источником прерываний и может прервать выполняемую программу. Каждое прерывание имеет фиксированный приоритет и вектор прерывания.
Вектора прерываний занимают в пространстве памяти программа адреса с $0 до $22. $0 – определен, как сигнал сброса. Адрес последующего больше предыдущего на 2. Адреса $2 и $4 соответствуют внешним прерываниям int0 и int1. Приоритет прерываний уменьшается с возрастанием адресов и векторов. Любое прерывание может быть запрещено специальными битами в регистрах I/O МК.
Для выхода из любой подпрограммы обработки прерываний в системе МК предусмотрена команда reti, восстанавливающая содержимое программного счетчика из стека. Для правильного функционирования системы прерываний в начале прграммы должен быть загружен указатель стека.
биты | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
SREG $3F | I | |||||||
MCUCR $35 | ISC11 | ISC10 | ISC01 | ISC00 | ||||
GIMSK $3B | INT1 | INT0 |
Внешние прерывания вызываются с контактов int1 и int0. для их обработки в МК задействованы отдельные биты трех регистров:
Регистр статуса SREG
Регистр управления процессорным ядром MCUCR
Регистр маски прерываний.
Прерывания разрешаются только при единичном значении бита I в регистре SREG. Сброс этого бита запрещает все прерывания. Если прерывания разрешены, то при появлении любого запроса бит I сбрасывается, а дальнейшие прерывания запрещаются. Прога usera может вновь установить этот бит, разрешив вложенные прерывания.
Биты ISC в регистре MCUCR описывают уровни и фронты прерывающих сигналов на контактах int0/1
ISC11/01 | ISC10/00 | |
0 | 0 | Низкий уровень сигнала INT1/0 генерирует запрос на прерывание |
0 | 1 | Любое логическое изменение INT1/0 генерирует запрос на прерывание |
1 | 0 | Задний фронт импульса на INT1/0 генерирует запрос на прерывание |
1 | 1 | Переднийфронт импульса на INT1/0 генерирует запрос на прерывание |
биты 3 и 2, биты активизации входа INT1
биты 1 и 1, биты активизации входа INT0
В регистре маскирования прерываний GIMSK содержаться флаги внешних прерываний. Когда счетчик команд МК устанавливается на конкретный вектор прерывания, соотв. Флаг в GIMSK аппаратно сбрасывается. Флаги можно сбросить, записав туда лог. 1.
Бит 7 – int1 внешнее прерывание int 1 разрешено. Если бит int1 установлен и бит I в SREG =1, то внешний выход запроса на прерывание int1 становится активным
Бит 6 – int0 тоже самое.
18. Организация обмена прямым доступом к памяти (ПДП)
Одним из способов обмена данными с ВУ является обмен в режиме прямого доступа к памяти (ПДП). В этом режиме обмен данными между ВУ и основной памятью микроЭВМ происходит без участия процессора. Схема, управляющая обменом в режиме ПДП, размещаются в специальном контроллере, который называется КПДП. Обмен данными в режиме ПДП позволяет использовать в микроЭВМ быстродействующие внешние запоминающие устройства, такие, например, как накопители на жестких магнитных дисках, поскольку ПДП может обеспечить время обмена одним байтом данных между памятью и ВЗУ, равное циклу обращения к памяти.
Для реализации режима прямого доступа к памяти необходимо обеспечить непосредственную связь контроллера ПДП и памяти микроЭВМ. Контроллер ПДП подключается к памяти посредством шин адреса и данных системного интерфейса.
Существуют две разновидности прямого доступа к памяти с "захватом цикла". Наиболее простой способ организации ПДП состоит в том, что для обмена используются те машинные циклы процессора, в которых он не обменивается данными с памятью. В такие циклы контроллер ПДП может обмениваться данными с памятью, не мешая работе процессора. Однако возникает необходимость выделения таких циклов, чтобы не произошло временного перекрытия обмена ПДП с операциями обмена, инициируемыми процессором. В некоторых процессорах формируется специальный управляющий сигнал, указывающий циклы, в которых процессор не обращается к системному интерфейсу. Такой обмен в режиме ПДП возможен только в случайные моменты времени одиночными байтами или словами.
Более распространенным является ПДП с "захватом цикла" и принудительным отключением процессора от шин системного интерфейса. Для реализации такого режима ПДП системный интерфейс микроЭВМ дополняется двумя линиями для передачи управляющих сигналов "Требование прямого доступа к памяти" (ТПДП) и "Предоставление прямого доступа к памяти" (ППДП).
Управляющий сигнал ТПДП формируется контроллером прямого доступа к памяти. Процессор, получив этот сигнал, приостанавливает выполнение очередной команды, не дожидаясь ее завершения, выдает на системный интерфейс управляющий сигнал ППДП и отключается от шин системного интерфейса. С этого момента все шины системного интерфейса управляются контроллером ПДП. Контроллер ПДП, используя шины системного интерфейса, осуществляет обмен одним байтом или словом данных с памятью микроЭВМ и затем, сняв сигнал ТПДП, возвращает управление системным интерфейсом процессору. Как только контроллер ПДП будет готов к обмену следующим байтом, он вновь "захватывает" цикл процессора и т.д. В промежутках между сигналами ТПДП процессор продолжает выполнять команды программы. Тем самым выполнение программы замедляется, но в меньшей степени, чем при обмене в режиме прерываний.
Применение в микроЭВМ обмена данными с ВУ в режиме ПДП всегда требует предварительной подготовки, а именно: для каждого ВУ необходимо выделить область памяти, используемую при обмене, и указать ее размер, т.е. количество записываемых в память или читаемых из памяти байт (слов) информации. Следовательно, контроллер ПДП должен обязательно иметь в своем составе регистр адреса и счетчик байт (слов). Перед началом обмена с ВУ в режиме ПДП процессор должен выполнить программу загрузки. Эта программа обеспечивает запись в указанные регистры контроллера ПДП начального адреса выделенной ВУ памяти и ее размера в байтах или словах в зависимости от того, какими порциями информации ведется обмен. Сказанное не относится к начальной загрузке программ в память в режиме ПДП. В этом случае содержимое регистра адреса и счетчика байт слов устанавливается переключателями или перемычками непосредственно на плате контроллера.
0 комментариев