- •Микроконтроллеры msp430 Введение
- •1. Центральный процессор msp430
- •1.1. Адресное пространство микроконтроллеров msp430f1xx
- •1.2. Регистровый файл
- •1.3. Байтовая и словная формы инструкций.
- •1.4. Режимы адресации
- •1.4.1 Регистровая адресация
- •1.4.2. Индексная адресация
- •1.4.3 Символьная адресация
- •1.4.4 Абсолютная адресация
- •1.4.5. Косвенная адресация
- •1.4.6. Косвенная адресация с автоинкрементом
- •1.4.7 Непосредственная адресация
- •2. Система команд msp микроконтроллеров
- •2.1. Двухадресные команды
- •2.2 Одноадресные команды
- •2.3 Команды переходов
- •2.4. Эмулируемые команды
- •3. Периферийные устройства микроконтроллеров msp430f1xx
- •3.1 Внешние выводы микроконтроллера msp430f149
- •3.2 Система прерываний
- •3.3 Система тактирования
- •3.4 Сторожевой таймер
- •3.5 Аппаратный умножитель
- •3.6 Порты ввода/вывода
- •3.7 Таймер a3
- •3.8 Таймер b7
- •3.9 Интерфейс usart
- •3.9.1 Режим uart
- •3.9.1.1 Передача данных
- •3.9.1.2 Прием данных
- •3.9.1.3 Поддержка коммуникации в многопроцессорных системах
- •3.9.1.4 Обнаружение стартового бита при приеме
- •3.9.1.5 Скорость передачи
- •3.9.1.6 Регистры usart
- •3.9.2 Режим spi
- •3.9.3 Режим i2c
- •3.9.3.1 Общие сведения о шине i2c
- •3.9.3.2 Режимы работы usart в режиме i2c
- •3.9.3.3 Арбитраж
- •3.9.3.4 Тактирование i2c модуля
- •3.9.3.4 Инициализация модуля i2c
- •3.9.3.5 Регистры модуля usart в режиме i2c
- •3.10 Аналоговый компаратор
- •3.11 Аналого-цифровой преобразователь adc12
- •3.12 Flash контроллер
- •3.12.1 Стирание Flash памяти
- •3.12.2 Запись Flash памяти
- •3.12.3 Регистры Flash контроллера
- •3.13 Цифро-аналоговый преобразователь
- •Контроллер dma
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
Маскир.
При возникновении прерываний процессор выполняет следующие действия:
если процессор находился в активном режиме, он завершает исполнение текущей инструкции; если процессор находился в остановленном режиме – он переходит в активное состояние;
программный счетчик PC, указывающий на следующую инструкцию, сохраняется в стеке;
статусный регистр SR сохраняется в стеке;
вырабатывается прерывание с наивысшим приоритетом;
сбрасывается флаг требования прерывания, если данному вектору соответствует единственному источник;
все биты статусного регистра SR кроме SCG0 сбрасываются в 0; т.к. бит GIE=0 дальнейшие маскируемые прерывания запрещаются;
в программный счетчик 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 ; конец программного модуля
