Ревич, Ю.В. Программирование микроконтроллеров AVR: от Arduino к ассемблеру

Глава б. Основы программирования МКАVR 131 Об ра б отка прерывани й Как мы уже знаем (см. главу 3), АVR по умолчанию ожидает, что сразу после пер­ вой команды с адресом $ 0 0 0 0 идет таблица т. н. векторов прерываний. Вектор ­ это просто отсылка по нужному адресу с помощью команды rjmp (или jmp - в за­ висимости от степени «продвинутости» контроллера) . Вообще-то вектор, разме­ щенный по нулевому адресу, на который программа переходит по сбросу (вектор сброса или вектор начШlьной загрузки), тоже считается прерыванием, хотя он занимает особое место (о векторе сброса рассказано в следующем разделе). Адрес обозначается меткой, может располагаться в любом месте программы и ука­ зывает на начало процедуры обработки прерывания . Первый вектор располагается по адресу $ 0 0 0 1 (а для МК с памятью более 8 К- по адресу $ 0002 , потому что по адресу $ 0 0 0 1 по идее должна находиться вторая половина более длинной команды jmp от вектора сброса), причем напомним, что для памяти программ адрес этот оз­ начает номер двухбайтового слова в памяти, а не отдельного байта. В контроллерах с памятью меньше 8 кбайт нам вообще можно не думать про абсолютные адреса и их нумерацию - первый вектор программы ( rjmp RESET ) автоматически располо­ жится по нулевому адресу, второй - по адресу $ 0 001 , и т. д. Найдя какую-нибудь команду перехода по метке, компилятор автоматически подставит абсолютные ад­ реса. Порядок следования векторов и их число в таблице жестко заданы в соответствии с типом МК. Потому самое первое, что вы должны сделать, приступая к програм­ мированию, - открыть руководство по применению выбранного типа контролле­ ров и скопировать оттуда эту таблицу. Можно сделать это прямо через буфер обме­ на из РDF-описания (если вам позволят - в последних версиях описаний копиро­ вание текста через буфер обычно запрещено, но всегда можно вывернуться с помощью программ, удаляющих или обходящих ограничения PDF) - так меньше вероятность что-то пропустить, только придется потом удалить указанные там абсолютные адреса, стоящие в начале каждой строки. Листинг 6.4 иллюстрирует начало программы для МК А Tmega8. ; =========прерывания================ rjmp RESET ; Reset Handler rjmp EXT_INTO ; IRQO Handler rjmp EXT_INTl ; IRQl Handler rjmp TIM2_COMP ; Timer2 Compare Handler r jmp TIM2_0VF ; Timer2 Overflow Handler rjmp TIMl_CAPT ; Timerl Capture Handler rjmp TIMl_COMPA ; Timerl CompareA Handler rjmp TIMl_COMPB ; Timerl CompareB Handler rjmp TIMl_OVF ; Timerl Overflow Handler rjmp TIMO_OVF ; TimerO Overflow Handler rjmp SPI_STC ; SPI Trans fer Complete Handler rjmp USART RXC ; USART RX Complete Handler

RkJQdWJsaXNoZXIy MTExODQxMg==