- •Микроконтроллеры 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.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.
Генератор XT2 также может работать в диапазоне 450 kHz - 8 MHz. В младших моделях MSP430 генератор XT2 отсутствует.
Частоту генератора DCO можно перестраивать программно в диапазоне ≈ 120 kHz – 5 MHz. Следует заметить, однако, что частота, генерируемая DCO, существенно зависит от напряжения питания и температуры.
В реальных системах для тактирования CPU и быстрой периферии используются, как правило, высокочастотные сигналы MCLK и SMCLK соответственно, а для тактирования медленной периферии – сигнал ACLK с частотой 32768 Hz. Генератор DCO используется для приложений, не требующих высокой точности и стабильности генерации временных интервалов.
Структура модуля тактирования изображена на рисунке 2.
Рисунок 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.
7 6 5 4 3 2 1 0
-
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.
7 6 5 4 3 2 1 0
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.
7 6 5 4 3 2 1 0
-
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
Для инициализации системы тактирования необходимо выполнить следующие шаги:
Включить генератор XT2;
Очистить бит OFIFG в регистре IFG1;
Выдержать паузу не менее 50 μs ( см. описание IFG1.OFIFG в п.3.2);
Проверить состояние бита OFIFG;
Если OFIFG=1 (генератор еще не завелся) перейти к пункту 2;
Настроить MCLK, SMCLK
Выключить 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
