Микроконтроллеры MSP430

Адресное пространство микроконтроллеров MSP430F1xx. Байтовая и словная формы инструкций. Система команд MSP микроконтроллеров. Периферийные устройства микроконтроллеров MSP430F1xx. Аналого-цифровой преобразователь ADC12, его технические характеристики.

Рубрика Коммуникации, связь, цифровые приборы и радиоэлектроника
Вид курсовая работа
Язык русский
Дата добавления 04.05.2014
Размер файла 278,1 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

P2.7/TA0

27

I/O

Бит 7 порта 2 ; Выход модуля сравнения 0 Таймера А

P3.0/STE0

28

I/O

Бит 0 порта 3 ; Разрешение работы передатчика SPI0

P3.1/SIMO0

29

I/O

Бит 1 порта 3 ; Вход/выход приемник-передатчика SPI0

P3.2/SOMI0

30

I/O

Бит 2 порта 3 ; Вход/выход приемник-передатчика SPI0

P3.3/UCLK0

31

I/O

Бит 3 порта 3 ; Вход внешнего тактирования USART/SPI 0

P3.4/UTXD0

32

I/O

Бит 4 порта 3 ; Выход передатчика UART 0

P3.5/URXD0

33

I/O

Бит 5 порта 3 ; Вход приемника UART 0

P3.6/UTXD1

34

I/O

Бит 6 порта 3 ; Выход передатчика UART 1

P3.7/URXD1

35

I/O

Бит 7 порта 3 ; Вход приемника UART 1

P4.0/TB0

36

I/O

Бит 0 порта 4; Вход/Выход модуля 0 захвата/сравнения Таймера B

P4.1/TB1

37

I/O

Бит 1 порта 4; Вход/Выход модуля 1 захвата/сравнения Таймера B

P4.2/TB2

38

I/O

Бит 2 порта 4; Вход/Выход модуля 2 захвата/сравнения Таймера B

P4.3/TB3

39

I/O

Бит 3 порта 4; Вход/Выход модуля 3 захвата/сравнения Таймера B

P4.4/TB4

40

I/O

Бит 4 порта 4; Вход/Выход модуля 4 захвата/сравнения Таймера B

P4.5/TB5

41

I/O

Бит 5 порта 4; Вход/Выход модуля 5 захвата/сравнения Таймера B

P4.6/TB6

42

I/O

Бит 6 порта 4; Вход/Выход модуля 6 захвата/сравнения Таймера B

P4.7/TBCLK

43

I/O

Бит 7 порта 4; Вход внешнего тактирования Таймера B

P5.0/STE1

44

I/O

Бит 0 порта 5; Разрешение работы передатчика SPI1

P5.1/SIMO1†

45

I/O

Бит 1 порта 5; Вход/выход приемник-передатчика SPI1

P5.2/SOMI1†

46

I/O

Бит 2 порта 5; Вход/выход приемник-передатчика SPI1

P5.3/UCLK1†

47

I/O

Бит 3 порта 5; Вход внешнего тактирования USART/SPI 1

P5.4/MCLK

48

I/O

Бит 4 порта 5; Выходной сигнал тактирования MCLK

P5.5/SMCLK

49

I/O

Бит 5 порта 5; Выходной сигнал тактирования SMCLK

P5.6/ACLK

50

I/O

Бит 6 порта 5; Выходной сигнал тактирования ACLK

P5.7/TBOUTH

51

I/O

Бит 7 порта 5; Вход переключения выходов Таймера В в треть состояние

P6.0/A0

59

I/O

Бит 0 порта 6; Аналоговый вход 0 АЦП

P6.1/A1

60

I/O

Бит 1 порта 6; Аналоговый вход 1 АЦП

P6.2/A2

61

I/O

Бит 2 порта 6; Аналоговый вход 2 АЦП

P6.3/A3

2

I/O

Бит 3 порта 6; Аналоговый вход 3 АЦП

P6.4/A4

3

I/O

Бит 4 порта 6; Аналоговый вход 4 АЦП

P6.5/A5

4

I/O

Бит 5 порта 6; Аналоговый вход 5 АЦП

P6.6/A6

5

I/O

Бит 6 порта 6; Аналоговый вход 6 АЦП

P6.7/A7

6

I/O

Бит 7 порта 6; Аналоговый вход 7 АЦП

RST/NMI

58

I

Вход внешнего сброса; Вход немаскируемого прерывания

TCK

57

I

Вход тактирования JTAG интерфейса

TDI/TCLK

55

I

Вход данных JTAG интерфейса

TDO/TDI

54

I/O

Вход/выход данных JTAG интерфейса

TMS

56

I

Вход тестового режима JTAG интерфейса

VeREF+

10

I

Вход внешнего опорного напряжения АЦП

VREF+

7

O

Выход встроенного опорного напряжения АЦП

VREF?/VeREF?

11

I

Общий провод опорного напряжения АЦП

XIN

8

I

Вход тактового генератора LFXT1

XOUT

9

O

Выход тактового генератора LFXT1

XT2IN

53

I

Вход тактового генератора XT2

XT2OUT

52

O

Выход тактового генератора XT2

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 контроллеров могут иметь различные таблицы векторов прерываний. Назначения векторов прерываний для модели MSP430F149 приведены в таблице 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

Маскир.

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

Зарезервирован

Маскир.

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

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

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

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

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

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

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

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

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

Ш Регистр IE1 (Interrupt Enable) - разрешение прерываний, адрес - 0, начальное значение 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.

-

-

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.

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.

-

-

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 ; конец программного модуля

3.3 Система тактирования

Внутреннее тактирование микроконтроллеров MSP430 осуществляется с помощью трех различных тактовых сигналов:

· MCLK - Master Clock - используется для тактирования процессорного ядра микроконтроллера;

· SMCLK - Sub-Main Clock - используется для тактирования периферийных устройств;

· ACLK - Auxiliary Clock - вспомогательная частота, также может использоваться для тактирования периферийных устройств.

В качестве источников для этих частот могут использоваться два встроенных генератора, предназначенных для работы с внешними резонаторами - LFXT1 и XT2, и управляемый генератор DCO (Digital Controlled Oscillator), выполненный на базе встроенного RC- генератора.

