Цель работы и подготовка к работе

Целью работы является изучение контроллера прерываний микроконтроллера MSP430F169 и работа с ним на примере интервального таймера.

С инструкцией, содержащей требования охраны труда, студенты знакомятся в лаборатории.

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

1.  Варианты ввода/вывода.

Существует три основных варианта обмена данными между центральным процессорным устройством (ЦПУ) и периферийными (внешними) устройствами:

1)  программный ввод/вывод;

2)  ввод/вывод по прерываниям;

3)  ввод/вывод с использованием прямого доступа к памяти.

В случае программного ввода/вывода внешним устройствам отводится пассивная роль сигнализации о готовности к обмену данными. При этом ЦПУ должен выполнять следующие основные операции.

1)  Инициализация внешнего устройства, т. е. начальный сброс битов готовности во внешнем устройстве.

2)  Цикл ожидания готовности внешнего устройства с выходом из него при установке битов готовности.

3)  Вызов подпрограммы обслуживания внешнего устройства, соответствующей установленному биту готовности. В подпрограмме обслуживания бит готовности должен быть сброшен, чтобы не произошло зацикливания на обслуживании одного и того же внешнего устройства.

4)  Возврат в цикл ожидания готовности.

НЕ нашли? Не то? Что вы ищете?

Такой метод ввода/вывода еще называется последовательным опросом или полингом. Порядок опроса внешних устройств должен соответствовать их приоритетам – устройство с наивысшим приоритетом должно быть опрошено первым.

Преимуществом программного ввода/вывода является его простая программно-аппаратная реализация. Недостаток метода очевиден – ЦПУ постоянно занят опросом внешних устройств и больше ничем другим заниматься не может, т. е. большая часть процессорного времени тратится впустую.

Выходом из этой ситуации является ввод/вывод по прерываниям. В этом случае ЦПУ может заниматься обработкой какой-либо задачи (основной программы), а по приходу сигнала готовности перейти к подпрограмме обслуживания внешнего устройства.

2. Прерывания микроконтроллера MSP430F169 и его источники.

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

Если допускается прерывание подпрограммы обслуживания некоторого внешнего устройства на время обслуживания другого внешнего устройства с более высоким приоритетом, то такое прерывание называется вложенным. Микроконтроллеры семейства MSP430 имеют особенность – когда вложенные прерывания разрешены, любое прерывание, возникающее во время выполнения одной подпрограммы обработки прерывания, вызовет выполнение своей подпрограммы, несмотря на приоритеты прерываний.

Начальный адрес подпрограммы обслуживания называется вектором. Если существует взаимно однозначное соответствие между периферийным модулем и вектором прерывания, то такие прерывания называются векторными. Векторы прерываний микроконтроллера MSP430F169 расположены по фиксированным адресам в диапазоне с 0FFFFh no 0FFE0h, как показано в таблице 1. Из этой таблицы видно, что каждый вектор представляет собой шестнадцатиразрядное число. Это число и является адресом начала подпрограммы обработки прерывания.

Прерывания микроконтроллеров семейства MSP430 делятся на три типа:

1)  Системное (системный сброс);

2)  Немаскируемое (NMI);

3)  Маскируемое.

Системное прерывание имеет наивысший приоритет и вырабатывается схемой сброса при включении питания (Power On Reset - POR) в следующих случаях:

-  включение микроконтроллера;

-  появление сигнала низкого уровня на выводе RST/NMI, когда он сконфигурирован как сход сброса;

-  при пониженном уровне напряжения питания.

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

-  вывод RST/NMI конфигурируется как вход сброса;

-  порты ввода/вывода переключаются в режим ввода;

-  инициализируются периферийные устройства;

-  сбрасывается регистр статуса (SR);

-  в программный счетчик загружается вектор сброса, находящийся по адресу 0FFFEh, и со следующего такта ЦПУ производит выборку команды, расположенной по адресу вектора сброса.

