Блок управления прерываниями

Материал из MIK32 микроконтроллер

Общая информация

Данный модуль управляет минимально необходимым функционалом для управления прерываниями.

Как такового контроллера прерываний в примененной версии ядра 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: соответствующая линия прерывания активна