Генератор LFXT1 может работать в двух режимах - низкочастотном и высокочастотном. В низкочастотном режиме он адаптирован на прямое подключение стандартного резонатора частотой 32768 Hz. В высокочастотном режиме он может работать с резонаторами в частотном диапазоне от 450 kHz до 8 MHz.

Частоту генератора DCO можно перестраивать программно в диапазоне ? 120 kHz - 5 MHz. Следует заметить, однако, что частота, генерируемая DCO, существенно зависит от напряжения питания и температуры.

В реальных системах для тактирования CPU и быстрой периферии используются, как правило, высокочастотные сигналы MCLK и SMCLK соответственно, а для тактирования медленной периферии - сигнал ACLK с частотой 32768 Hz. Генератор DCO используется для приложений, не требующих высокой точности и стабильности генерации временных интервалов.

Рисунок 2. Структурная схема модуля тактирования

Как видно из рисунка, систему тактирования можно гибко настраивать, исходя из требований прикладной задачи, которая реализуется MSP микроконтроллером. В качестве источника для частоты MCLK можно программным образом выбрать частоты, выдаваемые генераторами LFXT1, XT2 или DCO. Кроме того, входную частоту сигнала MCLK можно снизить, используя предварительный делитель частоты. Наконец, для уменьшения потребления микроконтроллера, частоту MCLK можно выключить с помощью бита CPUOFF статусного регистра SR. Частоты ACLK и SMCLK также можно понизить с помощью предварительных делителей, а частоту SMCLK можно выключить с помощью бита SCG1 статусного регистра SR. Генератор DCO использует частоту встроенного RC генератора, который для минимизации общего потребления так же может быть выключен с помощью бита статусного регистра SCG0. Так как центральный процессор тактируется частотой MCLK, а периферийные устройства частотами ACLK или SMCLK, имеется возможность использования нескольких режимов пониженного потребления LPM (Low Power Mode) всего микроконтроллера в зависимости от комбинации бит CPUOFF, OSCOFF, SCG1, SCG0 статусного регистра.

Различают всего 6 режимов LPM. Комбинации управляющих бит и описание режимов LPM приведено в таблице 6.

Таблица 6

Режим

SCG1

SCG0

OscOff

CPUOff

Описание

Активный

0

0

0

0

CPU и периферия активны

LPM0

0

0

0

1

CPU выключено; вся периферия активна

LPM1

0

1

0

1

CPU выключен; DCO выключен, если не используется для MCLK или SMCLK; вся периферия активна

LPM2

1

0

0

1

CPU, SMCLK , DCO выключены; RC генератор и ACLK активны

LPM3

1

1

0

1

Активен только ACLK

LPM4

X

x

1

1

CPU и вся периферия остановлены

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

Уровень потребления микросхемы различен для разных режимов LPM. Его типовое значение при питании в 3 В соответствует следующим значениям:

· Активный - 340 мA/MHz;

· LPM0 - 70 мA/MHz;

· LPM2 - 17 мA/MHz;

· LPM3 - 2 мA/MHz;

· LPM4 - 0.1 мA/MHz.

Выход из режимов LPM0-LPM3 осуществляется по прерыванию от работающих периферийных устройств или сигналом RESET. Выход из режимов LPM4 может быть осуществлен только по сигналу RESET, т.к. вся периферия заморожена. Естественно внешний вывод RESET/NMI должен быть сконфигурирован для функции сброса.

При вхождении в прерывание из режимов LPM процессорное ядро и вся периферия переходит в активное состояние, т.к. во все биты статусного регистра записываются нули (см. п. 3.2 ). Интересен тот факт, что при выходе из подпрограммы обработки прерывания с помощью команды RETI, режим LPM автоматически восстанавливается, т.к. в SR загружается из стека его предыдущее состояние. Если после прерывания, необходимо, чтобы CPU находился в активном режиме, перед выходом из прерывания необходимо подкорректировать исходное состояние SR, сохраненное в стеке. Это можно сделать, например, командой bic #CPUOFF, 0(SP)

В этом случае команда RETI загрузит в SR значение со сброшенным битом CPUOFF.

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

Таблица 7

Наименование

Назначение

Адрес

Началь. Значение

BCSCTL1

Регистр управления 1 системы тактирования

57h

84h

BCSCTL2

Регистр управления 2 системы тактирования

58h

0

DCOCTL

Регистр управления DCO

56h

60h

IE1

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

0

0

IFG1

Регистр флагов прерывания

2

0

Ш BCSCTL1 (Base Clock System Control 1) - регистр управление базовой системы тактирования 1.

XT2OFF

XTS

DIVA 1,0

XT5V

RSEL 2,1,0

· Бит 7 - XT2OFF - выключение генератора XT2. Устанавливается/сбрасывается программно для запрета/разрешения работы генератора XT2. По сбросу в этот бит записывается 1, поэтому по умолчанию генератор XT2 запрещен.

· Бит 6 - XTS (XT1 Select) - выбор режима генератора LFXT1. Устанавливается программно для выбора режима работы LFXT1:

0 - низкочастотный режим (Low Frequency Mode);

1 - высокочастотный режим (High Frequency Mode).

· Биты 5 и 4 - DIVA (Divider ACLK) - делитель частоты ACLK. Устанавливают коэффициент делителя для частоты ACLK

DIVA1

DIVA0

Делитель

0

0

1 / 1

0

1

1 / 2

1

0

1 / 4

1

1

1 / 8

Бит 3 - XT5V - всегда должен быть сброшен.

· Биты 2, 1, 0 - RSEL (Resistor Select) - выбор резистора. Комбинация этих бит устанавливает номинал внутреннего резистора RC генератора, что, в свою очередь, приводит к перестройке диапазона частоты, генерируемой RC генератором. При сбросе в эту группу бит аппаратно записывается комбинация 100b, что соответствует среднему диапазону частот. Зависимость генерируемой частоты DCO от содержимого этих бит будет рассмотрена позже.

Ш BCSCTL2 (Base Clock System Control 2) - регистр управление базовой системы тактирования 2.

