Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Подсистема прерываний



Расширенный контроллер прерываний ядра 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 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.009 с)...