Системный сброс также может вызвать сторожевой таймер и Flash-память.

Немаскируемые прерывания NMI не маскируются общим битом разрешения прерываний (GIE), но могут управляться индивидуальными битами включения прерывания (NMIIFG, OFIFG, ACCVIFG). Когда происходит запрос немаскируемого прерывания NMI, все биты разрешения NMI-прерываний автоматически сбрасываются, т. е. прерывания запрещаются. Выполнение программы продолжается с адреса, содержащегося в векторе немаскируемого прерывания (0FFFCh). Для того чтобы разрешить прерывания, необходимо вновь установить соответствующие биты разрешения прерываний.

Немаскируемое прерывание NMI может быть вызвано тремя событиями (таблица 1):

-  появлением фронта сигнала на выводе RST/NMI;

-  появление неисправности генератора;

-  нарушение доступа к флэш-памяти.

При включении микроконтроллера вывод RST/NMI конфигурируется как вывод сброса. Его функциональное назначение определяется в регистре управления сторожевым таймером WDTCTL. Если вывод RST/NMI запрограммирован на функцию сброса, ЦПУ будет находиться в состоянии сброса до тех пор, пока на этом выводе присутствует сигнал низкого уровня. После смены уровня на этом входе на логическую «1», ЦПУ начинает выполнять программу с команды, адрес которой хранится в векторе сброса (0FFFEh).

Если вывод RST/NMI сконфигурирован программой пользователя как вход вызова немаскируемого прерывания, фронт сигнала, выбранного битом WDTNMIES вызовет NMI-прерывание, если установлен бит NMIIE. Также будет установлен флаг NMIIFG. Когда вывод RST/NMI сконфигурирован в NMI-режиме, сигнал, вызывающий NMI-прерывание, не должен удерживаться на выводе RST/NMI в состоянии лог.«0».

Флаг ACCVIFG устанавливается, когда происходит нарушение доступа к Flash-памяти. Генерация NMI-прерывания при нарушении доступа к Flash-памяти происходит при установленном бите ACCVIE. Проверкой флага ACCVIFG в процедуре обработки NMI-прерывания можно определить, было ли вызвано прерывание нарушением доступа к Flash-памяти.

Установкой бита OFIE можно разрешить генерацию NMI-прерывания при неисправности тактового генератора. С помощью флага OFIFG процедура обработки NMI-прерывания может проверить, было ли NMI-прерывание вызвано неисправностью генератора.

Установка битов разрешения NMI-прерывания ACCVIE, NMIIE и OFIE не должна производится в теле процедуры обработки NMI-прерывания, за исключением случая, когда это происходит непосредственно перед командой RETI. В противном случае могут появиться вложенные NMI-прерывания, что приведет к переполнению стека и дальнейшей непредсказуемой работе.

Маскируемые прерывания вызываются периферийными устройствами. С помощью индивидуальных битов разрешения прерывания можно отключать источники прерываний как по отдельности, так и все сразу с использованием бита общего разрешения прерываний GIE в регистре статуса SR.

Время задержки вызова прерывания составляет 6 машинных циклов, с момента приема запроса на прерывание и до начала выполнения первой команды процедуры обработки прерывания.

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

1)  Текущая команда выполняется до конца;

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

3)  Содержимое регистра статуса SR помещается в стек;

4)  Если поступило несколько прерываний во время выполнения последней команды, обрабатывается прерывание с наивысшим приоритетом, остальные ожидают обслуживания;

5)  Автоматически сбрасывается флаг источника, вызвавшего прерывание. Флаги запроса остальных прерываний остаются установленными в ожидании обслуживания программным обеспечением.

6)  Регистр SR очищается, за исключением бита SCG0. В результате прекращается работа в любом режиме пониженного энергопотребления;

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

