- •Микроконтроллеры 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.13 Цифро-аналоговый преобразователь
Микроконтроллеры серии MSP430F15x и MSP430F16x имеют в своем составе двухканальный модуль ЦАП (DAC12), генерирующий аналоговые напряжения, соответствующие цифровому коду, загруженному в регистры DAC12_xDAT. Выходное напряжение ЦАП генерируется на внешних выводах P6.6/A6/DAC0 и P6.7/A7/DAC1 микроконтроллера для канала 0 и 1 соответственно.
Каждый канал может программно конфигурироваться для работы в 8-ми или 12-ти битных режимах.
В качестве опорного напряжения для каждого канала ЦАП может использоваться либо внешний источник, подключаемый к выводу VeREF+, либо встроенный источник, входящий в состав модуля АЦП микроконтроллера.
Собственно выход ЦАП подключается к внешним выводам через буферный усилитель с коэффициентом усиления 1 или 3. Требуемый коэффициент усиления задается программно через регистр управления.
Выходное напряжение, генерируемое на выходе ЦАП, определяется формулой:
- для 12-ти битного режима – Vout=Vref * K * DAC12_xDAT/4096,
- для 8-ми битного режима – Vout=Vref * K * DAC12_xDAT/256,
где Vref – опорное напряжение ЦАП,
K – коэффициент усиления выходного буферного усилителя.
Момент генерации выходного напряжения ЦАП относительно записи новых данных в регистр DAC12_xDAT, определяется состоянием 2-х битового поля DAC12LSEL и битом DAC12ENC регистра управления.
В том случае, если DAC12LSEL=0, выходное напряжение устанавливается непосредственно после записи новых данных в регистр DAC12_xDAT и не зависит состояние бита DAC12ENC.
Если DAC12LSEL=1 – данные регистра DAC12_xDAT подключаются к ядру ЦАП не напрямую, а через буфер защелки (DAC12_Latch). При установке бита DAC12ENC в 1, данные перезаписываются в ядро ЦАП и на выходе формируется новое значение напряжение.
Для состояние DAC12LSEL – 2 или 3, перезапись данных в ЦАП производится при растущем фронте срабатывания модуля сравнения 1 таймера А или модуля сравнения 2 таймера В соответственно. При этом необходимо, чтобы бит DAC12ENC был установлен в 1. Загрузка ЦАП в этих случаях производиться вне зависимости от того, выводятся сигналы модулей сравнения на внешние выводы, или нет.
Иногда необходимо, чтобы выходное напряжение обоих каналов ЦАП изменялось одновременно. Для этого имеется возможность группирования каналов ЦАП. Задание режима группирования производится установкой бита DAC12GRP канала 0. Для нормальной работы в группе необходимо, чтобы состояние бит DAC12LSEL обоих каналов было отлично от нуля. Для синхронного обновления выходного напряжения ЦАП необходимо установить бит DAC12GRP и прописать данные в регистр DAC12_0DAT, затем DAC12_1DAT. Напряжения обоих каналов ЦАП обновятся при срабатывании источника старта канала 1.
Регистры модуля DAC12 представлены в таблице 18.
Таблица 18
-
Имя
Назначение регистра
Адрес
Нач.значен.
DAC12_0CTL
Регистр управления канала 0
1С0h
0
DAC12_0DAT
Регистр данных канала 0
1С8h
0
DAC12_1CTL
Регистр управления канала 1
1С2h
0
DAC12_1DAT
Регистр данных канала 1
1CAh
0
DAC12_xCTL (DAC12 Control) – содержат биты управления каналов модуля ЦАП. Регистры имеют идентичную структуру и доступны по записи и чтению с помощью словных форм инструкций. Регистры содержат следующие биты
15 14 13 12 11 10 9 8
- |
DAC12SREF |
DAC12RES |
DAC12LSEL |
DAC12CALON |
DAC12IR |
7 6 5 4 3 2 1 0
DAC12AMP |
DAC12DF |
DAC12IE |
DAC12IFG |
DAC12ENC |
DAC12GRP |
Бит 15 –зарезервирован.
Биты 14, 13 – DAC12SREF 1,0 (Select Reference) – выбор опорного напряжения.
-
DAC12SREF1
DAC12SREF0
Опора
0
0
Встроенный источник
0
1
Встроенный источник
1
0
Внешний источник
1
1
Внешний источник
Бит 12 – DAC12RES (Resolution). Состояние этого бита задает разрядность ЦАП. Состояние 0 задает 12-ти битный режим, 1 – 8-ми битный.
Биты 11, 10 – DAC12LSEL 1,0 (Load Select) - выбор режима загрузки. Состояние этих бит задает событие, при котором данные, записанные в регистр DAC12_xDAT, преобразовываются в выходное напряжение.
DAC12LSEL1 |
DAC12LSEL0 |
Событие |
0 |
0 |
Запись данных в DAC12_xDAT, DAC12ENC игнорируется |
0 |
1 |
Запись данных в DAC12_xDAT, только при DAC12ENC = 1 |
1 |
0 |
Срабатывание 0->1 TACC1 при DAC12ENC = 1 |
1 |
1 |
Срабатывание 0->1 TBCC2 при DAC12ENC = 1 |
Бит 9 – DAC12CALON (Calibration ON) – Старт калибровки. Установка этого бита инициализирует запуск встроенного механизма калибровки, в процессе которого измеряется и в дальнейшем компенсируется ненулевое напряжение смещения ЦАП. Бит сбрасывается в 0 автоматически после окончания калибровки.
Бит 8 – DAC12IR (Input Range) – входной диапазон. Состояние этого бита задает коэффициент усиления выходного буферного усилителя ЦАП. 0 соответствует коэффициенту 3, 1 – коэффициенту 1.
Биты 7,6,5 – DAC12AMP (Amplifier) – устанавливает динамические характеристики входного буфера опорного напряжения и выходного буферного усилителя. Низкие значение приводят к худшей динамике выходного напряжение ЦАП, но сокращают энергопотребление, высокие значения улучшают динамику за счет повышенного потребления.
-
DAC12AMP 2,1,0
Скорость буфера опоры
Скорость
выходного буфера
Время устан. выходного напряжения, us
000
Выключен
Выход в Z-состоянии
-
001
Выключен
Выход в состоянии 0
-
010
Низкая
Низкая
100
011
Низкая
Средняя
40
100
Низкая
Высокая
15
101
Средняя
Низкая
40
110
Средняя
Средняя
15
111
Высокая
Высокая
15
Если состояние этих бит отлично от нуля, внешние выводы P6.6/A6/DAC0 и/или P6.7/A7/DAC1 автоматически настраиваются на поддержку ЦАП, независимо от состояния соответствующих бит P6SEL и P6DIR.
Бит 4 – DAC12DF (Data Format) – Формат данных. 0 – задает беззнаковый формат, 1 – знаковый. Для беззнакового формата нулевое содержимое DAC12_xDAT соответствует напряжению на выходе 0 Вольт, а содержимое 0FFFh – напряжению 4095*Vref * K/4096. Для знакового формата – нулевое содержимое DAC12_xDAT соответствует половине полной шкалы выходного напряжения – т.е 2047*Vref * K/4096. Т.е. выходное напряжение рассчитывается по формуле: Vout=Vref * K * (2048 + DAC12_xDAT)/4096, а само содержимое DAC12_xDAT можно трактовать как знаковое значение в диапазоне -2048.. +2047 (800h .. 7FFh).
Бит 3 – DAC12IE (Interrupt Enable) – разрешение прерывания. Установка/сброс этого бита разрешает/запрещает прерывание ЦАП.
Бит 2 – DAC12IFG (Interrupt Flag) – флаг прерывания. Устанавливается аппаратно в момент перезаписи данных из регистра DAC12_xDAT собственно в ЦАП и сигнализирует, что ЦАП может принять новые данные. Если биты DAC12LSEL этого регистра равны 0, DAC12IFG не устанавливается. Если прерывание разрешено (установлен биты DAC12IE и GIE) берется прерывание с номером 15. Сбрасываться флаг должен программно.
Бит 1 – DAC12ENC (Enable Conversion) – разрешение преобразования. Установка этого бита разрешает работу канала ЦАП в случае, если содержимое битов DAC12LSEL этого регистра отлично от нуля.
Бит 0 – DAC12GRP (Group) – группировка. Установка этого бита для канала 0 ЦАП (регистр DAC12_0CTL), устанавливает режим синхронной загрузки обоих каналов при срабатывании канала 1. Состояние этого бита в регистре DAC12_1CTL игнорируется.
ПРИМЕЧАНИЕ. Биты этого регистра с номерами 14..10 и 8..4 включительно, могут быть модифицированы только при условии, что бит DAC12ENC сброшен в 0.
DAC12_xDAT (DAC12 Data) – данные ЦАП. Регистр содержит 12 младших значащих бит. Биты с номерами 15 .. 12 всегда читаются как 0. Для знакового формата данных знаковым битом является 11-й бит в случае 12-ти разрядного режима ЦАП, и 7-й – для 8-ми битового режима.
ПРИМЕР. Имеется таблица значений синуса с начальным адресом SinTab и размером 64 12-ти битных знакоразностных отсчетов. С помощью канала 0 модуля DAC12 получить непрерывный синусоидальный сигнал частотой 1000 Hz. Тактовая частота микроконтроллера – 8MHz. Напряжение опоры – встроенный генератор 2.5 В.
Частота 1000 Hz соответствует периоду 1 ms. Тогда через интервал времени, равный 1 ms/64=15.625 us программа должна записывать следующие данные из таблицs SinTab в регистр данных ЦАП. Этот интервал времени соответствует 15.625 us * 8 MHz =125 периодам тактовой частоты. Загрузку ЦАП будем производить в прерывании синхронно с работой модуля сравнения 1 таймера TA3. Сам таймер настраивается на работу в продолжительном режиме. Модуль сравнения TACC1 настраивается на режим “SET”.
Т.к. используется буферированный режим ЦАП, данные, предварительно записанные в DAC12_0DAT, будут автоматически перегружены в ЦАП при срабатывании выходной логики TACC1 (переход 0→1). В подпрограмме прерывания модуля сравнения необходимо программно сбросить выход TACC1 в 0, добавить к содержимому TACCR1 константу 1250, загрузить новые данные в ЦАП и опять установить режим срабатывания “SET”.
#include <msp430x16x.h>
ORG 1100h
Start:
mov #5A80h, &WDTCTL ; отключение сторожевого таймера
mov #0A00h, sp ; инициализация стека
. . .
bis #60h, &ADC12CTL0 ; включаем источник опорного напряжения 2.5 В
mov #09F2h, &DAC12_0CTL ; DAC12LSEL=2, DAC12IR=1, DAC12AMP=7,
; DAC12DF=1, DAC12ENC=1
mov #OUTMOD0+CCIE, &TACCTL1 ; TAСС1: Режим работы “SET”,
; прерывание разрешено
mov #TASSEL1+MC1+TACLR, &TACTL ; TA3: непрерывный режим,
; тактирование от SMCLK
mov #SinTab, r4 ; указатель данных для ЦАП
eint
. . .
Loop:
. . .
jmp Loop
TA_ISR: add &TAIV, pc ; подпрограмма обработки прерывания TB7
reti
;
jmp CC1_ISR
reti
nop
nop
reti
CC1_ISR: ; подпрограмма обработки прерывания TA.CC1
mov #0, &TACCTL1 ; переключение в режим “OUT” и сброс выхода в 0
add #125, &TACCR1 ; подготовка нового времени срабатывания
mov @r4+, &DAC12_0DAT ; загрузка данных ЦАП
cmp #SinTab+64*2, r4 ; если таблица закончена,
jne exit ; перегрузка начального адреса
mov #SinTab, r4
exit: mov #OUTMOD0+CCIE, &TACCTL1 ; установка режима “SET”
reti
SinTab: ; начальный адрес таблицы синуса
DW . . . . .
DW . . . . .
ORG 0FFEAh ; начальный адрес прерывания TA3
DW TA_ISR
ORG 0FFFEh ; стартовый адрес программы
DW Start
END
Следует добавить, что на обслуживание программы обработки прерывания тратиться 40 машинных тактов. Так как эта подпрограмма исполняется с цикличностью 125 тактов, то для поддержки генерации синуса частотой 1000 Hz при 64-х точках отсчета на период, требуется 32% временного ресурса процессора. Оставшиеся 68% производительности могут быть использованы для исполнения других задач.
