Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
MSP430_НВВ.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
1.67 Mб
Скачать

3.2 Система прерываний

Прерывания микроконтроллера генерируются внешними и/или внутренними событиями, такими как, перепад напряжения на внешних портах, переполнение таймера, получение байта данных на входе USART, окончание преобразования АЦП и др.

В MSP микроконтроллерах прерывания могут быть маскируемыми, немаскируемыми (системные сбросы) и условно немаскируемыми. Для возникновения маскируемого прерывания необходимо, чтобы это прерывание было разрешено индивидуальным битом разрешения, а также бит GIE в статусном регистре SR, был установлен в 1. Немаскируемые прерывания не имеют бит индивидуального разрешения, и не зависят от состояния бита GIE. Условно немаскируемые прерывания имеют биты индивидуального разрешения, но не зависят от состояния GIE.

Причиной немаскируемых прерываний могут быть:

- включение питания микроконтроллера;

- срабатывания WatchDog таймера;

- внешний сигнал RESET.

Причиной условно немаскируемых прерываний могут быть:

- активный уровень на внешнем выводе NMI;

- срыв генерации тактового генератора;

- доступ к Flash памяти во время ее программирования.

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

Для обслуживания прерываний используются подпрограммы обработки прерываний ISR (Interrupt Service Routine), начальные адреса которых сведены в таблицу векторов прерываний. Таблица векторов прерываний занимает самую верхнюю область Flash памяти программы и состоит из 16 слов (для MSP430F2xxx – 32 слова, для MSP430F5xx – 64 слова). В каждом слове (векторе) должен быть записан адрес ISR, на который будет передано управление в случае возникновения прерывания. Каждый вектор прерывания соответствует одному или нескольким источникам прерывания. Прерывание вызывается установкой (как правило, аппаратной) флага требования прерывания того или иного устройства.

В том случае, если прерывание берется, флаг требования прерывания сбрасывается автоматически, если он является единственным для данного вектора, в противном случае, этот флаг необходимо сбрасывать программно в ISR. Для этого в ISR необходимо программно тестировать флаги для определения источника, вызвавшего прерывание.

При одновременном возникновении нескольких прерываний управление передается по вектору, имеющему более высокий приоритет. В MSP микроконтроллерах вектора с большим адресом имеют более высокий приоритет. Различные модели MSP контроллеров могут иметь различные таблицы векторов прерываний. Назначения векторов прерываний для модели MSP430F1xx приведены в таблице 5.

Таблица 5

Приоритет

Адрес

Источник

Тип

15 высший

FFFEh

Reset, WatchDog, включен.питания

Немаскир.

14

FFFCh

NMI, авария осциллят., доступ к Flash

Услов. немаск.

13

FFFAh

Модуль СС0 таймера B7

Маскир.

12

FFF8h

Модули СС1-СС6 таймера В7, переполнение таймера B7

Маскир.

11

FFF6h

Аналоговый компаратор

Маскир.

10

FFF4h

WatchDog таймер в режиме интервального таймера

Маскир.

9

FFF2h

Приемник USART0, I2C

Маскир.

8

FFF0h

Передатчик USART0

Маскир.

7

FFEEh

АЦП

Маскир.

6

FFECh

СС0 таймера А3

Маскир.

5

FFEAh

СС1,СС2 таймера А3, переполнение таймера А3

Маскир.

4

FFE8h

Параллельный порт P1

Маскир.

3

FFE6h

Приемник USART1

Маскир.

2

FFE4h

Передатчик USART1

Маскир.

1

FFE2h

Параллельный порт P2

Маскир.

0 низший

FFE0h

ЦАП, DMA

Маскир.

При возникновении прерываний процессор выполняет следующие действия:

  1. если процессор находился в активном режиме, он завершает исполнение текущей инструкции; если процессор находился в остановленном режиме – он переходит в активное состояние;

  2. программный счетчик PC, указывающий на следующую инструкцию, сохраняется в стеке;

  3. статусный регистр SR сохраняется в стеке;

  4. вырабатывается прерывание с наивысшим приоритетом;

  5. сбрасывается флаг требования прерывания, если данному вектору соответствует единственному источник;

  6. все биты статусного регистра SR кроме SCG0 сбрасываются в 0; т.к. бит GIE=0 дальнейшие маскируемые прерывания запрещаются;

  7. в программный счетчик PC загружается содержимое выбранного вектора прерывания.

Как правило, индивидуальные биты разрешения и флаги требования прерывания сосредоточены в регистрах управления периферийных устройств. Однако ряд битов, ответственных за исполнение прерываний находятся в регистрах, расположенных в области SFR. Ко всем регистрам в области SFR можно обращаться, используя только байтовые формы инструкций. Рассмотрим содержимое этих регистров.

    • Регистр IE1 (Interrupt Enable) - разрешение прерываний, адрес - 0, начальное значение 0.

7 6 5 4 3 2 1 0

UTXIE0

URXIE0

ACCVIE

NMIIE

-

-

OFIE