Подпрограмма обработки прерывания заканчивается командой RETI. При выполнении этой команды восстанавливается из стека содержимое регистров SR и PC, и начинается выполнение программы с того места, где она была прервана. Для возврата из прерывания необходимо 5 машинных циклов.

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

Таблица 1. Источники прерываний, флаги и векторы.

Источник прерывания

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

Характер прерывания

Адрес

Приоритет

Включение питания;

внешний сброс;

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

Flash-память

WDTIFG

KEYV

Сброс

0FFFEh

15 (высший)

NMI;

ошибка генератора;

ошибка доступа к Flash-памяти

NMIIFG

OFIFG

ACCVIFG

Немаскируемое

Немаскируемое

Немаскируемое

0FFFCh

14

Таймер B7

TBCCR0 CCIFG

Маскируемое

0FFFAh

13

Таймер B7

TBCCR1 – TBCCR6

CCIFGs, TBIFG

Маскируемое

0FFF8h

12

Компаратор A

CAIFG

Маскируемое

0FFF6h

11

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

WDTIFG

Маскируемое

0FFF4h

10

Приемник USART0

URXIFG0

Маскируемое

0FFF2h

9

Передатчик USART0;

I2C

UTXIFG0

I2CIFG

Маскируемое

0FFF0h

8

ADC12

ADC12IFG

Маскируемое

0FFEEh

7

Таймер A3

TACCR0 CCIFG

Маскируемое

0FFECh

6

Таймер A3

TACCR1, TACCR2

CCIFGs, TAIFG

Маскируемое

0FFEAh

5

Порт P1

P1IFG0 – P1IFG7

Маскируемое

0FFE8h

4

Приемник USART1

URXIFG1

Маскируемое

0FFE6h

3

Таблица 1. (Окончание).

Передатчик USART1

UTXIFG1

маскируемое

0FFE4h

2

Порт P2

P2IFG0 – P2IFG7

Маскируемое

0FFE2h

1

DAC12,

DMA

DAC12_0IFG, DAC12_1IFG

DMA0IFG, DMA1IFG, DMA2IFG

Маскируемое

0FFE0h

0

Рисунок 1. Блок-схема таймера «А»

3. Таймер «А».

Таймер «А» реализован на основе 16-разрядного счетчика. Таймер «А» позволяет формировать временные интервалы, осуществлять широтно-импульсную модуляцию (ШИМ), работать в режиме захвата/сравнения. Таймер «А» также может являться источником прерываний. Прерывания могут быть сгенерированы от счетчика при его переполнении и от каждого из регистров захвата/сравнения.

В состав таймера «А» входят четыре основных блока – собственно блок таймера и три блока захвата/сравнения.

Функциональная схема таймера «А» показана на рисунке 1.

3.1. Блок таймера.

Программная модель таймера «А» представлена с помощью программно-доступных регистров – регистра управления таймером TACTL и регистра таймера TAR, отображающего состояние счетчика. Регистры таймера «А» показаны в таблице 3, а назначение отдельных битов этих регистров – в таблице 4.

Тактирование таймера TACLK может производиться от ACLK, SMCLK или от внешнего источника через входы TACLK или INCLK. Источник тактовых импульсов выбирается с помощью битов TASSELx в регистре TACTL. Выбранный источник тактирования может быть подключен к таймеру напрямую или через делитель частоты, коэффициент деления которого задается битами IDx регистра TACTL.

При работе счетчика от внешнего сигнала TACLK, если он асинхронен с сигналом тактирования ЦПУ, любое чтение из TAR должно происходить, когда таймер не работает, в противном случае результаты могут быть непредсказуемы. Любая запись в TAR приведет к немедленному результату.

Изменение состояния счетчика происходит по фронту тактового сигнала. Состояние счетчика отображается в регистре TAR, который может быть программно прочитан и записан. Регистр TAR можно очистить установкой бита TACLR в регистре TACTL. Установка TACLR также очищает делитель тактовой частоты и направление счета для режима вверх/вниз. Рекомендуется останавливать таймер перед изменением режима его работы (за исключением операций с флагом прерывания и разрешения прерывания, и ТАCLR), чтобы предотвратить его некорректную работу.

