Блок управления прерываниями
Общая информация
Данный модуль управляет минимально необходимым функционалом для управления прерываниями.
Как такового контроллера прерываний в примененной версии ядра SCR1 нет, и все прерывания после срабатывания вызывают один и тот же обработчик, располагающийся по адресу в памяти 0x0000_00С0. И по сути данный модуль собирает маскируемые линии от различных периферийных блоков в логическое ИЛИ и выход выдает на единую линию прерывания.
<<Здесь нужна картинка с логической организацией блока>>
Работа с модулем
Введение
Модуль реализует поддержку 32 линий прерываний от внешних устройств. Модуль обеспечивает формирование прерываний как по уровню, так и при детектировании фронта(спада) на линии прерывания.
Перечень линий прерывания для устройств, подключённых к контроллеру прерываний, указан в таблице
Номер линии прерывания | Имя источника прерывания |
0 | Timer32_0 |
1 | USART_0 |
2 | USART_1 |
3 | SPI_0 |
4 | SPI_1 |
5 | EXTI - блок прерываний от линий ввода-вывода GPIO |
6 | I2C_0 |
7 | I2C_1 |
8 | Сторожевой таймер |
9 | Timer16_0 |
10 | Timer16_1 |
11 | Timer16_2 |
12 | Timer32_1 |
13 | Timer32_2 |
14 | SPIFI |
15 | RTC |
16 | EEPROM |
17 | Сторожевой таймер шины (перефирийные устройства) |
18 | Сторожевой таймер шины (SPIFI) |
19 | Сторожевой таймер шины (EEPROM) |
20 | ПДП |
21 | Монитор частоты |
22 | Монитор напряжения AVCC (ниже порога) |
23 | Монитор напряжения AVCC (выше порога) |
24 | Монитор напряжения VCC (ниже порога) |
25 | Монитор напряжения VCC (выше порога) |
26 | Недостатоное напряжение батареи |
27 | BrouwnOut детектор |
28 | Монитор температуры |
29 | АЦП |
30 | DAC0 |
31 | DAC1 |
Описание регистров
Далее перечислены регистры модуля
Регистр MASK_LEVEL_SET
Смещение: 0x0, Значение после подачи сброса: 0x00000000;
31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
MLS31 | MLS30 | MLS29 | MLS28 | MLS27 | MLS26 | MLS25 | MLS24 | MLS23 | MLS22 | MLS21 | MLS20 | MLS19 | MLS18 | MLS17 | MLS16 |
rw | rw | rw | rw | rw | rw | rw | rw | rw | rw | rw | rw | rw | rw | rw | rw |
15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
MLS15 | MLS14 | MLS13 | MLS12 | MLS11 | MLS10 | MLS9 | MLS8 | MLS7 | MLS6 | MLS5 | MLS4 | MLS3 | MLS2 | MLS1 | MLS0 |
rw | rw | rw | rw | rw | rw | rw | rw | rw | rw | rw | rw | rw | rw | rw | rw |
Биты 31:0 MLSy - Биты линий прерываний, отвечающие за активацию срабатывания прерывания по уровню (y=0...31)
При записи:
- 0: соответствующая линия прерывания не меняет тип
- 1: соответствующая линия прерывания активируется на срабатывание по уровню
При чтении текущее состояние линии прерывания
- 0: прерывание не срабатывает по уровню
- 1: прерывание срабатывает по уровню
Регистр MASK_LEVEL_CLEAR
Смещение: 0x4, Значение после подачи сброса: 0x00000000;
31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
MLC31 | MLC30 | MLC29 | MLC28 | MLC27 | MLC26 | MLC25 | MLC24 | MLC23 | MLC22 | MLC21 | MLC20 | MLC19 | MLC18 | MLC17 | MLC16 |
rw | rw | rw | rw | rw | rw | rw | rw | rw | rw | rw | rw | rw | rw | rw | rw |
15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
MLC15 | MLC14 | MLC13 | MLC12 | MLC11 | MLC10 | MLC9 | MLC8 | MLC7 | MLC6 | MLC5 | MLC4 | MLC3 | MLC2 | MLC1 | MLC0 |
rw | rw | rw | rw | rw | rw | rw | rw | rw | rw | rw | rw | rw | rw | rw | rw |
Биты 31:0 MLCy - Биты линий прерываний, отвечающие за деактивацию срабатывания прерывания по уровню (y=0...31 - номер линии прерывания)
При записи:
- 0: соответствующая линия прерывания не меняет тип
- 1: соответствующая линия прерывания деактивируется на срабатывание по уровню
При чтении текущее состояние линии прерывания
- 0: прерывание не срабатывает по уровню
- 1: прерывание срабатывает по уровню
Регистр MASK_EDGE_SET
Смещение: 0x8, Значение после подачи сброса: 0x00000000;
31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
MES31 | MES30 | MES29 | MES28 | MES27 | MES26 | MES25 | MES24 | MES23 | MES22 | MES21 | MES20 | MES19 | MES18 | MES17 | MES16 |
rw | rw | rw | rw | rw | rw | rw | rw | rw | rw | rw | rw | rw | rw | rw | rw |
15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
MES15 | MES14 | MES13 | MES12 | MES11 | MES10 | MES9 | MES8 | MES7 | MES6 | MES5 | MES4 | MES3 | MES2 | MES1 | MES0 |
rw | rw | rw | rw | rw | rw | rw | rw | rw | rw | rw | rw | rw | rw | rw | rw |
Биты 31:0 MESy - Биты линий прерываний, отвечающие за активацию срабатывания прерывания по фронту (y=0...31 - номер линии прерывания)
При записи:
- 0: соответствующая линия прерывания не меняет тип
- 1: соответствующая линия прерывания активируется на срабатывание по фронту
При чтении текущее состояние линии прерывания
- 0: прерывание не срабатывает по фронту
- 1: прерывание срабатывает по фронту
Регистр MASK_EDGE_CLEAR
Смещение: 0x0C, Значение после подачи сброса: 0x00000000;
31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
MEC31 | MEC30 | MEC29 | MEC28 | MEC27 | MEC26 | MEC25 | MEC24 | MEC23 | MEC22 | MEC21 | MEC20 | MEC19 | MEC18 | MEC17 | MEC16 |
rw | rw | rw | rw | rw | rw | rw | rw | rw | rw | rw | rw | rw | rw | rw | rw |
15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
MEC15 | MEC14 | MEC13 | MEC12 | MEC11 | MEC10 | MEC9 | MEC8 | MEC7 | MEC6 | MEC5 | MEC4 | MEC3 | MEC2 | MEC1 | MEC0 |
rw | rw | rw | rw | rw | rw | rw | rw | rw | rw | rw | rw | rw | rw | rw | rw |
Биты 31:0 MECy - Биты линий прерываний, отвечающие за деактивацию срабатывания прерывания по фронту (y=0...31 - номер линии прерывания)
При записи:
- 0: соответствующая линия прерывания не меняет тип
- 1: соответствующая линия прерывания деактивируется на срабатывание по фронту
При чтении текущее состояние линии прерывания
- 0: прерывание не срабатывает по фронту
- 1: прерывание срабатывает по фронту
Регистр STATUS
Смещение: 0x18, Значение после подачи сброса: 0x00000000;
31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
S31 | S30 | S29 | S28 | S27 | S26 | S25 | S24 | S23 | S22 | S21 | S20 | S19 | S18 | S17 | S16 |
ro | ro | ro | ro | ro | ro | ro | ro | ro | ro | ro | ro | ro | ro | ro | ro |
15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
S15 | S14 | S13 | S12 | S11 | S10 | S9 | S8 | S7 | S6 | S5 | S4 | S3 | S2 | S1 | S0 |
ro | ro | ro | ro | ro | ro | ro | ro | ro | ro | ro | ro | ro | ro | ro | ro |
Биты 31:0 Sy - Биты линий прерываний, отвечающие за срабатывании соответствующей линии (y=0...31 - номер линии прерывания)
При записи:
- 0: соответствующая линия прерывания не активна
- 1: соответствующая линия прерывания активна
Регистр RAW_STATUS
Смещение: 0x1C, Значение после подачи сброса: 0x00000000;
31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
RS31 | RS30 | RS29 | RS28 | RS27 | RS26 | RS25 | RS24 | RS23 | RS22 | RS21 | RS20 | RS19 | RS18 | RS17 | RS16 |
ro | ro | ro | ro | ro | ro | ro | ro | ro | ro | ro | ro | ro | ro | ro | ro |
15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
RS15 | RS14 | RS13 | RS12 | RS11 | RS10 | RS9 | RS8 | RS7 | RS6 | RS5 | RS4 | RS3 | RS2 | RS1 | RS0 |
ro | ro | ro | ro | ro | ro | ro | ro | ro | ro | ro | ro | ro | ro | ro | ro |
Биты 31:0 RSy - Биты линий прерываний, отвечающие за активность соответствующей линии без учета маскирования (y=0...31 - номер линии прерывания)
При записи:
- 0: соответствующая линия прерывания не активна
- 1: соответствующая линия прерывания активна