Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
Расширенный контроллер прерываний ядра CIP-51 может обслужить достаточно большое количество источников прерывания (в среднем около 22), которое зависит от состава встроенной периферии семейства (табл.4.1).
Таблица 4.1. Система прерываний.
Источник прерывания | Вектор прерывания | Приоритетный порядок | Флаг готовности | Битовая адресация | Аппаратное стирание | Флаг разрешения | Управление приоритетом |
Reset | 0x0000 | Top | None | N/A | N/A | Always Enabled | Always Highest |
External Interrupt 0 (/INTO) | 0x0003 | IEO(TCON.l) | Y | Y | EX0 (IE.0) | PXO (IPO) | |
Timer 0 Overflow | 0x000B | TFO (TCON.5) | Y | Y | ETO(IE.l) | PTO(IP.l) | |
External Interrupt 1 (/INT1) | 0x0013 | IE1 (TCON.3) | Y | Y | EX1 (IE.2) | PX1 (IP2) | |
Timer 1 Overflow | 0x001B | TF1 (TCON.7) | Y | Y | ET1 (IE.3) | PT1 (IR3) | |
UARTO | 0x0023 | RIO (SCON0.0) TIO(SCONO.l) | Y | ESO (IE.4) | PSO (IP.4) | ||
Timer 2 | 0x002B | TF2 (T2CON.7) | Y | ET2 (IE.5) | PT2 (IP.5) | ||
Serial Peripheral Interface | 0x0033 | SPIF (SPI0CN.7) | Y | ESPIO (EIE1.0) | PSPIO (EIP1.0) | ||
SMBus Interface | 0x003В | SI (SMB0CN.3) | Y | ESMB0 (EIE1.1) | PSMB0 (EIP1.1) | ||
ADCO Window Comparator | 0x0043 | ADWINT (ADC0CN.2) | Y | EWADC0 (EIE1.2) | PWADC0 (EIP1.2) | ||
Programmable Counter Array | 0x004B | CF (PCA0CN.7) CCFn (PCAOCN.n) | Y | EPCAO (EIE1.3) | PPCAO (EIP1.3) | ||
Comparator 0 | 0x0053 | CPOFIF/CPORIF (CPT0CN.4/.5) | CPOIE (EIE1.4) | PCPO (EIP1.4) | |||
Comparator 1 | 0x005B | CP1FIF/CP1RIF (CPT1CN.4/.5) | CP1IE (EIE1.5) | PCP1 (EIP1.5) | |||
Comparator 2 | 0x0063 | CP2FIF/CP2RIF (CPT2CN.4/.5) | CP2IE (EIE1.6) | PCP2 (EIP1.6) | |||
Timer 3 | 0x0073 | TF3 (TMR3CN.7) | ET3 (EIE2.0) | PT3 (EIP2.0) | |||
ADCO End of Conversion | 0x007B | ADC0INT (ADC0CN.5) | Y | EADC0 (EIE2.1) | PADC0 (EIP2.1) | ||
Timer 4 | 0x0083 | TF4 (T4CON.7) | ET4 (EIE2.2) | PT4 (EIP2.2) | |||
ADC2 Window Comparator | 0x0093 | AD2WINT (ADC2CN.0) | EWADC2 (EIE2.3) | PWADC2 (EIP2.3) | |||
ADC2 End of Conversion | 0x008B | ADC2INT (ADC1CN.5) | EADC1 (EIE2.3) | PADC1 (EIP2.3) | |||
CAN Interrupt | 0x009B | CAN0CN.7 | Y | ECAN0 (EIE2.5) | PCAN0 (EIP2.5) | ||
UART1 | 0x00A3 | RI1 (SCON 1.0) TIl (SCON1.1) | ESI | PSl |
Внутренняя периферия может генерировать до 12 прерываний. Еще до 10 внешних источников прерываний могут быть связанными с линиями портов ввода/вывода. Даже самые «слабые» микроконтроллеры выгодно отличаются от стандартного ядра 8051, обслуживающего всего 7 источников. Наличие большого количества источников прерывания позволяет повысить общую производительность системы за счет обслуживания прерываний от многочисленных аналоговых узлов и освобождения мощности процессора для основной задачи. Очевидно, что это качество очень полезно для систем управления и контроля реального времени. Источники прерываний могут иметь два уровня приоритета. Каждый источник прерываний имеет один или несколько флагов (битов) в регистре специальных функций. При соблюдении сконфигурированных условий во внутренней периферии или на входных линиях внешних входов прерываний, соответствующий источнику прерываний флаг устанавливается в состояние лог. 1 (или говорят «взводится»). Взведение соответствующего флага прерывания вызывает собственно прерывание, если оно разрешено для соответствующего источника. Это, в свою очередь, вызовет генерацию инструкции LCALL на предварительно определенный адрес подпрограммы обработки прерывания соответствующего источника ISR (Interrupt Service Routine) сразу же после завершения текущей инструкции. Каждая ISR должна завершиться инструкцией RETI, которая возвращает программу на инструкцию, следующую непосредственно за инструкцией, выполняемой в момент генерации прерывания.
Если прерывание для соответствующего источника запрещено, соответствующий флаг прерывания игнорируется, а выполнение программы продолжается в нормальном режиме. Очевидно, что каждый источник прерывания может быть разрешен (запрещен) путем установки соответствующего разрешающего бита в регистре специальных функций SFR (IE-EIE2). Все прерывания также могут быть либо разрешены, либо запрещены соответствующей установкой бита ЕА (IE.7). Некоторые из флагов прерываний устанавливаются в 0 («снимаются») автоматически. Другие флаги необходимо снимать программно.
Два внешних источника прерываний (INTO/ и INT1/) могут быть сконфигурированы на восприятие нулевого уровня (потенциала) или перепада с высокого в низкий уровень (задний фронт импульса) путем установки битов ITO (TCON.0) и IT1 (TCON.2), при этом им соответствуют флаги IEO (TCON.1) и IE1 (TCON.3). Если эти прерывания настроены на восприятие фронта, соответствующие флаги стираются автоматически, как только ядро микроконтроллера сгенерирует переход на соответствующую ISR подпрограмму. Если же прерывания настроены на восприятие уровня, то соответствующий флаг повторяет состояние на соответствующем входе микроконтроллера. Необходимо учитывать, что если входной активный (низкий) потенциал прерывания не будет снят до завершения выполнения процедуры прерывания, то эта процедура будет повторена вновь. Еще четыре внешних прерывания (External Interrupts 4-7) настроены на восприятие заднего фронта импульса (отрицательного перепада уровней с высокого в низкий). Соответствующие флаги этих прерываний находятся в регистре прерываний первого порта (Port I Interrupt Flag Register).
Каждый из источников прерываний может быть индивидуально запрограммирован на один из двух приоритетных уровней: низкий или высокий. Подпрограммы обработки прерываний низкого приоритета могут быть прерваны источниками прерываний с высоким приоритетом. Очевидно, что подпрограммы обработки прерываний с высоким приоритетом не могут быть прерваны. Каждый источник прерываний имеет индивидуальный бит приоритета в SFR (IP-EIP2), используемый для установки уровня приоритета. После сброса все приоритеты устанавливаются низкими. Если ядро одновременно восприняло два прерывания с разными приоритетами, прерывание с высоким приоритетом обрабатывается первым. Если одновременно восприняты прерывания с одинаковым приоритетом, вступает в силу фиксированный ордер приоритетов (см. описание соответствующих регистров SFR).
Время реакции на прерывание зависит от состояния процессора в момент возникновения прерывания. Проверка наличия прерываний происходит в каждом такте генератора, а время выполнения инструкции LCALL равно четырем тактам, следовательно, минимально возможное время реакции на прерывание составляет 5 тактов. Если прерывание обнаружено в момент выполнения инструкции RETI, то после ее завершения выполняется следующая команда основной программы, а лишь затем генерируется инструкция LCALL. Следовательно, максимальное время реакции на прерывание будет в том случае, когда прерывание обнаружено при выполнении инструкции RETI, а следом за ней идет самая «длинная» (по времени) инструкция DIV. Тогда время реакции составит 18 тактов: 1 - на обнаружение прерывания, 5 - на выполнение инструкции RETI, 8 - на выполнение инструкции DIV и 4 на выполнение LCALL. Если во время выполнения подпрограммы обработки прерывания пришло следующее прерывание с равным приоритетом, это новое прерывание будет обслужено только после завершения выполнения текущей подпрограммы, включая инструкцию возврата RETI, и следующей инструкции основной программы.
Дата публикования: 2015-02-22; Прочитано: 505 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!