Таймер может быть запущен или перезапущен следующими способами:

-  Таймер считает, когда биты МСх ¹ «00» и источник тактовых импульсов активен;

-  Когда таймер работает в режимах «вверх» или «вверх/вниз», он может быть остановлен путем записи 0 в TACCR0. Затем таймер может быть перезапущен путем записи ненулевого значения в TACCR0. В этом случае таймер начинает инкрементироваться от нуля.

Таймер имеет четыре режима работы, описанных в таблице 2. Режимы работы выбираются с помощью битов МСх регистра TACTL.

Таблица 2. Режимы работы таймера.

МСх

Режим

Описание

00

Стоп

Остановка таймера

01

Вверх

Таймер многократно считает от 0 до значения в TACCR0

10

Непрерывный

Таймер многократно считает от 0 до значения 0FFFFh

11

Вверх/вниз

Таймер многократно считает от 0 вверх до значения в TACCR0 и назад до 0.

Режим «вверх» используется, если период таймера должен отличаться от 0FFFFh. Таймер периодически считает вверх от 0 до значения, содержащегося в регистре сравнения TACCR0. Период работы таймера равен TACCR0+1. Когда значение таймера становится равно содержимому TACCR0, таймер перезапускается. Если режим «вверх» выбран, когда значение таймера больше содержимого TACCR0, таймер немедленно перезапускается, начиная считать от нуля.

Когда изменяется TACCR0 во время работы таймера, таймер продолжает отсчет вверх до нового значения TACCR0, если новый период больше или равен старому или больше текущего значения TAR. Если новый период меньше величины текущего значения TAR, таймер обнуляется. Однако до обнуления счетчика может произойти один дополнительный отсчет.

Временные диаграммы на рисунке 2 поясняют работу таймера в режиме «вверх».

Рисунок 2. Работа таймера в режиме «вверх».

Работа таймера «А» в непрерывном режиме подобна работе таймера в режиме «вверх», за исключением того, что счетчик таймера всегда считает от 0 до 0FFFFh. Регистр захвата/сравнения TACCR0 работает подобно другим регистрам захвата/сравнения. Непрерывный режим может использоваться для формирования независимых временных интервалов и выходных частот.

Режим «вверх/вниз» используется, если период таймера должен отличаться от значения 0FFFFh и необходима генерация симметричных импульсов. Таймер непрерывно считает вверх до значения, находящегося в регистре сравнения TACCR0 и назад к нулю, как показано на рисунке 3. Период таймера составляет удвоенную величину значения в TACCR0.

Направление счета запоминается. Это позволяет таймеру останавливаться и запускаться в том же направлении отсчета, которое было до останова. Если это нежелательно, для очистки направления нужно установить бит TACLR. Бит TACLR также очищает значения в TAR и в делителе TACLK.

Рисунок 3. Работа таймера в режиме «вверх/вниз».

3.2. Блоки захвата/сравнения.

Помимо счетчика, в состав модуля таймера «А» входят три одинаковых блока захвата/сравнения (CCR0, CCR1, CCR2 на рисунке 1). Любой из этих блоков может быть использован для фиксации (захвата) значения таймера или для формирования временных интервалов. Программная модель блоков захвата/сравнения представлена регистрами управления захватом/сравнением TACCTL0 - TACCTL2 и регистрами захвата/сравнения TACCR0 - TACCR1.

Режим захвата выбирается, когда если в регистре TACCTLx установить САР=1. Входы захвата CCIxA и CCIxB подключаются к внешним выводам или к внутренним сигналам и выбираются с помощью битов CCISx регистра TACCTLx. Уровень входного сигнала может быть прочитан в любое время через бит CCI. Биты СМх определяют, как будет происходит захват – по фронту входного сигнала, по его спаду или в обоих случаях.