SELM 1,0

DIVM 1,0

SELS

DIVS 1,0

DCOR

· Бит 7, 6 - SELM (Select MCLK) - выбор источника для MCLK

SELM1

SELM0

Источник

0

0

DCOCLK

0

1

DCOCLK

1

0

XT2CLK

1

1

LFXT1CLK

· Биты 5, 4 - DIVM (Divider MCLK) - делитель частоты MCLK. Устанавливают коэффициент делителя для частоты MCLK

DIVM1

DIVM0

Делитель

0

0

1 / 1

0

1

1 / 2

1

0

1 / 4

1

1

1 / 8

· Бит 3 - SELS (Select SMCLK) - выбор источника для SMCLK

0 - источник DCOCLK;

1 - источник XT2CLK.

· Биты 2 и 1 - DIVS (Divider SMCLK) - делитель частоты SMCLK. Устанавливают коэффициент делителя для частоты SMCLK

DIVS1

DIVS0

Делитель

0

0

1 / 1

0

1

1 / 2

1

0

1 / 4

1

1

1 / 8

· Бит 0 - DCOR (DCO Resistor) - выбор частотозадающего резистора для RC генератора DCO

0 - внутренний резистор;

1 - внешний резистор, подключаемый к порту P2.5.

В том случае, если выбран внутренний резистор, его значение устанавливается битами RSEL регистра BCSCTL1.

Ш DCOCTL (DCO Control) - регистр управление DCO.

DCO

MOD

· Биты 7, 6 , 5 - DCO - содержимое этих бит подстраивает частоту DCO внутри диапазона RC генератора. Таким образом, частота DCO зависит как от битов RSEL, так и от рассматриваемых битов. Частоту, генерируемую DCO, принято обозначать как FDCOXY , где X- значение битов RSEL регистра BCSCTL1, а Y - значение битов DCO регистра DCOCTL. В технической документации приведены типовые значения частот FDCO при напряжении питания 3 В

FDCO03 ? 0.13 MHz

FDCO13 ? 0.18 MHz

FDCO23 ? 0.28 MHz

FDCO33 ? 0.47 MHz

FDCO43 ? 0.75 MHz

FDCO53 ? 1.3 MHz

FDCO63 ? 2.0 MHz

FDCO73 ? 3.2 MHz

FDCO77 ? 4.9 MHz

При сбросе в эти биты записывается значение 011b для установки средней частоты генерации DCO. Таким образом, после сброса микроконтроллера его тактирование осуществляется от генератора DCO с частотой FDCO43 ? 0.75 MHz.

· Биты 4, 3, 2, 1, 0 - MOD (Modulator) - смешивает частоты FDCO и FDCO+1 в пропорции, определяемой содержанием этих бит. Средний период генерируемой частоты можно определить по формуле

T = ((32-MODx)*TDCO + MODx *TDCO+1) / 32,

где TDCO и TDCO+1 - периоды частот FDCO и FDCO+1 соответственно.

Усредненную частоту генерации DCO можно определить по формуле:

F = 32* FDCO* FDCO+1/((32-MODx)* FDCO+1 + MODx * FDCO)

Регистры IE1 и IFG1, содержащие бит разрешения прерывания и флаг аварии осцилляторов, был рассмотрен в разделе 3.2.

Многоступенчатая подстройка частоты DCO позволяет достаточно точно (11 двоичных разрядов) выставить требуемую частоту генерации. Эта техника используется при построении программно-аппаратного умножителя частоты, что позволяет получить частоту DCO в определенное количество раз больше чем опорная частота. В качестве опорной частоты, как правило, используется генератор LFXT1 со стабильным внешним резонатором 32768 Hz, а высокие частоты MCLK и SMCLK генерируются с помощью DCO. Для обеспечения стабильности DCO, необходимо программно организовать периодическое измерение и подстройку генерируемой частоты таким образом, чтобы отношение FDCO и LFXT1CLK оставалось постоянным. Такая техника, несмотря на некоторую сложность реализации, дает возможность иметь хорошую производительность процессора при низком потреблении и уровне излучаемых электромагнитных помех.

Для удобства подстройки частоты при организации умножителя может потребоваться, чтобы номинальная частота DCO соответствовала средним значениям полей DCO и MOD регистра DCOCTL. Для достижения этого можно использовать режим внешнего резистора RC-генератора. Его номинал подбирается таким образом, чтобы удовлетворить данным условиям.

Следует добавить также, что при перестройке DCO с помощью поля RSEL его частота изменяется в соотношении F RSEL+1 / F RSEL ? 1.65

При перестройке DCO с помощью поля DCO его частота изменяется в соотношении F DCO+1 / F DCO ? 1.12

В качестве демонстрации механизма работы модулятора DCO приведем следующий пример. Предположим, поля RSEL = 4, DCO = 3 и MOD = 10.

Тогда FDCO43 = 750 kHz, а FDCO44 = 750 *1.12 = 840 kHz

Так как значение поля MOD отлично от нуля, на выходе DCO получим периодическую последовательность импульсов, из которых 10 периодов соответствуют частоте 840 kHz, а 22 периода - частоте 750 kHz. Усредненная частота определиться как

F=32*750*840/((32-10)*840 + 10*750)=775.98 kHz

ПРИМЕР .

Проинициализировать тактовую систему MSP430F14x.

Исходные данные:

LFXT1 = 32768 Hz

XT2 = 8 MHz

MCLK = 8 MHz

SMCLK = 4 MHz

ACLK = 32768 Hz

Для инициализации системы тактирования необходимо выполнить следующие шаги:

1) Включить генератор XT2;

2) Очистить бит OFIFG в регистре IFG1;

3) Выдержать паузу не менее 50 мs ( см. описание IFG1.OFIFG в п.3.2);

4) Проверить состояние бита OFIFG;

5) Если OFIFG=1 (генератор еще не завелся) перейти к пункту 2;

6) Настроить MCLK, SMCLK

7) Выключить DCO.

bic.b #XT2OFF, &BCSCTL1 ; включить XT2

L1: bic.b #OFIFG, &IFG1 ; сбросить OFIFG;