WDTIE

  • Бит 7 - UTXIE0 (USART0 Transmit Interrupt Enable) – разрешение прерывания от передатчика USART0.

  • Бит 6 - URXIE0 (USART0 Receive Interrupt Enable) – разрешение прерывания от приемника USART0.

  • Бит 5 – ACCVIE (Access Violation Interrupt Enable) – разрешение прерывания при нарушении доступа к Flash памяти (см. п. 3.12.2).

  • Бит 4 – NMIIE (NMI Interrupt Enable) – разрешение прерывание от внешнего входа NMI (Non Masked Interrupt).

  • Бит 3,2 – зарезервированы.

  • Бит 1 – OFIE (Oscillator Fault Interrupt Enable) – разрешение прерывание при аварии осциллятора.

  • Бит 0 – WDTIE (WatchDog Timer Interrupt Enable) разрешение прерывания от сторожевого таймера, если он работает в режиме интервального таймера.

Все биты регистра IE1 устанавливаются/сбрасываются программно для разрешения/запрещения соответствующих прерываний.

    • Регистр IE2 (Interrupt Enable) - разрешение прерываний, адрес - 1, начальное значение 0.

7 6 5 4 3 2 1 0

-

-

UTXIE1

URXIE1

-

-

-

-

  • Биты 7,6 – зарезервированы.

  • Бит 5 – UTXIE1 (USART1 Transmit Interrupt Enable) – разрешение прерывания от передатчика USART1.

  • Бит 4 – URXIE1 (USART1 Receive Interrupt Enable) – разрешение прерывания от приемника USART1.

  • Биты 3,2,1,0 – зарезервированы.

Все биты регистра IE2 устанавливаются/сбрасываются программно для разрешения/запрещения соответствующих прерываний.

    • Регистр IFG1 (Interrupt Flag) – флаги прерываний, адрес - 2, начальное значение 82h.

7 6 5 4 3 2 1 0

UTXIFG0

URXIFG0

-

NMIIFG

-

-

OFIFG

WDTIFG

  • Бит 7 - UTXIFG0 (USART0 Transmit Interrupt Flag) – флаг требования прерывания от передатчика USART0. Устанавливается аппаратно при готовности USART0 передать очередной байт данных, или программно. Сбрасывается аппаратно записью новые данные в буфер передатчика USART0.

  • Бит 6 - URXIFG0 (USART0 Receive Interrupt Flag) – флаг требования прерывания от приемника USART0. Устанавливается аппаратно, если USART0 принял очередной байт данных, или программно. Сбрасывается чтением данных из буфера приемника.

  • Бит 5 – зарезервирован.

  • Бит 4 – NMIIFG (NMI Interrupt Flag) – флаг требования прерывание от внешнего входа NMI. Устанавливается аппаратно, если на входе NMI был зарегистрирован активный фронт, или программно. Вызывает переход на ISR с адресом FFFCh. Сбрасывается программно.

  • Бит 3,2 – зарезервированы.

  • Бит 1 – OFIFG (Oscillator Fault Interrupt Flag) – флаг требования прерывание при аварии осциллятора. Устанавливается аппаратно, если в течение интервала времени, приблизительно равного 50 μs, отсутствуют импульсы на выходе тактового генератора. Сбрасывается программно.

  • Бит 0 – WDTIFG (WatchDog Timer Interrupt Flag) флаг требования прерывания от сторожевого таймера, если он работает в режиме интервального таймера. Устанавливается аппаратно при переполнении таймера или программно. Сбрасывается аппаратно, если берется прерывание с адресом FFF4h, или программно.

    • Регистр IFG2 (Interrupt Flag) – флаги прерываний, адрес - 2, начальное значение 20h.

7 6 5 4 3 2 1 0

-

-

UTXIFG1

URXIFG1

-

-

-

-

  • Биты 7,6 – зарезервированы.

  • Бит 5 – UTXIFG1 (USART1 Transmit Interrupt Flag) – флаг требования прерывания от передатчика USART1. Устанавливается аппаратно при готовности USART1 передать очередной байт данных, или программно. Сбрасывается аппаратно записью новые данные в буфер передатчика USART1.

  • Бит 4 - URXIFG1 (USART1 Receive Interrupt Flag) – флаг требования прерывания от приемника USART1. Устанавливается аппаратно, если USART1 принял очередной байт данных, или программно. Сбрасывается аппаратно чтением данных из буфера приемника.

  • Биты 3,2,1,0 – зарезервированы.

Ниже приведен пример структуры программы с использованием прерывания по приему данных от USART0. Текст программы приводиться для трансляции компилятором фирмы IAR.

#include <msp430x14x.h> ; включаем стандартный файл определений, чтобы

; можно было обращаться к регистрам и битам по

; их именам

ORG 1100h ; настраиваем счетчик команд на начало Flash памяти

Start: mov #0A00h, SP ; настраиваем указатель стека на конец ОЗУ

. . .

bis.b #URXIE0, &IE1 ; разрешаем прерывание от приемника USART0

. . .

eint ; глобально разрешаем прерывание

loop: ; начало рабочего цикла программы

. . .

jmp loop ; конец рабочего цикла программы

RxISR: ; начало подпрограммы обработки прерывания от

; приемника USART0

. . .

reti ; конец подпрограммы обработки прерывания

ORG 0FFF2h

DW RxISR ; инициализация вектора прерывания

; приемника USART0

ORG 0FFFEh

DW Start ; установка адреса начала программы

END ; конец программного модуля

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]