Если захват произошел, тогда:

-  Значение таймера копируется в регистр TACCRx;

-  Устанавливается флаг прерывания CCIFG.

Обычно сигнал захвата асинхронен тактовой частоте таймера. Для его синхронизации рекомендуется устанавливать бит SCS. Если произошел второй захват перед прочтением значения первого захвата, устанавливается бит переполнения COV. Бит COV должен сбрасываться программно.

Работу таймера «А» в режиме захвата поясняют временные диаграммы, показанные на рисунке 4.

Рисунок 4. Работа таймера «А» в режиме захвата.

Режим сравнения выбирается, когда САР=0. Режим сравнения используется для генерации выходных ШИМ-сигналов или прерываний через определенные временные интервалы. Когда TAR досчитывает до значения в TACCRx. происходит следующее:

-  Устанавливается флаг прерывания CCIFG;

-  Внутренний сигнал EQU=1;

-  EOUx воздействует на выход согласно режиму вывода;

-  Входной сигнал CCI фиксируется в SCCI.

Каждый блок захвата/сравнения содержит модуль вывода. Модуль вывода используется для генерации выходных сигналов с определенными временными характеристиками, в том числе и ШИМ-сигналов. Более подробно о модулях вывода можно узнать в [2].

3.3. Прерывания таймера «А».

С таймером «А» связаны два вектора прерываний (Таблица 1):

-  Вектор прерывания TACCR0 для TACCR0 CCIF;

-  Вектор прерывания TAIV для всех других флагов CCIFG и TAIFG.

Прерывания от таймера «А» вызываются, если установлен бит GIE в регистре SR, установлен бит TAIE в регистре TACTL или бит CCIE в регистрах TACCTLx и произошло хотя бы одно из следующих событий:

-  произошло переполнение таймера;

-  произошло событие захвата или сравнения.

Флаг переполнения таймера TAIFG устанавливается в следующих случаях:

-  в режиме «вверх» счетчик таймера переключается из TACCR0 в 0;

-  в непрерывном режиме счетчик переключается из 0FFFFh в 0;

-  в режиме «вверх/вниз» счетчик переключается из 0001h в 0.

В режиме захвата любой флаг CCIFG устанавливается, когда значение таймера зафиксировано в соответствующем регистре TACCRx (см. рисунок 4). В режиме сравнения устанавливается любой флаг CCIFG, если TAR = TACCRx (см. рисунки 2 и 3). Необходимо также обратить внимание на то, что в режиме «вверх/вниз» флаг TACCR0 CCIFG устанавливается только однажды за период при переключении таймера из TACCR0-1 в TACCR0.

Флаги CCIFG можно устанавливать или очищать программно. Все флаги CCIFG запрашивают прерывание, когда установлены их соответствующие биты CCIE в регистрах TACCTLx и бит GIE в регистре статуса SR.

Флаг TACCR0 CCIFG обладает наивысшим приоритетом прерывания таймера «А» и имеет вектор прерывания с адресом 0FFECh, как показано в таблице 1. Флаг TACCR0 CCIFG автоматически сбрасывается, когда обслуживается запрос на прерывание TACCR0.

Флаги TACCR1 CCIFG, TACCR2 CCIFG и флаг TAIFG распределены по приоритетам и объединены в источник одного вектора прерывания с адресом 0FFEAh. Регистр вектора прерывания TAIV используется для определения, какой флаг запросил прерывание (см. таблицу 5). Можно оценить содержимое регистра TAIV или добавить его к программному счетчику для автоматического входа в подпрограмму обработки прерывания. Запрещенные прерывания Таймера «А» не влияют на значение TAIV.