mov #0FFh, R4 ; программная задержка

L2: dec R4 ; пустыми циклами

jnz L2 ; закончена?

bit.b #OFIFG, &IFG ; тестирование OFIFG

jnz L1 ; OFIFG=0 ?;

mov #SELM1+SELS+DIVS1, &BCSCTL2 ; MCLK, SMCLK от XT2,

; для SMCLK - делитель 1 / 2

bis.b #SCG0, SR ; выключить DCO

3.4 Сторожевой таймер

Сторожевой таймер (WatchDog Timer) предназначен для сброса CPU, в том случае если программа, в результате каких-либо сбоев, начинает исполнять несанкционированные команды. Сторожевой таймер, как правило, организуется в виде свободно бегущего таймера-счетчика, который при его переполнении вызывает аппаратный сброс всего микроконтроллера. Для исключения непредусмотренного сброса, программа должна сама периодически сбрасывать этот таймер.

В MSP микроконтроллерах 16-ти битный сторожевой таймер может работать собственно в режиме WatchDog или в режиме интервального таймера. В режиме интервального таймера аппаратный сброс при переполнении не производится. Вместо этого генерируется прерывание с адресом вектора FFF4h.

Период переполнения зависит, во-первых, от частоты тактирования таймера, и, во-вторых, от коэффициента делителя входной частоты.

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

Таблица 8

Наименование

Назначение

Адрес

Началь. Значение

WDTCTL

Регистр управления

120h

6900h

IE1

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

0

0

IFG1

Регистр флагов прерывания

2

0

Регистр управления WDTCTL содержит также биты управления режимом внешнего вывода RESET/NMI. К этому регистру необходимо обращаться только с помощью словных форм инструкций. Регистры IE1 и IFG1, содержащие биты разрешения и флаги прерываний соответственно были рассмотрены в разделе 3.2

Ш WDTCTL (WatchDog Timer Control) - регистр управления сторожевым таймером.

WDTHOLD

WDTNMIES

WDTNMI

WDTMSEL

WDTCNTCL

WDTSSEL

WDTIS 1,0

· Биты 15 - 8 - WDTPW ( WDT Password) - пароль для обращения к регистру WDTCTL. При чтении это поле всегда содержит значение 69h. При записи в это поле необходимо записывать значение 5Ah, в противном случае будет генерироваться системный сброс.

· Бит 7 - WDTHOLD - остановка сторожевого таймера.

0 - таймер активен;

1 - таймер остановлен.

· Бит 6 - WDTNMIES (NMI Edge Select) - выбор активного фронта вывода NMI.

0 - активен растущий фронт;

1 - активен падающий фронт.

· Бит 5 - WDTNMI - определяет функцию вывода RESET/NMI

0 - вывод функционирует как RESET;

1 - вывод функционирует как NMI.

· Бит 4 - WDTMSEL (WDT Mode Select) - выбор режима сторожевого таймера

0 - сторожевой таймер;

1 - интервальный таймер.

· Бит 3 - WDTCNTCL (WDT Counter Clear) - сброс сторожевого таймера. Запись логической 1 в этот бит приводит к сбросу сторожевого таймера. В том случае, если сторожевой таймер разрешен (WDTHOLD=0) программа должна периодически устанавливать этот бит во избежание системного сброса. Этот бит сбрасывается в 0 автоматически, поэтому при чтении содержимое этого бита всегда 0.

· Бит 2 - WDTSSEL (WDT Source Select) - выбор источника тактирования.

0 - тактирование осуществляется частотой SMCLK;

1 - тактирование осуществляется частотой ACLK.

· Бит 1,0 - WDTIS (WDT Interval Select) - выбор интервала переполнения сторожевого таймера. Комбинация состояния этих бит дает возможность установить период переполнения счетчика. Если F - частота тактирования счетчика в Герцах, то период переполнения в секундах определиться следующим образом:

WDTIS1

WDTIS0

Интервал

0

0

32768 / F

0

1

8192 / F

1

0

512 / F

1

1

64 / F

Следует помнить, что даже в тех приложениях, где планируется использовать сторожевой таймер, подключать его имеет смысл только тогда, когда вся программы отлажена. Поэтому обычно на этапе разработке программы его отключают. Сделать это можно, например, командой

mov #5A80h, &WDTCTL

или

mov #WDTPW+WDTHOLD, &WDTCTL

ПРИМЕР. Сбросить сторожевой таймер и установить его режим работы для интервала переполнения в диапазоне 0.1 - 0.5 секунды. Тактирование осуществлять от ACLK = 32768 Hz.

Если выбрать комбинацию WDTIS = 01b, то период переполнения определиться как

T = 8196/32768 = 0.25 s.

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

mov #WDTPW+WDTCNTCL+WDTSSEL+WDTIS0, &WDTCTL

или более короткий эквивалент этой команды

mov #5A0Dh, &WDTCTL

3.5 Аппаратный умножитель

В системе команд MSP микроконтроллеров нет команд, производящих умножение и деление. Однако в старших моделях имеется периферийное устройство, с помощью которого можно производить 8-ми и 16-ти разрядные операции умножения. Наличие быстрого аппаратного умножителя с возможностью накопления результата диктуется необходимостью, в ряде случаев, использования MSP микроконтроллеров для цифровой обработки сигналов в реальном времени, например для реализации цифровых фильтров.

Встроенный аппаратный умножитель позволяет производить умножение и умножение с накоплением знаковых и беззнаковых 8-ми и 16-ти битных операндов с получением 32-ти разрядного результата.

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

Регистры аппаратного умножителя приведены в таблице 9

Таблица 9

Наименование

Назначение

Адрес

MPY

Регистр первого операнда для беззнакового умножения

130h

MPYS

Регистр первого операнда для знакового умножения

132р

MAC

Регистр первого операнда для беззнакового умножения с накоплением

134р

MACS

Регистр первого операнда для знакового умножения с накоплением

136h

OP2

Регистр второго операнда

138h

RESLO

Регистр младшего слова результата

13Ah

RESHI

Регистр старшего слова результата

13Ch

SUMEX

Регистр расширения суммы

13Eh

