Блок прерываний EXTI

Материал из MIK32 микроконтроллер
(перенаправлено с «Прерывания»)

Введение

Обработка прерываний от портов ввода-вывода реализована в данном специализированном модуле. Данный модуль бы создан для того, чтобы увеличить количество источников прерываний по портам ввода-вывода до восьми и далее чтобы обеспечить гибкое конфигурирование прерываний по каждой линий под задачи приложения.

Описание модуля

Входные линии трех портов ввода-вывода подключаются к 8 мультиплексорам формируя 8 выходных линий, для которых формируются прерывания. Далее все линии по логическому ИЛИ объединяются и подаются на Внешний Контроллер Прерываний (EPIC) на линию EXTI.

<<Здесь картинка с "мультиплексором">>

Каждый мультиплексор управляется независимо, на основе соответствующих бит поля IRQ_LINE_MUX. Схема коммутации представлена в таблице далее.

Мультиплексор линий прерываний

Прерывание Линия_0

Mux[3:0]

Линия_1

Mux[7:4]

Линия_2

Mux[11:8]

Линия_3

Mux[15:12]

Линия_4

Mux[19:16]

Линия_5

Mux[23:20]

Линия_6

Mux[27:24]

Линия_7

Mux[31:28]

MUX = 0 GPIO_0.0 GPIO_0.1 GPIO_0.2 GPIO_0.3 GPIO_0.4 GPIO_0.5 GPIO_0.6 GPIO_0.7
MUX = 1 GPIO_0.8 GPIO_0.9 GPIO_0.10 GPIO_0.11 GPIO_0.12 GPIO_0.13 GPIO_0.14 GPIO_0.15
MUX = 2 GPIO_1.0 GPIO_1.1 GPIO_1.2 GPIO_1.3 GPIO_1.4 GPIO_1.5 GPIO_1.6 GPIO_1.7
MUX = 3 GPIO_1.8 GPIO_1.9 GPIO_1.10 GPIO_1.11 GPIO_1.12 GPIO_1.13 GPIO_1.14 GPIO_1.15
MUX = 4 GPIO_2.0 GPIO_2.1 GPIO_2.2 GPIO_2.3 GPIO_2.4 GPIO_2.5 GPIO_2.6 GPIO_2.7
MUX = 5 GPIO_0.4 GPIO_0.5 GPIO_0.6 GPIO_0.7 GPIO_0.0 GPIO_0.1 GPIO_0.2 GPIO_0.3
MUX = 6 GPIO_0.12 GPIO_0.13 GPIO_0.14 GPIO_0.15 GPIO_0.8 GPIO_0.9 GPIO_0.10 GPIO_0.11
MUX = 7 GPIO_1.4 GPIO_1.5 GPIO_1.6 GPIO_1.7 GPIO_1.0 GPIO_1.1 GPIO_1.2 GPIO_1.3
MUX = 8 GPIO_1.12 GPIO_1.13 GPIO_1.14 GPIO_1.15 GPIO_1.8 GPIO_1.9 GPIO_1.10 GPIO_1.11
MUX = 9 GPIO_2.4 GPIO_2.5 GPIO_2.6 GPIO_2.7 GPIO_2.0 GPIO_2.1 GPIO_2.2 GPIO_2.3
MUX = 10 0 0 0 0 0 0 0 0

Разрешение и запрещение срабатывания прерываний производится через запись в регистры EXTI_ENABLE_SET и EXTI_ENABLE_CLEAR.

Срабатывание прерывания можно становить по уровню - 1 или 0, а так же по фронтам на входах - спадающий или нарастающий или и тот и другой.

Текущий статус прерывания можно узнать в регистре EXTI_INTERRUPT, где младшие биты соответствующей сработавшей линии. После срабатывания прерывания, в обработчике его следует сбросить записью в регистр EXTI_CLEAR.

Описание регистров

Регистр EXTI_SATE

Смещение: 0x00, Значение после подачи сброса: 0x0000;

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8
Зарезервировано
7 6 5 4 3 2 1 0
S7 S6 S5 S4 S3 S2 S1 S0
ro ro ro ro ro ro ro ro

Биты 31:8 Зарезервировано

Биты 7:0 Sy - Биты отвечают за текущее состояние выводов линий после мультиплексоров. Только чтение.

Нужно дать описание - что значит 1 и что значит 0.

Регистр EXTI_IRQ_LINE_MUX

Смещение: 0x04, Значение после подачи сброса: 0x00000000;

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Mux_7 Mux_6 Mux_5 Mux_4
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
Mux_3 Mux_2 Mux_1 Mux_0
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw

Биты 2y:2y+3 Mux_y[0:3]: Управление мультиплексорами.

При записи меняет выбор мультиплексора на заданный

При чтении - выдает заданный ранее выбор мультиплексора

Регистр EXTI_INTERUPT

Смещение: 0x08, Значение после подачи сброса: 0x0000;

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8
Зарезервировано
7 6 5 4 3 2 1 0
I7 I6 I5 I4 I3 I2 I1 I0
rw rw rw rw rw rw rw rw

Биты 31:8 Зарезервировано

Биты 7:0 Iy - Биты отвечают за сработавшее прерывание. Сбрасывается регистром _CLEAR.

верно?

При чтении выдают состояние линии прерывания:

  • 0: линия не сработала
  • 1: линия сработала

При записи - меняют состояние

?????????

Регистр EXTI_ENABLE_SET

Смещение: 0x0С, Значение после подачи сброса: 0x0000;

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8
Зарезервировано
7 6 5 4 3 2 1 0
IE7 IE6 IE5 IE4 IE3 IE2 IE1 IE0
rw rw rw rw rw rw rw rw

Биты 31:8 Зарезервировано

