Читайте также:
|
|
Регистры SFR, связанные с прерываниями: INTCON, PIE1, PIR1, PIE2, PIR2.
Регистр управления прерываниями INTCON:
R/W - 0 | R/W - 0 | R/W - 0 | R/W - 0 | R/W - 0 | R/W - 0 | R/W - 0 | R/W - x |
GIE | PEIE | T0IE | INTE(2) | RBIE(1.2) | T0IF | INTF(2) | RBIF(1.2) |
Бит 7 | Бит 0 |
GIE = 1/0 - глобальное разрешение/запрещение прерываний.
PEIE = 10 - разрешение/запрещение прерываний от периферии.
T0IE = 1/0 - разрешение/запрещение прерываний по переполнению от TMR0.
INTE = 1/0 - разрешение/запрещение внешнего прерывания.
RBIE = 1/0 - разрешение/запрещение прерываний по изменению уровня на выводах RВ7:RВ4 порта РОRТВ.
T0IF - флаг прерывания по переполнению от TMR0.
INTF - флаг внешнего прерывания.
RBIF - флаг прерывания по изменению уровня на выводах RВ7:RВ4 порта РОRТВ.
Примечания:
1) В некоторых МК вместо битов RBIE и RBIF могут быть GPIЕ и GРIF соответственно.
2) Отсутствует у некоторых МК.
3) В МК с одним периферийным модулем этот бит может быть ЕЕIЕ или АDIЕ.
Регистр РIЕ1:
PSPIE | ADIE | RCIE | TXIE | SSPIE | CCP1IE | TMR2IE | TMR1IE |
Бит 7 | Бит 0 |
PSPIE: для микроконтроллера РIС16F873 всегда должен быть сброшен
ADIE: 1/0 -разрешение/запрет прерывания от модуля АЦП
RCIE: 10 - разрешение/запрет прерывания от асинхронного последовательного порта при приеме данных
TXIE: 1/0 - разрешение/запрет прерывания от асинхронного последовательного порта при передаче данных
SSPIE: 1/0 - разрешение/запрет прерывания от синхронного последовательного порта
CCP1IE: 1/0 - разрешение/запрет прерывания от модуля ССР
TMR2IE: 1/0 - разрешение/запрет прерывания при совпадении значения Т/С2 со значением регистра РR2
TMR1IE: 1/0 - разрешение запрет прерывания при переполнении Т/С1
Регистр РIЕ2:
- | - | EEIE | BCLIE | - | - | CCP2IE | |
Бит 7 | Бит 0 |
EEIE: 1/0 - разрешение/запрет прерывания при записи ЕЕРRОМ
BCLIE: 1/0 - разрешение/запрет прерывания при коллизии шины синхронного последовательного порта
CCP2IE: 1/0 - разрешение/запрет прерывания от модуля ССР2
Регистр РIR1:
PSPIF | ADIF | RCIF | TXIF | SSPIF | CCP1IF | TMR2IF | TMR1IF |
Бит 7 | Бит 0 |
PSPIF: для микроконтроллера РIС16F873 всегда должен быть сброшен
ADIF: флаг прерывания от модуля АЦП (10 - преобразование выполнено/ не выполнено)
RCIF: флаг прерывания от асинхронного последовательного порта, 1/0 - буфер приема заполнен/пуст
TXIF: флаг прерывания от асинхронного последовательного порта, 1/0 - буфер передачи пуст/заполнен
SSPIF: флаг прерывания от синхронного последовательного порта
CCP1IF: флаг прерывания от модуля ССР1. Режим захвата: значение регистра Т/С1 запомнено. Режим сравнения: совпадение со значением регистра Т/С1 обнаружено. В режиме ШИМ: не используется.
TMR2IF: флаг прерывания при совпадении значения Т/С2 и регистра РR2
TMR1IF: флаг прерывания при переполнении Т/С1
Регистр РIR2:
- | - | EEIF | BCLIF | - | - | CCP2IF | |
Бит 7 | Бит 0 |
EEIF: флаг прерывания при успешном окончании операции записи в ЕЕРRОМ
BCLIF: флаг прерывания при коллизии шины SSР когда он работает в режиме ведущий I2С
CCP2IF: флаг прерывания от модуля ССР2. Режим захвата: значение регистра Т/С1 запомнено. Режим сравнения: совпадение со значением регистра Т/С1 обнаружено. В режиме ШИМ не используется.
Регистр РСОN содержит флаги для определения источника сброса:
• По включению питания (РОR).
• По сигналу на входе - МСLR
• По переполнению WDТ
• По обнаружению снижения напряжения питания (BOR).
- | - | - | - | - | - | POR | BOR |
Бит 7 | Бит 0 |
POR: статус сброса при включении, 1/0 сброс при включении произведен/не произведен
BOR: 1/0 - сброс при падении напряжения питания произведен не произведен
Примечание:
Бит -ВОR может быть любым при включении питания и при отключенном детекторе снижения питания (ВОDЕN=0 в регистре конфигурации), поэтому не должен учитываться. Бит -ВОR нужен для обнаружения последующих сбросов МК при снижении питания.
Аппаратно в стеке сохраняется только адрес возврата из обработчика прерывания. Сохранение и восстановление контекста (содержимого регистров W и STATUS) должен осуществлять сам программист.
За прерываниями закреплено 2 вектора прерываний: 0000h (сброса) и 0004h (один для всех прерывания).
При запросе прерывания (устанавливается флаг соответствующего периферийного модуля) в счетчик команд загружается адрес вектора прерывания 0004h. По этому адресу должна быть расположена команда перехода на начальный адрес подпрограммы обработчика прерываний. При этом бит GIЕ = 0.
Обработчик прерывания: должен сохранить контекст вызывающей программы или подпрограммы, определить требуемый источник прерывания и сбросить его установленный флаг, выполнить необходимые действия по обслуживанию прерывания, восстановить контекст и выполнить команду возврата из прерывания. При этом бит GIЕ = 1.
Время перехода на обработку прерывания - 3-4 машинных цикла.
Дата добавления: 2015-11-14; просмотров: 68 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Косвенная адресация, регистра INDF и FSR | | | Система прерывании РIС18FХХ2 |