Содержимое регистра SUMEXT зависит от типа операции. Его возможные состояния показаны в таблице 10.

Таблица 10

Операция

Содержимое SUMEXT

MPY

Всегда 0

MPYS

0 - если результат положителен;

FFFFh - если результат отрицателен

MAC

0 - если нет переноса из 15-го бита RESHI;

FFFFh - если есть перенос из 15-го бита RESHI

MACS

0 - если результат положителен;

FFFFh - если результат отрицателен

ПРИМЕР.

Вычислить результат выражения R13:R12 = 1234 * R4 + 5678 * R5 ,

где

R13 - старшее слово результата;

R12 - младшее слово результата;

R4, R5 - беззнаковые 16-ти разрядные переменные.

mov #1234, &MPY

mov R4, &OP2

mov #5678, &MAC

mov R5, &OP2

mov &RESLO, R12

mov &RESHI, R13

ПРИМЕЧАНИЕ. Если умножитель используется как в основной программе, так и в подпрограмме обработки прерывания, может возникнуть ситуация, когда прерывание происходит во время загрузки и чтения результата основной программой. В этом случае режим операции и сами операнды могут быть потеряны, и результат окажется непредсказуем. Для того чтобы избежать подобной ситуации рекомендуется в основной программе запрещать все прерывания перед загрузкой данных в умножитель и разрешать прерывания после вычитывания результата.

3.6 Порты ввода/вывода

Модель MSP430F149 имеет 6 двунаправленных 8-ми битных порта ввода/вывода P1 - P6. Каждая линия порта может быть настроена для ввода или вывода цифровой информации или поддержки работы периферийных устройств. Кроме того, все линии портов P1 и P2 способны работать как выводы внешних прерываний. Следует заметить, однако, что прерывания от линий каждого порта сгруппированы в общий вектор прерывания: для порта P1 - вектор с адресом FFE8h, а для P2 - FFE2h. Поэтому в подпрограмме обработки прерывания необходимо анализировать флаги прерывания с целью определения его источника.

Работа всех портов регистров ввода/вывода определяется содержимым ряда регистров управления, при этом каждый бит в этих регистрах соответствует одноименной линии порта.

Имеются следующие регистры, управляющие всеми портами ввода/вывода (x - индекс порта):

Ш PxSEL (Port Select) - выбирает функцию линии:

0 - линия предназначена для ввода/вывода;

1 - линия предназначена для периферийного устройства.

Ш PxDIR (Port Direction) - направление передачи данных. Как правило, воздействует на линии порта только в том случае, если соответствующий бит в регистре PxSEL равен 0.

0 - линия настроена на ввод;

1 - линия настроена на вывод;

Ш PxOUT - вывод. В том случае, если линия настроена вывод, содержимое битов этого регистра будет задавать логическое состояние внешнего вывода.

Ш PxIN - ввод. Содержимое бит этого регистра отражает логическое состояние линий порта. Регистр доступен только для чтения.

Для обеспечения функционирования линий портов P1 и P2 в качестве источников прерывания имеются ряд дополнительных регистров:

Ш PxIE (Interrupt Enable) - разрешение прерывания

0 - запрещает прерывание;

1 - разрешает прерывание.

Ш PxIES (Interrupt Edge Select) - выбор активного фронта прерывания

0 - растущий активный фронт;

1 - падающий активный фронт.

Ш PxIFG (Interrupt Flag) - флаг прерывания. Устанавливается в 1 аппаратно, если на линии порта зарегистрировано событие, определенное соответствующим битом регистра PxIES. Сбрасывается в 0 программно.

Полный перечень регистров портов ввода/вывода приведен в таблице 11.

Таблица 11

Регистр

Назначение

Адрес

P1IN

Состояние порта P1

20h

P1OUT

Установка порта P1

21h

P1DIR

Направление порта P1

22h

P1IFG

Флаги прерывания порта P1

23h

P1IES

Выбор фронта прерывания порта P1

24h

P1IE

Разрешение прерывания порта P1

25h

P1SEL

Выбор функции порта P1

26h

P2IN

Состояние порта P2

28h

P2OUT

Установка порта P2

29h

P2DIR

Направление порта P2

2Ah

P2IFG

Флаги прерывания порта P2

2Bh

P2IES

Выбор фронта прерывания порта P1

2Ch

P2IE

Разрешение прерывания порта P1

2Dh

P2SEL

Выбор функции порта P2

2Eh

P3IN

Состояние порта P3

18h

P3OUT

Установка порта P3

19h

P3DIR

Направление порта P3

1Ah

P3SEL

Выбор функции порта P3

1Bh

P4IN

Состояние порта P4

1Ch

P4OUT

Установка порта P4

1Dh

P4DIR

Направление порта P4

1Eh

P4SEL

Выбор функции порта P4

1Fh

P5IN

Состояние порта P5

30h

P5OUT

Установка порта P5

31h

P5DIR

Направление порта P5

32h

P5SEL

Выбор функции порта P5

33h

P6IN

Состояние порта P6

34h

P6OUT

Установка порта P6

35h

P6DIR

Направление порта P5

36h

P6SEL

Выбор функции порта P6

37h

ПРИМЕР.

Сконфигурировать порт P1:

линии 0 и 5 - поддержка периферии;

линии 7, 6,4 -вывод;

линии 3 - ввод;

линия 1 - растущий фронт прерывания;

линия 2 - падающий фронт прерывания;

на линиях 7, 6 - выставить 1, на линии 4 -0

Для удобства определения содержимого регистров представим таблицу

7

6

5

4

3

2

1

0

0

0

1

0

0

0

0

1

P1SEL

1

1

0

1

0

0

0

0

P1DIR

1

1

0

0

0

0

0

0

P1OUT

0

0

0

0

0

1

1

0

P1IE

0

0

0

0

0

1

0

0

P1IES

mov.b #0C0h, &P1OUT

mov.b #0D0h, &P1DIR

mov.b #21h, &P1SEL

mov.b #4, &P1IES

mov.b #6, &P1IE

ПРИМЕР

Ожидать растущий фронт на выводе P3.5, после чего инвертировать вывод P1.2

