Прерывания
В этом разделе описываются особенности обработки прерываний в микроконтроллерах LGT8F88P/168P/328P.
Вектора прерываний
В микроконтроллерах LGT8F88P/168P/328P имеется 30 источников прерываний и есть возможность переноса начального адреса таблицы векторов прерываний. Каждый вектор прерывания занимает одно командное слово в LGT8F88P и два командных слова в LGT8F168P/328P.
Список векторов прерываний LGT8F88P
№ |
Адрес |
Источник |
Описание |
|---|---|---|---|
1 |
0x0000 |
RESET |
Внешний сброс, сброс при включении питания, сброс сторожевого таймера, отладка SWD, сброс по низкому напряжению |
2 |
0x0001 |
INT0 |
Внешнее прерывание 0 |
3 |
0x0002 |
INT1 |
Внешнее прерывание 1 |
4 |
0x0003 |
PCI0 |
Прерывание по уровню на выводе 0 |
5 |
0x0004 |
PCI1 |
Прерывание по уровню на выводе 1 |
6 |
0x0005 |
PCI2 |
Прерывание по уровню на выводе 2 |
7 |
0x0006 |
WDT |
Прерывание по переполнению сторожевого таймера |
8 |
0x0007 |
TC2 COMPA |
Прерывание таймера 2 по совпадению A |
9 |
0x0008 |
TC2 COMPB |
Прерывание таймера 2 по совпадению B |
10 |
0x0009 |
TC2 OVF |
Прерывание таймера 2 по переполнению |
11 |
0x000A |
TC1 CAPT |
Прерывание таймера 1 по захвату |
12 |
0x000B |
TC1 COMPA |
Прерывание таймера 1 по совпадению A |
13 |
0x000C |
TC1 COMPB |
Прерывание таймера 1 по совпадению B |
14 |
0x000D |
TC1 OVF |
Прерывание таймера 1 по переполнению |
15 |
0x000E |
TC0 COMPA |
Прерывание таймера 0 по совпадению A |
16 |
0x000F |
TC0 COMPB |
Прерывание таймера 0 по совпадению B |
17 |
0x0010 |
TC0 OVF |
Прерывание таймера 0 по переполнению |
18 |
0x0011 |
SPI STC |
Прерывание по завершению последовательной передачи SPI |
19 |
0x0012 |
USART RXC |
Прерывание по завершению приёма USART |
20 |
0x0013 |
USART UDRE |
Прерывание по пустому регистру данных USART |
21 |
0x0014 |
USART TXC |
Прерывание по завершению передачи USART |
22 |
0x0015 |
ADC |
Прерывание по завершению преобразования АЦП |
23 |
0x0016 |
EE_RDY |
Прерывание по готовности EEPROM |
24 |
0x0017 |
ANA_COMP |
Прерывание аналогового компаратора 0 |
25 |
0x0018 |
TWI |
Прерывание двухпроводного последовательного интерфейса |
26 |
0x0019 |
ANA_COMP1 |
Прерывание аналогового компаратора 1 |
27 |
0x001A |
— |
Зарезервировано |
28 |
0x001B |
PCI3 |
Прерывание по уровню на выводе 3 |
29 |
0x001C |
PCI4 |
Прерывание по уровню на выводе 4 |
30 |
0x001D |
TC3_INT |
Прерывание таймера 3 |
Список векторов прерываний LGT8F168P/328P
№ |
Адрес |
Источник |
Описание |
|---|---|---|---|
1 |
0x0000 |
RESET |
Внешний сброс, сброс при включении питания, сброс сторожевого таймера, отладка SWD, сброс по низкому напряжению |
2 |
0x0002 |
INT0 |
Внешнее прерывание 0 |
3 |
0x0004 |
INT1 |
Внешнее прерывание 1 |
4 |
0x0006 |
PCI0 |
Прерывание по уровню на выводе 0 |
5 |
0x0008 |
PCI1 |
Прерывание по уровню на выводе 1 |
6 |
0x000A |
PCI2 |
Прерывание по уровню на выводе 2 |
7 |
0x000C |
WDT |
Прерывание по переполнению сторожевого таймера |
8 |
0x000E |
TC2 COMPA |
Прерывание таймера 2 по совпадению A |
9 |
0x0010 |
TC2 COMPB |
Прерывание таймера 2 по совпадению B |
10 |
0x0012 |
TC2 OVF |
Прерывание таймера 2 по переполнению |
11 |
0x0014 |
TC1 CAPT |
Прерывание таймера 1 по захвату |
12 |
0x0016 |
TC1 COMPA |
Прерывание таймера 1 по совпадению A |
13 |
0x0018 |
TC1 COMPB |
Прерывание таймера 1 по совпадению B |
14 |
0x001A |
TC1 OVF |
Прерывание таймера 1 по переполнению |
15 |
0x001C |
TC0 COMPA |
Прерывание таймера 0 по совпадению A |
16 |
0x001E |
TC0 COMPB |
Прерывание таймера 0 по совпадению B |
17 |
0x0020 |
TC0 OVF |
Прерывание таймера 0 по переполнению |
18 |
0x0022 |
SPI STC |
Прерывание по завершению последовательной передачи SPI |
19 |
0x0024 |
USART RXC |
Прерывание по завершению приёма USART |
20 |
0x0026 |
USART UDRE |
Прерывание по пустому регистру данных USART |
21 |
0x0028 |
USART TXC |
Прерывание по завершению передачи USART |
22 |
0x002A |
ADC |
Прерывание по завершению преобразования АЦП |
23 |
0x002C |
EE_RDY |
Прерывание по готовности EEPROM |
24 |
0x002E |
ANA_COMP |
Прерывание аналогового компаратора |
25 |
0x0030 |
TWI |
Прерывание двухпроводного последовательного интерфейса |
26 |
0x0032 |
ANA_COMP1 |
Прерывание аналогового компаратора 1 |
27 |
0x0034 |
— |
Зарезервировано |
28 |
0x0036 |
PCI3 |
Прерывание по уровню на выводе 3 |
29 |
0x0038 |
PCI4 |
Прерывание по уровню на выводе 4 |
30 |
0x003A |
TC3_INT |
Прерывание таймера 3 |
Примечание для LGT8FX8P:
Вектор сброса (RESET) начинает выполнение с адреса 0x0000.
Все остальные адреса векторов (кроме вектора сброса) могут быть перенаправлены на начальный адрес с выравниванием 512 байт с помощью бита IVSEL в регистре MCUCR и регистра IVBASE.
Обработка векторов прерываний
Типичная конфигурация программы для адресов вектора сброса и прерывания в LGT8F88P выглядит следующим образом:
0x000 RJMP RESET ; Вектор сброса
0x001 RJMP EXT_INT0 ; Внешнее прерывание 0
0x002 RJMP EXT_INT1 ; Внешнее прерывание 1
0x003 RJMP PCINT0 ; Прерывание по изменению уровня 0
0x004 RJMP PCINT1 ; Прерывание по изменению уровня 1
0x005 RJMP PCINT2 ; Прерывание по изменению уровня 2
0x006 RJMP WDT ; Прерывание сторожевого таймера
0x007 RJMP TIM2_COMPA ; Прерывание таймера 2 по совпадению A
0x008 RJMP TIM2_COMPB ; Прерывание таймера 2 по совпадению B
0x009 RJMP TIM2_OVF ; Прерывание таймера 2 по переполнению
0x00A RJMP TIM1_CAPT ; Прерывание таймера 1 по захвату
0x00B RJMP TIM1_COMPA ; Прерывание таймера 1 по совпадению A
0x00C RJMP TIM1_COMPB ; Прерывание таймера 1 по совпадению B
0x00D RJMP TIM1_OVF ; Прерывание таймера 1 по переполнению
0x00E RJMP TIM0_COMPA ; Прерывание таймера 0 по совпадению A
0x00F RJMP TIM0_COMPB ; Прерывание таймера 0 по совпадению B
0x010 RJMP TIM0_OVF ; Прерывание таймера 0 по переполнению
0x011 RJMP SPI_STC ; Прерывание по завершению передачи SPI
0x012 RJMP USART_RXC ; Прерывание по завершению приёма USART
0x013 RJMP USART_UDRE ; Прерывание по пустому регистру данных USART
0x014 RJMP USART_TXC ; Прерывание по завершению передачи USART
0x015 RJMP ADC ; Прерывание по завершению преобразования АЦП
0x016 RJMP EE_RDY ; Прерывание по готовности контроллера EEPROM
0x017 RJMP ANA_COMP ; Прерывание компаратора
0x018 RJMP TWI ; Прерывание контроллера TWI
0x019 NOP ; Зарезервированный адрес
0x01A NOP ; Зарезервированный адрес
0x01B RJMP PCI3 ; Прерывание по изменению уровня на выводе 3
RESET:
0x01C ldi r16, high(RAMEND) ; Main program start
0x01D out SPH, r16 ; Set Stack Pointer to top of RAM
0x01E ldi r16, low(RAMEND)
0x01F out SPL, r16
0x020 sei ; Enable interrupts
0x021 ...
Описание регистров
Регистр управления MCU — MCUCR
MCUCR: 0x35 (0x55) |
Значение по умолчанию: 0x00 |
|---|
MCUCR |
FWKEN |
FPDEN |
EXRFD |
PUD |
IRLD |
IFAIL |
IVSEL |
WCE |
|---|---|---|---|---|---|---|---|---|
R/W |
R/W |
R/W |
R/W |
R/W |
W/O |
R/O |
R/W |
R/W |
Описание битов
Бит |
Обозначение |
Описание |
|---|---|---|
[0] |
WCE |
Бит разрешения обновления MCUCR. |
[1] |
IVSEL |
Бит выбора вектора прерывания. |
[2] |
IFAIL |
Флаг сбоя загрузки конфигурации системы. |
[3] |
IRLD |
Запись 1 инициирует перезагрузку конфигурации системы. |
[4] |
PUD |
Глобальный бит запрета подтяжки (pull-up). |
[5] |
EXRFD |
Бит запрета фильтрации внешнего сброса. |
[6] |
FPDEN |
Управление питанием Flash (Power-down). |
[7] |
FWKEN |
Управление режимом быстрого пробуждения. |
Регистр базового адреса векторов прерываний — IVBASE
IVBASE: 0x75 |
Значение по умолчанию: 0x00 |
|---|
IVBASE |
IVBASE[7:0] |
|---|---|
R/W |
R/W |
Описание битов
Биты |
Обозначение |
Описание |
|---|---|---|
[7:0] |
IVBASE |
Если бит IVSEL установлен в 1, векторы прерываний (за исключением |