Любое обращение – чтение или запись регистра TAIV – автоматически сбрасывает флаг наивысшего ожидающего прерывания. Например, если установлены флаги TACCR1 и TACCR2 CCIFG, когда процедура обработки прерывания обращается к регистру TAIV, флаг TACCR1 CCIFG автоматически сбрасывается, т. к. имеет более высокий приоритет. После выполнения команды RETI в конце процедуры обработки прерывания, флаг TACCR2 CCIFG генерирует другое прерывание.

Таблица 3. регистры таймера «А».

Регистр

Краткое обозначение

Тип доступа

Адрес

Исходное состояние

Управление таймером «А»

TACTL

Чтение/запись

0160h

Сброшен

Счетчик таймера «А»

TAR

Чтение/запись

0170h

Сброшен

Регистр 0 управления захватом/сравнением таймера «А»

TACCTL0

Чтение/запись

0162h

Сброшен

Таблица 3. (Окончание).

Регистр 0 захвата/сравнения таймера «А»

TACCR0

Чтение/запись

0172h

Сброшен

Регистр 1 управления захватом/сравнением таймера «А»

TACCTL1

Чтение/запись

0164h

Сброшен

Регистр 1 захвата/сравнения таймера «А»

TACCR1

Чтение/запись

0174h

Сброшен

Регистр 2 управления захватом/сравнением таймера «А»

TACCTL2

Чтение/запись

0166h

Сброшен

Регистр 2 захвата/сравнения таймера «А»

TACCR2

Чтение/запись

0176h

Сброшен

Регистр вектор прерывания таймера «А»

TAIV

Только чтение

012Eh

Сброшен

Таблица 4. Описание битов регистров таймера «А».

Регистр

Номер бита

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

Описание

TACTL

9-8

TASSELx

Выбор источника тактирования таймера «А

00 – TACLK

01 – ACLK

10 – SMCLK

11 – INCLK

7-6

IDx

Входной делитель частоты

00 – «/1»;

01 – «/2»;

10 – «/4»;

11 – «/8».

5-4

MCx

Выбор режима (см. таблицу 2)

2

TACLR

Сброс TAR, IDx, MCx

1

TAIE

Разрешение прерывания от таймера «А»

0 – прерывание запрещено;

1 – прерывание разрешено.

0

TAIFG

Флаг прерывания от таймера «А»

0 – прерывание не ожидается;

1 – прерывание ожидается.

Таблица 4. (Окончание).

TACCTLx

15 – 14

CMx

Режим захвата

00 – нет захвата;

01 – захват по фронту;

10 – захват по спаду;

11 – захват по фронту и спаду.

13 – 12

CCISx

Выбор входа захвата/сравнения

11

SCS

Синхронизация источника захвата

0 – асинхронный захват;

1 – синхронный захват.

10

SCCI

Синхронизация входа захвата/сравнения

8

CAP

Режим захвата/сравнения

0 – режим сравнения;

1 – режим захвата.

7 – 5

OUTMODx

Режим вывода

000 –значение бита OUT;

001 –установка;

010 – переключение/сброс;

011 – установка/сброс;

100 – переключение;

101 – сброс;

110 – переключение/установка;

111 – сброс/установка.

4

CCIE

Разрешение прерывания по захвату/сравнению

0 – прерывание запрещено;

1 – прерывание запрещено.

3

CCI

Состояние входа захвата/сравнения.

2

OUT

Состояние выхода

1

COV

Переполнение захвата

0 – переполнение произошло;

1 – переполнение произошло.

0

CCIFG

Флаг прерывания захвата/сравнения

0 – прерывание не ожидается;

1 – прерывание ожидается.

TAIV

15 – 0

См. таблицу 5.

Таблица 5. Регистр вектора прерывания таймера «А».

Содержимое TAIV

Источник прерывания

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

Приоритет прерывания

00h

Прерывание не ожидается

02h

Захват/сравнение 1

TACCR1 CCIFG

Высший

04h

Захват/сравнение 1

