vak: (Default)
[personal profile] vak posting in [community profile] besm6
Вкратце опишу здесь особенности контроллеров прерываний для архитектур AVR ATmega, ARM Cortex-M4 и MIPS PIC32. Будет информация к размышлению, как нам обустроить МЭСМ-6.

AVR ATmega


Количество внешних прерываний зависит от модели конкретного микроконтроллера, и находится в пределах нескольких десятков. Каждое внешнее прерывание имеет свой адрес обработчика, например:
    Адрес   Прерывание
------------------------------------
    0x000   Power-on Reset
    0x001   External Interrupt Request 0
    0x002   External Interrupt Request 1
    0x003   Pin Change Interrupt Request 0
    0x004   Pin Change Interrupt Request 1
    0x005   Pin Change Interrupt Request 2
    0x006   Watchdog Time-out Interrupt
    0x007   Timer/Counter2 Compare Match A
    0x008   Timer/Counter2 Compare Match B
    0x009   Timer/Counter2 Overflow
    0x00A   Timer/Counter1 Capture Event
    0x00B   Timer/Counter1 Compare Match A
    0x00C   Timer/Coutner1 Compare Match B
    0x00D   Timer/Counter1 Overflow
    0x00E   Timer/Counter0 Compare Match A
    0x00F   Timer/Counter0 Compare Match B
    0x010   Timer/Counter0 Overflow
    0x011   SPI Serial Transfer Complete
    0x012   USART Rx Complete
    0x013   USART, TX Output Register Empty
    0x014   USART, Tx Complete
    0x015   ADC Conversion Complete
    0x016   EEPROM Ready
Есть глобальный бит разрешения всех прерываний GIE: Global Interrupt Enable.

Для каждого отдельного прерывания есть бит разрешения в управляющих регистрах соответствующего блока (таймер, UART, SPI и т.п.).

Здесь нет общего регистра, откуда можно было бы прочитать состояние сразу всех прерываний. Это не очень удобно при отладке. В ситуации, когда возникло внешнее прерывание, и не сразу понятно какое, надо прочитать кучу разных регистров из разных блоков, чтобы определить виновника.

Cortex M4


Имеется до 240 внешних прерываний. Каждое внешнее прерывание имеет свой адрес обработчика. Младшие адреса обработчиков заняты для внутренних исключений, например:
    Адрес   Прерывание
------------------------------------
    0x0000  Initial SP value
    0x0004  Reset
    0x0008  NMI
    0x000C  Hard fault
    ...     ...
    0x0040  IRQ0
    0x0044  IRQ1
    0x0048  IRQ2
    ...     ...
Регистры управления прерываниями имеют размер 256 бит (8 слов по 32 бита).

Регистры ISER и ICER: маска разрешённых прерываний. Запись единицы в ISER разрешает соотвествующее прерывание. Запись единицы в ICER запрещает соотвествующее прерывание.

Регистр IABR: маска активных прерываний, которые стучатся на вход процессора. Некоторые из них могут быть разрешёнными, другие запрещёнными. Только чтение.

Регистр IPSR: номер активного прерывания c наибольшим приоритетом.Только чтение.

PIC32


Есть глобальный бит разрешения прерываний в процессоре (Status.IE). Плюс к этому набор регистров в блоке контроллера прерываний.

Процессор программно конфигурируется на (1) один общий обработчик всех прерываний, или (2) отдельный обработчик для каждого прерывания, с заданным шагом адреса.

Имеется до 256 внешних прерываний. Регистры управления прерываниями имеют размер 256 бит (8 слов по 32 бита).

Регистр IEC: Interrupt Enable Control, или маска разрешённых прерываний. Писать в него можно также по двум дополнительным адресам: IECSET - запись единицы разрешает соотвествующее прерывание; IECCLR - запись единицы запрещает соотвествующее прерывание.

Регистр IFS: Interrupt Flag Status, или маска возникших прерываний. При поступлении запроса на прерывание бит маски устанавливается в единицу ("залипает"). Должен быть сброшен программно в 0. Писать можно также по двум дополнительным адресам: IFSSET - запись единицы устанавливает соотвествующий бит статуса; IFSCLR - запись единицы сбрасывает соотвествующий бит статуса.

Регистр INTSTAT: номер активного прерывания c наибольшим приоритетом.

Profile

Сообщество любителей БЭСМ-6

January 2026

S M T W T F S
    123
45678910
11121314151617
18192021222324
2526272829 3031

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Mar. 3rd, 2026 05:26 pm
Powered by Dreamwidth Studios