L1: bit.b #20h, &P3IN ; проверяем, P3.5=1 ?

jnz L1 ; если да, ждем

L2: bit.b #20h, &P3IN ; P3.5 = 0 ?

jz L2 ; если да, ждем

xor.b #4, &P1OUT ; инвертируем P1.2

3.7 Таймер A3

Таймер А3 является 16-ти битным таймером-счетчиком. На его базе реализованы 3 модуля захвата/сравнения (capture/compare) - CC0, CC1 и СС2. Каждый из этих модулей может работать либо в режиме захвата, либо в режиме сравнения.

Модули захвата обычно используются для точного измерения временных интервалов между какими-либо событиями, например фронтами внешних импульсов. Для организации работы модуля захвата обычно запускают таймер в режиме свободного счета, входная логика модуля захвата настраивается на определенный тип события (растущий/падающий фронт). При возникновении внешнего события, текущее содержимое таймера автоматически перезаписывается в специальный регистр захвата. Кроме того, устанавливается флаг требования прерывания модуля захвата, отреагировать на который программа может несколько позже, но при этом, содержимое регистра захвата будет точно соответствовать моменту события.

Модули сравнения обычно используются для генерации событий на внешних выводах микроконтроллера в заданный момент времени. Для этого блок выходной логики, связанный с внешним выводом, настраивают на тот или иной тип события (установка, сброс или переключение вывода). В специальный регистр сравнения записывается значение, соответствующее моменту генерации события. С помощью цифрового компаратора модуль периодически сравнивает текущее содержимое таймера и регистра сравнения. При их равенстве вырабатывается внутренний сигнал EQU, который заставляет сработать блок выходной логики. Кроме того, устанавливается флаг требования прерывания, который может быть обработан процессором уже после генерации требуемого события.

Структурная схема таймера А3 приведена на рисунке 3.

Рисунок 3. Структурная схема таймера А3

Текущее содержимое таймера находится в регистре TAR (Timer A Register). Тактирование таймера осуществляется с помощью одного из источников - внутренние сигналы ACLK или SMCLK, или внешние сигналы, подключаемые к выводам P1.0/TACLK и P2.1/INCLK. Выбрать источник можно с помощью битов TASSEL в регистре управления таймера. Выбранная входная частота подается на таймер через делитель DIV, управляемый битами ID регистра управления.

Таймер A обеспечивает несколько режимов работы:

· Режим продолжительного счета (Continuous) - содержимое регистра TAR увеличивается на 1 при каждом тактирующем импульсе от 0 до FFFFh, после чего таймер переполняется, его содержимое сбрасывается в 0 и процесс начинается сначала. При переходе значения TAR FFFFh0 устанавливается флаг переполнения таймера TAIFG.

· Режим суммирования (Up) - содержимое регистра TAR увеличивается на 1 при каждом тактирующем импульсе от 0 до содержимого регистра сравнения CCR0, после чего содержимое TAR сбрасывается и процесс счета начинается сначала. Флаг переполнения TAIFG устанавливается при переходе содержимого TAR CCR00.

· Режим суммирования-вычитания (Up/Down) - содержимое TAR сначала увеличивается на 1 от значения 0 до содержимого CCR0, после чего направление счета меняется и таймер считает до 0. После достижения нулевого значения, направление счета опять меняется на противоположное и т.д. Флаг переполнения таймера TAIFG устанавливается при переходе TAR 10. Обычно этот режим применяется для широтно-импульсной модуляции PWM.

Режимы работы таймера задаются блоком MODE. На рисунке 4 изображены режимы работы таймера. Содержимое таймера также может быть очищено программно с помощью бита TACLR регистра управления.

Модули захвата/сравнения имеют идентичную структуру. Т.к. каждый модуль может работать либо в режиме захвата, либо в режиме сравнения, в них используется общий регистр CCRx. Тип события для захвата выделяет блок CC_IN, тип режима сравнения генерирует блок CC_OUT.

Как видно из рисунка 3, для каждого модуля имеется свой набор входных и выходных сигналов. Входной сигнал для модулей захвата назначается битами CCIS регистров управления. Внутреннее подключение входов к потенциалам GND и VCC дает возможность осуществить программное срабатывание модуля захвата. В качестве второго входа модуля CC1 можно выбрать внутренний сигнал выхода встроенного аналогового компаратора CAOUT (см. п. 3.10). В качестве второго входа модуля CC2 можно выбрать внутреннюю частоту ACLK. Эта возможность предусмотрена для реализации умножителя частоты DCO (см.п.3.3).

Рисунок 4. Режимы работы таймера A3

Подключение выходных сигналов к модулю сравнения производится с помощью регистров P1SEL и P2SEL (см.п. 3.6). Выход ADC12sc модуля CC1 является внутренним сигналом, предназначенным для автоматического старта преобразования АЦП при срабатывании модуля сравнения.

Блок выходной логики модуля сравнения CC_OUT можно запрограммировать на работу в одном из 8-ми возможных режимов:

· 0 - Output - выход устанавливается программно через специальный бит в регистре управления;

· 1 - Set - выход устанавливается в 1 при TAR=CCRx и остается в этом состоянии до тех пор, пока таймер не будет сброшен или не изменен режим;

· 2 - Toggle/Reset - выход переключается на противоположное состояние при TAR=CCRx, сбрасывается в 0 при TAR=CCR0;

· 3 - Set/Reset - выход устанавливается в 1 при TAR=CCRx, сбрасывается в 0 при TAR=CCR0;

· 4 - Toggle - выход переключается на противоположное состояние при TAR=CCRx;

· 5 - Reset - выход сбрасывается в 0 при TAR=CCRx и остается в этом состоянии до тех пор, пока не будет изменен режим;

· 6 - Toggle/Set - выход переключается на противоположное состояние при TAR=CCRx и сбрасывается в 0 при TAR=CCR0;

· 7 - Reset/Set - выход сбрасывается в 0 при TAR=CCRx и устанавливается в 1 при TAR=CCR0.

Режимы 2,3,6,7 не используются для CC0.