Биты 7:0 IEy - Биты отвечают за текущее состояние разрешения прерываний.

Регистр разрешения прерываний.

При чтении – текущее состояние разрешений прерываний.

При записи «1» разрешает прерывание от соответствующего вывода

Регистр EXTI_ENABLE_CLEAR

Смещение: 0x10, Значение после подачи сброса: 0x0000;

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8
Зарезервировано
7 6 5 4 3 2 1 0
IE7 IE6 IE5 IE4 IE3 IE2 IE1 IE0
rw rw rw rw rw rw rw rw

Биты 31:8 Зарезервировано

Биты 7:0 IEy - Биты отвечают за текущее состояние разрешения прерываний.

Регистр запрета прерываний.

При чтении – текущее состояние разрешений прерываний.

При записи «1» запрещает прерывание от соответствующего вывода

Регистр EXTI_EDGE

Смещение: 0x14, Значение после подачи сброса: 0x0000;

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8
Зарезервировано
7 6 5 4 3 2 1 0
ED7 ED6 ED5 ED4 ED3 ED2 ED1 ED0
rw rw rw rw rw rw rw rw

Биты 31:8 Зарезервировано

Биты 7:0 EDy - Биты отвечают за текущую конфигурацию срабатывания прерываний.

Регистр типа прерываний.

При чтении – текущий тип прерывания: «1» – по событию (фронт или спад), «0» – по уровню.

Запись «1» – прерывание формируется по событию для соответствующего вывода

Регистр EXTI_LEVEL

Смещение: 0x18, Значение после подачи сброса: 0x000000FF;

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8
Зарезервировано
7 6 5 4 3 2 1 0
LV7 LV6 LV5 LV4 LV3 LV2 LV1 LV0
rw rw rw rw rw rw rw rw

Биты 31:8 Зарезервировано

Биты 7:0 LVy - Биты отвечают за текущую конфигурацию срабатывания прерываний.

Регистр типа прерываний.

При чтении – текущий тип прерывания (инвертированный):  «0» – по событию; «1» – по уровню.

Запись «1» – прерывание формируется по уровню для соответствующего вывода

Регистр EXTI_LEVEL_SET

Смещение: 0x1C, Значение после подачи сброса: 0x0000;

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8
Зарезервировано
7 6 5 4 3 2 1 0
LVS7 LVS6 LVS5 LVS4 LVS3 LVS2 LVS1 LVS0
rw rw rw rw rw rw rw rw

Биты 31:8 Зарезервировано

Биты 7:0 LVCy - Биты отвечают за текущую конфигурацию срабатывания прерываний.

Регистр выбора уровня / события прерываний.

При чтении:

  • «0» – прерывания формируются по спаду или уровню логического «0»;
  • «1» – прерывания формируются по нарастающему фронту или уровню логической «1»

Запись «1» – прерывание формируется по нарастающему фронту или уровню логической «1» для соответствующего вывода

Регистр EXTI_LEVEL_CLEAR

Смещение: 0x20, Значение после подачи сброса: 0x0000;

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8
Зарезервировано
7 6 5 4 3 2 1 0
LVC7 LVC6 LVC5 LVC4 LVC3 LVC2 LVC1 LVC0
rw rw rw rw rw rw rw rw

Биты 31:8 Зарезервировано

Биты 7:0 LVCy - Биты отвечают за текущую конфигурацию срабатывания прерываний.

Регистр  уровня / события прерываний.

При чтении:

  • «0» – прерывания формируются по спаду или уровню логического «0»;
  • «1» – прерывания формируются по нарастающему фронту или уровню логической «1»

Запись «1»– прерывание формируется по спаду или уровню логического «0» для соответствующего вывода

Регистр EXTI_ANY_EDGE_SET

Смещение: 0x24, Значение после подачи сброса: 0x0000;

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8
Зарезервировано
7 6 5 4 3 2 1 0
AEDS7 AEDS6 AEDS5 AEDS4 AEDS3 AEDS2 AEDS1 AEDS0
rw rw rw rw rw rw rw rw

Биты 31:8 Зарезервировано

Биты 7:0 AEDSy - Биты отвечают за текущую конфигурацию срабатывания прерываний.

Регистр установки срабатывания прерываний по любому событию.

При чтении:

  • «0» – прерывания не формируются и по спаду и по фронту;
  • «1» – прерывания формируются и по спаду и по фронту;

Запись «1» – прерывание формируется по любому изменению соответствующего вывода

Регистр EXTI_ANY_EDGE_CLEAR

Смещение: 0x28, Значение после подачи сброса: 0x0000;

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8
Зарезервировано
7 6 5 4 3 2 1 0
AEDC7 AEDC6 AEDC5 AEDC4 AEDC3 AEDC2 AEDC1 AEDC0
rw rw rw rw rw rw rw rw

Биты 31:8 Зарезервировано

Биты 7:0 AEDCy - Биты отвечают за текущую конфигурацию срабатывания прерываний.

Регистр снятия срабатывания прерываний по любому событию.

При чтении:

  • «0» – прерывания не формируются и по спаду и по фронту;
  • «1» – прерывания формируются и по спаду и по фронту;

Запись «1» – прерывание перестает формироваться по любому изменению соответствующего вывода

Регистр EXTI_CLEAR

Смещение: 0x2С, Значение после подачи сброса: -;

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8
Зарезервировано
7 6 5 4 3 2 1 0
ICLR7 ICLR6 ICLR5 ICLR4 ICLR3 ICLR2 ICLR1 ICLR0
w w w w w w w w

Биты 31:8 Зарезервировано

Биты 7:0 ICLRy - Биты отвечают за сброс сработавшего прерывания.

Регистр сброса флагов прерываний по событию.

Запись «1» – очищает флаг прерывания соответствующего вывода в регистре _INTERRUPT