КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Программа обработки прерываний
Лекция 11 Контроллер прерываний микроконтроллера Siemens SAB C167 В микроконтроллерах семейства SAB C167 каждому аппаратному источнику прерываний согласно таблице векторов прерываний соответствует свой регистр управления прерываниями (Interrupt Control Register). Программирование контроллера прерываний не требует общей начальной инициализации и сводится к настройке задействованных регистров управления прерываниями. Настройка каждого из них состоит в выборе уровня приоритета и установки бита разрешения для данного источника прерываний. Уровень приоритета может меняться программистом в любом месте программы.
Программа обработки прерываний – это подпрограмма (функция на языке Си), на которую передается управление при возникновении аппаратного или программного прерывания процессора. Программа обработки прерываний должна быть «незаметной» для той программы, которую она прерывает. Это возможно, если состояние системных и аппаратных средств МПК до и после прерывания не изменяется. Для этого ПОП должна удовлетворять следующим требованиям. 1. Программа должна начинаться секцией кода, сохраняющей регистры процессора, изменяемые в процессе ее выполнения; 2. Программа должна завершаться секцией восстановления всех сохраненных регистров; 3. Возврат из ПОП должен завершаться восстановлением вектора прерванного процесса. В программе на ассемблере первые два пункта реализуются командами соответственно PUSH xx (сохранить регистр xx в стеке) и POP xx (восстановить регистр xx содержимым из стека). Третий пункт обеспечивается применением не обычной командой выхода из подпрограммы RET, а специальной командой (IRET-для МПК Intel, RETI-для микроконтроллера Siemens SAB C167). В программе на языке Си все три пункта реализуются при использовании в заголовке функции ПОП модификатора «Interrupt». Если при инициализации контроллера прерываний Intel 8259 не установлен автоматический конец прерываний (D1=0 ICW4), то при обработке прерывания необходимо в регистре запросов прерываний IRR сбрасывать бит соответствующего устройства. Это обеспечивается, например, командой OCW2 «специальный конец прерываний» с указанием сбрасываемого бита или командой «обычный конец прерываний». Кроме этого указанные команды необходимо использовать в случае написания собственных обработчиков прерываний для IBM PC. Так для IBM PC команда OCW2 «обычный конец прерываний» на ассемблере имеет вид MOV 20h, 20h, а на Си имеет вид outportb (0x20, 0x20). Команда OCW2 «специальный конец прерываний», например, для ПОП первого (COM1) последовательного порта IBM PC на ассемблере имеет вид MOV 20h, 64h, а на Си имеет вид outportb (0x20, 0x64). Следует еще раз отметить, что если при обработке прерывания не сбросить бит ISR для обслуживаемого устройства, то далее это устройство и устройства с более низкими уровнями приоритетов обслуживаться не будут. Следует также отметить, что по умолчанию для микроконтроллеров Siemens каждая ПОП может быть прервана другой ПОП с более высоким приоритетом. Напротив, для МПК Intel 80x86 после возникновения прерывания автоматически сбрасывается бит разрешения прерывания IF в регистре флагов, что запрещает все остальные прерывания на время обработки текущего прерывания (бит IF снова взводится при восстановлении вектора прерванного процесса). Для разрешения/запрещения других прерываний во время выполнения текущего прерывания в любом МПК следует использовать команды ассемблера STI/CLI или функции Си enable()/disable().
Дата добавления: 2014-12-16; Просмотров: 885; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |