Микропроцессорная техника / Лабораторные работы / Лабораторная работа 3
.pdfМинистерство образования и науки Украины Государственное высшее учебное заведение «Приазовский государственный технический университет» Кафедра автоматизации и компьютерных технологий
Сокол С.П.
УПРАВЛЕНИЕ ТАКТИРОВАНИЕМ МИКРОКОНТРОЛЛЕРОВ MSP430 И ИХ ЭНЕРГОПОТРЕБЛЕНИЕМ
Методические указания к выполнению лабораторной работы
по курсу «Микропроцессорная техника» для студентов направления 6.050202 «Автоматизация и
компьютерно-интегрированные технологии» дневной и заочной форм обучения
Мариуполь 2014
УДК 658.5
Управление тактированием микроконтроллеров MSP430 и их энергопотреблением : Методические указания к выполнению лабораторной работы по курсу «Микропроцессорная техника» для студентов направления подготовки 6.050202 «Автоматизация и компьютерно-интегрированные технологии» дневной и заочной форм обучения. / сост. С.П. Сокол. – Мариуполь: ГВУЗ «ПГТУ», 2014.- 14 с.
Сформулированы цель и задачи лабораторной работы. Изложены необходимые теоретические сведения для
программирования модуля тактирования. Приведены примеры работы с различными источниками тактового сигнала и в разных режимах энергопотребления. Даны задания для индивидуального выполнения. Приводится список рекомендованных источников и контрольные вопросы для подготовки.
Составитель: С.П. Сокол ст. преподаватель
Рецензент: А.А. Койфман, ст. преподаватель
Утверждено на заседании кафедры АиКТ
Протокол № ___ от ____ 2014 г.
Утверждено методической комиссией факультета информационных технологий,
протокол № 3 от 05 февраля 2014 г.
©ГВУЗ «ПГТУ», 2014
2
|
СОДЕРЖАНИЕ |
|
ВВЕДЕНИЕ.................................................................................... |
4 |
|
1 |
ОСНОВНЫЕ ТЕОРЕТИЧЕСКИЕ ПОЛОЖЕНИЯ .................... |
5 |
2 |
ЗАДАНИЕ НА ЛАБОРАТОРНУЮ РАБОТУ.......................... |
11 |
3 |
ТРЕБОВАНИЯ К ОФОРМЛЕНИЮ ОТЧЕТА......................... |
12 |
4 |
ВОПРОСЫ ДЛЯ САМОПРОВЕРКИ....................................... |
13 |
5 |
СПИСОК РЕКОМЕНДОВАННЫХ ИСТОЧНИКОВ.............. |
13 |
3
ВВЕДЕНИЕ
Лабораторная работа № 3.
Целью выполнения данной лабораторной работы является ознакомление студентов с модулем тактирования и режимами работы микроконтроллеров MSP430.
Задачи лабораторной работы:
-ознакомление с сигналами, генерируемыми модулем тактирования;
-получение навыков конфигурирования регистров модуля тактирования и управления режимом работы микроконтроллера;
-получение общих сведений о программировании модуля тактирования при помощи программной среды IAR Embedded Workbench.
Лабораторная работа является третьей в курсе «Микропроцессорная техника» и содержит информацию по программированию микроконтроллеров модуля тактирования и управления режимами работы микроконтроллеров MSP430 на языке С.
На выполнение данной работы отводится 4 академических
часа.
Для выполнения лабораторной работы студентам требуется наличие компьютера с установленной программой IAR Embedded Workbench for MSP430, которую можно найти в интернете на официальном сайте, либо на сервере кафедры.
Теоретический материал для выполнения данной лабораторной работы рассматривается в лекционном курсе и приведен в конспекте лекций.
Результатом выполнения лабораторной работы является оформленный по требованиям и сданный отчет.
Максимальное количество баллов, которое студент может получить за выполнение данной лабораторной работы – 10.
4
1 ОСНОВНЫЕ ТЕОРЕТИЧЕСКИЕ ПОЛОЖЕНИЯ
Рассмотрим систему тактирования микроконтроллеров подсемейства MSP430G2xxx (в других подсемействах функции
исостав модуля тактирования могут отличаться).
Вподсемействе MSP430G2xxx для тактирования процессора и периферийных модулей используется три источника:
- LFXT1CLK – низкочастотный генератор, который может работать с кварцевым резонатором или с внешним тактовым сигналом с частотой 32768 кГц.
- DCOCLK – встроенный генератор с цифровым управлением частотой.
- VLOCLK – встроенный генератор с частотой 12 кГц, предназначенный для создания приложений с очень низким энергопотреблением.
При этом на основании этих трех источников может формироваться три тактовых сигнала:
- MCLK – основной тактовый сигнал, используемый для тактирования ЦПУ. Источник его выбирается программно: LFXT1CLK, DCOCLK или VLOCLK. При этом частота может быть при необходимости программно поделена на 2, 4 или 8.
- ACLK – вспомогательный тактовый сигнал, применяемый для тактирования отдельных периферийных модулей: таймеров, АЦП и т.д. Источник его также выбирается программно: LFXT1CLK или VLOCLK. Частота может быть уменьшена в 2, 4 или 8 раз.
- SMCLK – дополнительный тактовый сигнал, также применяемый для тактирования отдельных периферийных модулей. Источник его выбирается программно: LFXT1CLK, DCOCLK или VLOCLK, частота может быть программно поделена на 2, 4 или 8.
Каждый из источников тактового сигнала может быть программно отключен для уменьшения энергопотребления.
5
При запуске микроконтроллера ЦПУ тактируется от источника DCOCLK, по умолчанию имеющего частоту около
1,1 МГц.
Для управления модулем тактирования в котроллерах семейства MSP430 имеется 7 регистров:
-DCOCTL – регистр управления частотой сигнала
DCOCLK.
-BCSCTL1, BCSCTL2 и BCSCTL3 – регистры управления модуля тактирования.
-IE1 – регистр разрешения прерываний 1 (используется совместно с другими модулями).
-IFG1 – регистр флагов прерываний 1 (используется совместно с другими модулями).
-SR – статусный регистр контроллера (используется также для выполнения других функций).
В данном руководстве будут приведены только те биты, которые необходимы для выполнения данной т последующих лабораторных работ, более подробную информацию можно найти в дополнительной литературе [2]
В регистре BCSCTL1 понадобятся биты DIVA1 и DIVA0, которые в паре определяют коэффициент деления сигнала
ACLK:
-при DIVA1 = 0 и DIVA0 = 0 делитель равен 1;
-при DIVA1 = 0 и DIVA0 = 1 делитель равен 2;
-при DIVA1 = 1 и DIVA0 = 0 делитель равен 4;
-при DIVA1 = 1 и DIVA0 = 1 делитель равен 8.
В регистре BCSCTL2 будут задействованы следующие биты:
а) SELM1 и SELM0 определяют источник тактового сигнала MCLK:
-при SELM1 = 0 источником тактового сигнала MCLK является DCOCLK;
-при SELM1 = 1 источником тактового сигнала MCLK
является LFXT1CLK или VLOCLK.
При этом значение бита SELM0 не имеет значения
6
б) DIVM1 и DIVM0 задают коэффициент деления сигнала
MCLK.
-при DIVM1 = 0 и DIVM0 = 0 делитель равен 1;
-при DIVM1 = 0 и DIVM0 = 1 делитель равен 2;
-при DIVM1 = 1 и DIVM0 = 0 делитель равен 4;
-при DIVM1 = 1 и DIVM0 = 1 делитель равен 8.
в) SELS определяет источник тактового сигнала SMCLK.
-при SELS = 0 источником тактового сигнала SMCLK является DCOCLK;
-при SELS = 1 источником тактового сигнала SMCLK
является LFXT1CLK или VLOCLK.
г) DIVS1 и DIVS0 задают коэффициент деления сигнала
SMCLK.
-при DIVS1 = 0 и DIVS0 = 0 делитель равен 1;
-при DIVS1 = 0 и DIVS0 = 1 делитель равен 2;
-при DIVS1 = 1 и DIVS0 = 0 делитель равен 4;
-при DIVS1 = 1 и DIVS0 = 1 делитель равен 8.
Врегистре BCSCTL3 понадобится всего одна пара битов LFXT1S1 и LFXT1S0, посредством которой определяется источник низкочастотного тактового сигнала (LFXT1CLK или
VLOCLK).
- при LFXT1S1 = 0 и LFXT1S0 = 0 источником является
LFXT1CLK;
- комбинация LFXT1S1 = 0 и LFXT1S0 = 1 является зарезервированной;
- при LFXT1S1 = 1 и LFXT1S0 = 0 источником является
VLOCLK;
- при LFXT1S1 = 1 и LFXT1S0 = 1 источником является внешний сигнал синхронизации.
Врегистре IFG1 к модулю тактирования относится всего один бит – OFIFG, который является флагом прерывания при неисправности генератора. Он устанавливается в «1» если произошел сбой в одном или нескольких генераторах модуля тактирования. Сброс флага в «0» должен осуществляться программно.
7
Отключение того или иного тактового сигнала происходит путем установки определенных битов регистра состояния (SR):
-SCG1. Когда этот бит установлен, сигнал SMCLK отключен.
-SCG0. Когда этот бит установлен, генератор с цифровым управлением отключен, если сигнал DCOCLK не используется для формирования сигналов MCLK или SMCLK.
-OSCOFF. Когда этот бит установлен, кварцевый генератор выключен, если сигнал LFXT1CLK не используется для формирования сигналов MCLK или SMCLK.
-CPUOFF. Когда этот бит установлен, ЦПУ выключено. Для доступа к регистру состояния в компиляторе
определены специальные функции, которые будут рассмотрены ниже.
В качестве примера рассмотрим программу, в которой для ЦПУ будет задействован источник VLOCLK с частотой, деленной на 8, а все неиспользуемые источники тактового сигнала будут отключены. Для демонстрации работы микроконтроллера выполним также следующую задачу. Если на входе P1.0 присутствует логическая «1», то светодиод LED2 должен быть погашен, а если «0», то он должен мигать с частотой 1 Гц. Программа, реализующая эти функции, имеет следующий вид:
#include <msp430.h> //1.Подключение заголовочного файла микроконтроллеров MSP430
volatile unsigned char delay;//2.Переменная для организации
временных задержек |
//3. |
|
int main(void) |
||
//4.Главная функция программы |
||
{ |
//5. |
|
WDTCTL = WDTPW|WDTHOLD; |
//6.Остановка сторожевого таймера |
|
BCSCTL3 |= LFXT1S1; |
//7. Выбор VLOCLK в качестве |
|
низкочастотного тактового сигнала |
||
IFG1 &= ~OFIFG; |
//8.Сброс флага сбоя генерации |
__bis_SR_register(SCG1|SCG0|OSCOFF);//9.Выключение неиспользуемых источников сигналов
BCSCTL2 |= SELM0|SELM1|DIVM1|DIVM0;//10.Использование для тактирования ЦПУ частоты VLOCLK/8
8
P1DIR = BIT6; |
//11.Перевод линии, на которой |
находится LED2, на выход |
//12.Включение подтягивающего |
P1REN = BIT0; |
|
резистора на входе Р1.0 |
//13.Обнуление всех битов регистра |
P1OUT = 0; |
|
P1OUT |
//14.Бесконечный цикл |
while (1) |
|
{ |
//15. |
if (~P1IN&BIT0) |
//16.Если бит 0 порта Р1 равен 0, |
{ |
//17. |
P1OUT ^= BIT6; |
//18.Переключение состояние |
светодиода LED2 в противоположное
for (delay = 0; delay < 54; delay++);//19.и задержка 500
мс |
//20. |
} |
|
else |
//22.Иначе (если бит 0 порта Р1 |
равен 1), |
//22. |
{ |
|
P1OUT &= ~BIT6; |
//23.выключение светодиода LED2 |
} |
//24. |
} |
//25. |
} |
//26. |
Большая часть регистров, используемых в данной программе, была рассмотрена в предыдущей лабораторной работе, поэтому здесь буду рассмотрены только те, которые не встречались ранее.
В строке 2 объявляется переменная delay типа volatile unsigned char. Эта переменная используется для организации временной задержки следующим образом. В строке 19 организуется цикл типа for, в котором происходит наращивание переменной delay от нуля до некоторого значения, определяющего величину временной задержки. Знак «;» в конце строки означает, что в цикле ничего, кроме инкрементирования переменной delay, не происходит. А раз так, то компилятор может посчитать, что цикл бесполезный, и при включенной оптимизации благополучно исключить его из исполняемого кода. Чтобы этого не произошло, используется префикс «volatile» при объявлении переменной delay. Он указывает компилятору на то, что операции с данной переменной нельзя оптимизировать, поэтому цикл for будет включен в исполняемый код без всяких сокращений и исключений.
9
Встроке 7 в качестве источника низкочастотного сигнала выбирается VLOCLK (устанавливается в единицу только бит
LFXT1S1, а бит LFXT1S0 равен кулю).
Поскольку по умолчанию в качестве этого сигнала используется LFXT1CLK, а кварц на плате отсутствует, то при пуске контроллера происходит сбой генератора, о чем говорит установленный флаг OFIFG регистра IFG1. Для запуска низкочастотного генератора этот флаг нужно сбросить, что и делается в строке 8.
Встроке 9 происходит отключение неиспользуемых тактовых генераторов: LFXT1CLK и DCOCLK путем установки битов SCG1, SCG0 и OSCOFF регистра состояния. Для этого используется функция __bis_SR_register(), в которую в качестве аргумента передаются необходимые биты, разделенные знаком «|» (побитовое «ИЛИ»). Для сброса битов регистра состояния используется аналогичная по синтаксису функция
__biс_SR_register().
Встроке 10 в качестве источника сигнала MCLK выбирается генератор VLOCLK (устанавливаются биты SELM0
иSELM1), частота которого делится на 8 (устанавливаются биты DIVM1и DIVM0).
Все эти действия приводят к тому, что в контроллере активным остается только источник VLOCLK с частотой 12 кГц, а тактовая частота ЦПУ (MCLK) становится равной 12 / 8 = 1,5 кГц.
Теперь можно посчитать необходимое количество проходов цикла для задания требуемой частоты мигания светодиода. Для задания частоты в 1 Гц необходимо каждые 500 мс переключать состояние светодиода в противоположное, тогда половину секунды он будет гореть, а половину – нет. Каждый
проход цикла занимает 14 тактов, что соответствует 14 / 1,500 кГц ≈ 9,33 мс. Для реализации задержки в 500 мс нужно 500 / 9,33 ≈ 54 прохода цикла, что и указывается в строке
19.
10