TACCR2 CCIFG

06h

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

Таблица 5. (Окончание).

08h

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

0Ah

Переполнение таймера

TAIFG

0Ch

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

0E0h

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

Низший

4. Описание лабораторной установки.

При выполнении лабораторной работы используется отладочная плата MSP430-169stk. Описание отладочное платы приведено в методических указаниях к лабораторной работе № 2 «Периферийные устройства микроконтроллера MSP430F169».

5. Задания к лабораторной работе.

В соответствии с выбранным вариантом задания составить блок-схему программы и написать программу на языке ассемблера с использованием контроллера прерываний. Программа должна выполнять следующие действия.

1)  Инициализировать тактовый генератор.

2)  При нажатии на кнопку В1 зажечь светодиоды LED1 и LED2 и запустить таймер «А». Опрос состояния кнопки В1 осуществить с использованием прерываний.

3)  По истечении интервала времени Т1 выключить светодиод LED1, а по истечении интервала времени Т2 выключить светодиод LED2. Значения Т1 и Т2 взять из таблицы 6 в соответствии со своим вариантом.

4)  При нажатии на кнопку В2 запрещаются прерывания от кнопки В1 и от таймера «А».

5)  При нажатии на кнопку В3 разрешаются прерывания от кнопки В1 и от таймера «А».

Обслуживание кнопок В2 и В3 организовать по принципу программного ввода/вывода, а гашение светодиодов производить с использованием прерываний каналов 1 и 2 таймера «А». В качестве источника тактовой частоты таймера «А» желательно использовать низкочастотный генератор LFXT1 («часовой»). В ходе выполнения программы проверить влияние кнопок В2 и В3 на состояние светодиодов.

Таблица 6. Номера вариантов задания.

Вариант

1

2

3

4

5

6

7

8

Т1, с

1

2

1,5

2,5

1

2

3

4

Т2, с

2

3

2

3

2,5

3,5

4

3

5.1. Рекомендации по составлению программы.

Для определения требуемых констант необходимо найти в файле msp430x16x. h раздел:

/****

* Timer A3

****/

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

Ниже приведены примеры записи констант в регистры с использованием условных обозначений битов.

1) Пример загрузки в регистр управления таймером «А» TACTL следующих параметров таймера:

-  источника тактирования таймера – ACLK;

-  коэффициент деления входной частоты = 2,

-  режим счета – непрерывный;

MOV #( (TASSEL_1) | (MC_2) | (ID_1) ), &TACTL ;

2) Пример загрузки в регистр 1 управления захватом/сравнением таймера «А»режима TACCTL1 следующих параметров:

-  режим сравнения;

-  разрешены прерывания по захвату/сравнению;

-  искусственно взводится флаг прерывания по сравнению.

MOV #( (CCIE) | (CCIFG) ), &TACTL ;

Для нахождения адресов вектора прерывания нужно найти секцию /****

* Interrupt Vectors (offset from 0xFFE0)

****/

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

NAME main

PUBLIC main

#include <msp430x16x. h> ; подключение API-файла.

ORG RESET_VECTOR ; ячейки вектора сброса (0xFFFE)

DC16 main ; резервирование 16-битного адреса начала блока main

ORG TIMERA0_VECTOR ; ячейки вектора прерывания (0xFFEC)

DC16 timerA_CC0_interrupt_routine ; резервирование 16-битного адреса

начала блока обработки прерывания

RSEG CODE

main:

jmp main ; последняя команда блока

timerA_CC0_interrupt_routine:

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

reti ; последняя команда блока (возврат из прерывания)

END main

Рекомендуемая литература

1.  Техническая документация на микропроцессор MSP430F169 (MSP430F169.pdf).

2.  Семейство микроконтроллеров MSP430x1xx. Руководство пользователя: Пер. с англ. – М.: Серия «Библиотека Компэла». , 2004. – 368 с.