Согласно таблице 5 модуль CC0 имеет индивидуальный вектор прерывания с адресом FFECh, прерывания от модулей CC1, CC2, а также переполнение таймера имеют групповой вектор с адресом FFEAh. Для быстрого определения источника прерывания используется регистр идентификации прерывания TAIV.

Таблица 12

Регистр

Назначение

Адрес

TAR

Регистр таймера-счетчика

170h

TACTL

Регистр управления таймера

160h

TACCR0

Регистр захвата/сравнения СС0

172h

TACCTL0

Регистр управления СС0

162h

TACCR1

Регистр захвата/сравнения СС1

174h

TACCTL1

Регистр управления СС1

164h

TACCR2

Регистр захвата/сравнения СС2

176h

TACCTL2

Регистр управления СС2

166h

TAIV

Регистр идентификации прерывания

12Eh

Ш TAR (Timer A Register) - регистр таймера А. 16-ти разрядный регистр текущего содержимого таймера. Регистр доступен как для записи, так и для чтения с помощью словных форм инструкций.

Ш TACTL (Timer A Control) - содержит биты управления таймера А. Регистр доступен как для записи, так и для чтения с помощью словных форм инструкций и содержит следующие биты.

TASSEL 1, 0

ID 1, 0

MC1,0

-

TACLR

TAIE

TAIFG

· Биты 15 -10 - зарезервированы.

· Биты 9, 8 - TASSEL (Timer A Source Select) - комбинация состояния этих бит определяет источник тактирования таймера.

TASSEL1

TASSEL0

Источник

0

0

TACLK

0

1

ACLK

1

0

SMCLK

1

1

INCLK

· Биты 7, 6 - ID (Input Divider) - комбинация состояния этих бит определяет коэффициент деления входного делителя таймера

ID1

ID0

Коэффициент

0

0

1 / 1

0

1

1 / 2

1

0

1 / 4

1

1

1 / 8

· Биты 5, 4 - MC (Mode Select) - комбинация состояния этих бит определяет текущий режим таймера

MC1

MC0

Режим

0

0

Остановлен

0

1

Up

1

0

Continuous

1

1

Up/Down

· Бит 3 - зарезервирован .

· Бит 2 - TACLR (Timer A Clear) - программная установка этого бита вызывает сброс регистра TAR в 0. Бит сбрасывается в 0 автоматически.

· Бит 1 - TAIE (Timer A Interrupt Enable ) - установка/сброс этого бита разрешает/запрещает прерывание по переполнению таймера.

· Бит 0 - TAIFG (Timer A Interrupt Flag) - флаг требования прерывания. Устанавливается аппаратно при переполнении таймера или программно. Сбрасывается автоматически чтением регистра TAIV.

Ш TACCR 0, 1, 2 (Timer A Capture/Compare Register) - 16-ти разрядные регистры захвата/сравнения. В режиме захвата в регистр автоматически записывается содержимое TAR. В режиме сравнения содержимое этих регистров автоматически сравнивается с содержимым TAR для генерации внешнего события. Доступны по записи и чтению с помощью словных форм инструкций.

Ш TACCTL 0, 1, 2 (Timer A Capture/compare Control) - содержат биты управления модулей захвата/сравнения. Все три регистра имеют идентичную структуру и доступны по записи и чтению с помощью словных форм инструкций. Регистры содержат следующие биты

CM1, 0

CCIS1,0

SCS

SCCI

-

CAP

OUTMOD 2,1,0

CCIE

CCI

OUT

COV

CCIFG

· Биты 15, 14 - CM (Capture Mode) - режим модуля захвата. Определяют тип события для срабатывания модуля захвата.

CM1

CM0

Тип события

0

0

Нет захвата

0

1

Растущий фронт

1

0

Падающий фронт

1

1

Любой фронт

· Биты 13, 12 - CCIS (Capture/Compare Input Select) - выбирают сигналы для входа модуля захвата.

CCIS1

CCIS0

Вход

0

0

CCIA

0

1

CCIB

1

0

GND

1

1

VCC

· Бит 11 - SCS (Synchronize Capture Source) - синхронизация источника захвата. Если этот бит установить в 1 то захват будет производиться синхронно с тактом таймера, в противном случае, захват будет произведен в момент обнаружения внешнего события.

· Бит 10 - SCCI - (Synchronized Capture/Compare Input) - синхронизированный вход модуля захвата/сравнения. В этот бит аппаратно перезаписывается состояние выбранного входа захвата в момент генерации сигнала EQU. Бит доступен только по чтению.

· Бит 9 - зарезервирован

· Бит 8 - CAP (Capture) - установка/ сброс этого бита выбирает режим захвата или сравнения модуля соответственно.

· Биты 7,6,5 - OUTMOD (Output Mode) - определяют режим работы выходов модуля сравнения.

OUTMOD2

OUTMOD1

OUTMOD0

Режим

Действие

0

0

0

Out

TACCTLx.OUT

0

0

1

Set

1 : TAR=CCRx

0

1

0

Toggle/reset

Переключение : TAR=CCRx,

0 : TAR=CCR0

0

1

1

Set/reset

1 : TAR=CCRx, 0 : TAR=CCR0

1

0

0

Toggle

Переключение : TAR=CCRx

1

0

1

Reset

0 : TAR=CCRx

1

1

0

Toggle/set

Переключение : TAR=CCRx,

1 : TAR=CCR0

1

1

1

Reset/set

0 : TAR=CCRx, 1 : TAR=CCR0

· Бит 4 - CCIE (Capture/Compare Enable) - установка/сброс этого бита разрешает/запрещает прерывания от модуля захвата/сравнения.

· Бит 3 - CCI (Capture/Compare Input) - через этот бит читается состояние входа модуля захвата, подключенное битами CCIS этого регистра. Доступен только по чтению.

· Бит 2 - OUT - содержимое этого бита определяет состояние выхода модуля сравнения, если биты OUTMOD=0.

· Бит 1 - COV (Capture Overflow) - переполнения захвата. Устанавливается аппаратно, если при срабатывании модуля захвата, предыдущее захваченное значение таймера не было вычитано из CCRx. Сбрасываться бит должен программно.

· Бит 0 - CCIFG (Capture/Compare Interrupt Flag) - флаг требования прерывания. Устанавливается аппаратно при срабатывании модуля захвата/сравнения. Для TACCTL0 бит сбрасывается программно или аппаратно при вхождении в прерывание. Для TACCTL1 и TACCTL2 бит сбрасывается чтением регистра TAIV.

Ш TAIV (Timer A Interrupt Vector) - регистр идентификации прерывания для таймера A и модулей TACC1 и TACC2. Регистр доступен только по чтению. В этом регистре генерируется код, позволяющий определить источник прерывания. Возможны следующие коды содержимого TAIV:

· 0 - нет прерываний;

· 2 - установлен флаг TACCTL1.CCIFG;

· 4 - установлен флаг TACCTL2.CCIFG;

· 10 - установлен флаг TACTL.TAIFG

Если установлены несколько флагов одновременно, в регистре будет генерироваться меньшее значение. Вычитывание из регистра определенного кода автоматически сбрасывает соответствующий флаг IFG. Использование регистра TAIV дает возможность быстрого ветвления на подпрограмму обработки прерываний. Типовая последовательность команд для обработки прерываний различных источников таймера приведена ниже.

cc0: . . . ; ISR для TACCTL0.CCIFG

reti

TimHndl: add &TAIV, PC ; общая ISR для TACCTL1.CCIFG,

Reti ; TACCTL2.CCIFG и TACTL.TAIFG

jmp cc1

jmp cc2

nop

nop

timOvf: . . . ; начало ISR по TACTL.TAIFG

reti ; можно заменить на jmp TimHndl

cc1: . . . ; начало ISR по TACCTL1.CCIFG

reti ; можно заменить на jmp TimHndl

cc2: . . . ; начало ISR по TACCTL2.CCIFG

reti ; можно заменить на jmp TimHndl

В данном фрагменте прерывание для модуля TACC0 подпрограмма обработки прерывания описывается самостоятельно, так как для этого модуля имеется собственный вектор прерывания. Для модулей TACC1, TACC2 и собственно таймера A, таблица векторов настраивается на единую подпрограмму с адресом TimHndl. При возникновении прерывания управление передается на первую команду, которая прибавляет к содержимому PC код TAIV. Если прерывание было от TACCTL1.CCIFG, то к PC прибавиться 2, и управление будет передано на команду jmp cc1, которая, в свою очередь, передаст управление на собственно подпрограмму обработки cc1 для TACCTL1.CCIFG. Таким образом, в подпрограмме обработки прерывания нет необходимости тестировать состояние флагов прерываний, поскольку используется вычисляемый переход. Если существует значительная вероятность того, что флаги прерываний могут быть установлены одновременно, вместо команд reti имеет смысл выполнить команду перехода на начало ISR. В этом случае, процессор будет находиться в прерывании до тех пор, пока не обслужит все запросы.

ПРИМЕР

Запрограммировать модули сравнения для аппаратной генерации последовательности импульсов частотой 100 kHz, и длительностью 1 µs. Частота SMCLK = 8 MHz.

Временная диаграмма генерации импульсов приведена на рис.5. Для аппаратной генерации импульсов можно использовать UP-режим таймера. Тогда период импульсов будет определяться содержимым регистра TACCR0. Для генерации самих импульсов будем использовать модуль TACCR1 и внешний вывод P1.2/TA1. Модуль сравнения TACCR1 может работать в режиме Reset/Set.

Параметры T1=1 µS, T2= 1/ (100 kHz)= 10 µS.

Значение, загружаемое в регистр TACCR0 = T2/Дt, где Дt - период тактирования таймера. Т.к. таймер должен тактироваться частотой SMCLK, то

TACCR0 = 10 µS * 8 MHz = 80.

Значение, загружаемое в TACCR1, определится как

TACCR1 = 1 µS * 8 MHz = 8.

#include <msp430x14x.h> ; подключаем файл определений

mov #4, &P1SEL ; настраиваем P1.2/TA1 для поддержки TACCR1

mov #80, &TACCR0 ; задаем период импульсов

mov #8, &TACCR1 ; задаем длительность импульсов

mov #OUTMOD_7, &TACCTL1 ; настраиваем TACC1 на режим Reset/set,

; в msp430x14x.h определена константа

; OUTMOD_7=0Eh

mov #TASSEL+MC0+TACLR, &TACLR ;тактирование таймера от SMCLK,

; старт таймера в UP режиме

Рисунок 5. Временная диаграммы генерации импульсов.

3.8 Таймер B7

Таймер B7 имеет структуру, аналогичную таймеру A3, но имеет следующие отличия:

· Разрядность таймера может быть программно задана как 8, 10, 12 или 16 разрядов.

· На базе таймера B реализовано 7 модулей захвата/сравнения - TBCC0 … TBCC6.

· Регистры TBCCRx имеют буфер по записи и могут быть сгруппированы, т.е. запись данных в один из регистров приводит к обновлению данных во всех регистрах группы.

· Все выходы модулей сравнения могут быть переведены в высокоимпедансное состояние.

· Отсутствует бит SCCI в регистрах управления модулей захвата/сравнения.

Общая структурная схема таймера B7 приведена на рисунке 6.

Рисунок 6. Структурная схема таймера B7

Дополнительные возможности таймера B7 дают удобные средства построения на его базе многоканальных широтно-импульсных (ШИМ) генераторов. В этом случае используется UP или UP/DOWN режимы таймера. С помощью регистра TBCCR0 модуля сравнения задается несущая частота модуляции, а содержимое TBCCRx определяет длительность генерируемых импульсов. Изменяя содержимое регистров TBCCRx можно динамически менять ширину импульсов в различных каналах. С помощью таймера B7 можно, например, реализовать управление шестью ключами, включенных в стойки инверторов для трехфазной сети. Для качественного регулирования необходимо, чтобы перестройка всех шести каналов ШИМ проводилась одновременно. Синхронную перестройку ШИМ генератора на базе таймера A реализовать затруднительно, т.к. программа может изменять содержимое регистров CCR только последовательно. Для достижения синхронности в таймере B7 используется буферирование регистров TBCCRx и объединение их в группы.


Подобные документы

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.