Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Микропроцессорная техника / Конспект лекций

.pdf
Скачиваний:
34
Добавлен:
05.03.2016
Размер:
1.71 Mб
Скачать

регистра PxOUT определяет тип «подтяжки» на соответствующем выводе порта.

Бит = 0: Вывод подтягивается к общему проводу.

Бит = 1: Вывод подтягивается к питанию.

5.2.3. Регистр направления PxDIR

Значение каждого бита регистра PxDIR определяет направление передачи данных соответствующего вывода порта, независимо от выбранной для этого вы вода функции. Если вывод используется каким-либо периферийным модулем, то бит регистра PxDIR должен быть установлен в соответствии с требованиями данного модуля.

Бит = 0: Вывод порта переключается на вход.

Бит = 1: Вывод порта переключается на выход.

5.2.4. Регистр включения подтягивающих резисторов PxREN

Каждый бит регистра PxREN подключает или отключает внутренний подтягивающий резистор соответствующего вывода порта. Тип «подтяжки» определяется соответствующим битом регистра PxOUT.

Бит = 0: Подтягивающий резистор отключен.

Бит = 1: Подтягивающий резистор подключен.

5.2.5. Регистры выбора функции PxSEL и PxSEL2

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

PxSEL и PxSEL2 используется для выбора функции соответствующего вывода микроконтроллера: линия порта ввода/вывода или вывод периферийного модуля.

PxSEL

PxSEL2

Функция вывода

0

0

Линия порта ввода/вывода

0

1

Вывод основного периферийного модуля

1

0

Зарезервировано. См. документацию на конкретную модель

1

1

Вывод дополнительного периферийного модуля

Установка PxSELx = 1 не задаёт автоматически направление передачи данныхвы вода. Для определённых периферийных модулей может потребоваться конфигурирование битов PxDIRx в соответствии с требованиями модуля.

Если установлен любой из битов PxSEL или PxSEL2, то генерация прерывания от соответствующего вывода запрещена. Поэтому сигналы на таких выводах не вызовут генерации внешних прерываний от P1 или P2, независимо от состояния соот ветствующего бита P1IE или P2IE.

Если вывод порта используется в качестве входа периферийного модуля, то

41

входным сигналом для данного модуля является зафиксированное в регистре защёлке значение сигнала с вывода микроконтроллера. При PxSELx = 1

внутренний входной сигнал повторяет сигнал, присутствующий на выводе. Однако при PxSELx = 0 на входе периферийного модуля сохраняется значение сигнала,

которое присутствовало на выводе микроконтроллера в момент сброса бита

PxSELx.

5.2.6. Прерывания от портов P1 и P2

Любой из выводов портов P1 и P2 может генерировать прерывание.

Конфигурирование этой функции осуществляется с помощью регистров PxIFG, PxIE и PxIES. Все выводы порта P1 связаны с одним вектором прерывания, а все выводы порта P2 — с другим вектором. Для определения конкретного источника прерывания от портов P1 или P2 можно проверить содержимое соответствующего регистра PxIFG.

Регистры флагов прерываний P1IFG и P2IFG

Каждый из битов PxIFGx является флагом прерывания от соответствующего вывода порта и устанавливается при появлении на выводе заданного фронта сигнала. Любой из флагов PxIFGx генерирует запрос прерывания, если установлен соответствующий бит регистра PxIE и бит общего разрешения прерываний GIE.

Все флаги PxIFG должны сбрасываться программно. Кроме того, любой флаг

PxIFG может быть установлен вручную для программной генерации прерывания.

Бит = 0: Не было прерывания.

Бит = 1: Было прерывание.

Прерывания генерируются только по фронту сигнала, а не по его уровню. Е ли любой из флагов PxIFGx будет установлен во время выполнения подпрограммы обработки прерывания от порта Px или же после выполнения команды RETI

данной подпрограммы, то такой флаг вызовет генерацию нового прерывания. Это гарантирует отработку всех изменений уровня сигнала.

Запись в любой из регистров P1OUT, P1DIR, P2OUT или P2DIR может привести к установке соответствующих флагов в регистрах P1IFG или P2IFG.

Регистры выбора фронта прерывания P1IES и P2IES

Значение каждого бита регистра PxIES определяет, по какому фронту сигнала будет генерироваться прерывание от соответствующего вывода порта.

Бит = 0: Флаг PxIFGx устанавливается по нарастающему фронту.

Бит = 1: Флаг PxIFGx устанавливается по спадающему фронту.

Запись в регистр P1IES или P2IES может привести к установке соответствующих флагов прерываний.

42

PxIESx

PxINx

PxIFGx

0 1

0

Может быть установлен

0 1

1

Не изменяется

1 0

0

Не изменяется

1 0

1

Может быть установлен

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

Каждый бит регистра PxIE разрешает генерацию прерывания при установке соответствующего флага прерывания PxIFG.

Бит = 0: Прерывание запрещено.

Бит = 1: Прерывание разрешено.

5.2.7. Конфигурация неиспользуемых выводов портов

Неиспользуемые выводы микроконтроллера необходимо сконфигурировать как выходы портов ввода/вывода и оставить неподключенными, чтобы избежать появления «плавающих» входов и снизить ток потребления устройства. Значение бита PxOUT для такого вывода может быть любым, поскольку вывод никуда не подключен. В качестве альтернативы, чтобы избежать появления «плавающего» входа, можно к неиспользуемому выводу подключить внутренний подтягивающий резистор, установив соответствующий бит регистра PxREN.

5.3. Регистры цифровых портов ввода/вывода

Регистры цифровых портов ввода/вывода перечислены в Табл. 5.1.

Таблица 5.1 – Регистры цифровых портов ввода/вывода

Порт

Регистр

Обозна-

Адрес

Тип регистра

Начальное состояние

 

 

чение

 

 

 

 

 

 

 

 

 

P1

Вход

P1IN

020h

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

 

 

 

 

 

 

 

Выход

P1OUT

021h

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

Не изменяется

 

 

 

 

 

 

 

Направление

P1DIR

022h

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

Сбрасывается после PUC

 

 

 

 

 

 

 

Флаг

P1IFG

023h

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

Сбрасывается после PUC

 

прерывания

 

 

 

 

 

 

 

 

 

 

 

Фронт

P1IES

024h

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

Не изменяется

 

прерывания

 

 

 

 

 

 

 

 

 

 

 

Разрешение

P1IE

025h

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

Сбрасывается после PUC

 

прерывания

 

 

 

 

 

 

 

 

 

 

 

Выбор функции

P1SEL

026h

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

Сбрасывается после PUC

 

 

 

 

 

 

 

Выбор функции

P1SEL2

041h

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

Сбрасывается после PUC

 

2

 

 

 

 

 

 

 

 

 

 

43

Порт

Регистр

Обозна-

Адрес

Тип регистра

Начальное состояние

 

 

чение

 

 

 

 

 

 

 

 

 

 

Включение

P1REN

027h

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

Сбрасывается после PUC

 

резистора

 

 

 

 

 

 

 

 

 

 

P2

Данные входа

P2IN

028h

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

 

 

 

 

 

 

 

Данные выхода

P2OUT

029h

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

Не изменяется

 

 

 

 

 

 

 

Направление

P2DIR

02Ah

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

Сбрасывается после PUC

 

 

 

 

 

 

 

Флаг

P2IFG

02Bh

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

Сбрасывается после PUC

 

прерывания

 

 

 

 

 

 

 

 

 

 

 

Фронт

P2IES

02Ch

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

Не изменяется

 

прерывания

 

 

 

 

 

 

 

 

 

 

 

Разрешение

P2IE

02Dh

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

Сбрасывается после PUC

 

прерывания

 

 

 

 

 

 

 

 

 

 

 

Выбор функции

P2SEL

02Eh

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

Сбрасывается после PUC

 

 

 

 

 

 

 

Выбор функции

P2SEL2

042h

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

Сбрасывается после PUC

 

2

 

 

 

 

 

 

 

 

 

 

 

Включение

P2REN

02Fh

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

Сбрасывается после PUC

 

резистора

 

 

 

 

 

 

 

 

 

 

P3

Вход

P3IN

018h

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

 

 

 

 

 

 

 

Выход

P3OUT

019h

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

Не изменяется

 

 

 

 

 

 

 

Направление

P3DIR

01Ah

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

Сбрасывается после PUC

 

 

 

 

 

 

 

Выбор функции

P3SEL

01Bh

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

Сбрасывается после PUC

 

 

 

 

 

 

 

Выбор функции

P3SEL2

043h

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

Сбрасывается после PUC

 

2

 

 

 

 

 

 

 

 

 

 

 

Включение

P3REN

010h

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

Сбрасывается после PUC

 

резистора

 

 

 

 

 

 

 

 

 

 

P4

Вход

P4IN

01Ch

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

 

 

 

 

 

 

 

Выход

P4OUT

01Dh

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

Не изменяется

 

 

 

 

 

 

 

Направление

P4DIR

01Eh

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

Сбрасывается после PUC

 

 

 

 

 

 

 

Выбор функции

P4SEL

01Fh

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

Сбрасывается после PUC

 

 

 

 

 

 

 

Выбор функции

P4SEL2

044h

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

Сбрасывается после PUC

 

2

 

 

 

 

 

 

 

 

 

 

 

Включение

P4REN

011h

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

Сбрасывается после PUC

 

резистора

 

 

 

 

 

 

 

 

 

 

P5

Вход

P5IN

030h

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

 

 

 

 

 

 

 

Выход

P5OUT

031h

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

Не изменяется

 

 

 

 

 

 

 

Направление

P5DIR

032h

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

Сбрасывается после PUC

 

 

 

 

 

 

44

Порт

Регистр

Обозна-

Адрес

Тип регистра

Начальное состояние

 

 

чение

 

 

 

 

 

 

 

 

 

 

Выбор функции

P5SEL

033h

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

Сбрасывается после PUC

 

 

 

 

 

 

 

Выбор функции

P5SEL2

045h

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

Сбрасывается после PUC

 

2

 

 

 

 

 

 

 

 

 

 

 

Включение

P5REN

012h

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

Сбрасывается после PUC

 

резистора

 

 

 

 

 

 

 

 

 

 

P6

Вход

P6IN

034h

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

 

 

 

 

 

 

 

Выход

P6OUT

035h

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

Не изменяется

 

 

 

 

 

 

 

Направление

P6DIR

036h

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

Сбрасывается после PUC

 

 

 

 

 

 

 

Выбор функции

P6SEL

037h

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

Сбрасывается после PUC

 

 

 

 

 

 

 

Выбор функции

P6SEL2

046h

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

Сбрасывается после PUC

 

2

 

 

 

 

 

 

 

 

 

 

 

Включение

P6REN

013h

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

Сбрасывается после PUC

 

резистора

 

 

 

 

 

 

 

 

 

 

P7

Вход

P7IN

038h

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

 

 

 

 

 

 

 

Выход

P7OUT

03Ah

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

Не изменяется

 

 

 

 

 

 

 

Направление

P7DIR

03Ch

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

Сбрасывается после PUC

 

 

 

 

 

 

 

Выбор функции

P7SEL

03Eh

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

Сбрасывается после PUC

 

 

 

 

 

 

 

Выбор функции

P7SEL2

047h

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

Сбрасывается после PUC

 

2

 

 

 

 

 

 

 

 

 

 

 

Включение

P7REN

014h

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

Сбрасывается после PUC

 

резистора

 

 

 

 

 

 

 

 

 

 

P8

Вход

P8IN

039h

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

 

 

 

 

 

 

 

Выход

P8OUT

03Bh

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

Не изменяется

 

 

 

 

 

 

 

Направление

P8DIR

03Dh

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

Сбрасывается после PUC

 

 

 

 

 

 

 

Выбор функции

P8SEL

03Fh

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

Сбрасывается после PUC

 

 

 

 

 

 

 

Выбор функции

P8SEL2

048h

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

Сбрасывается после PUC

 

2

 

 

 

 

 

 

 

 

 

 

 

Включение

P8REN

015h

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

Сбрасывается после PUC

 

резистора

 

 

 

 

 

 

 

 

 

 

45

6 ТАЙМЕР A

12.1.Введение 307

6.1. Введение

Таймер A представляет собой 16 битный таймер/счётчик с тремя регистрами захвата/сравнения. Этот таймер может обеспечить несколько каналов захвата/сравнения, генерации сигналов с ШИМ и формирования временных интервалов. Кроме того, Таймер А имеет развитую поддержку прерываний.

Прерывания могут генерироваться как регистром счётчика таймера (при его переполнении), так и каждым из регистров захвата/сравнения.

Таймер А имеет следующие особенности:

-асинхронный 16 битный таймер/счётчик, имеющий четыре режима работы;

-возможность выбора и конфигурирования источника тактового сигнала;

-два или три конфигурируемых регистра захвата/сравнения;

-конфигурируемые выходы с возможностью генерации ШИМ сигналов;

-асинхронное защёлкивание входных и выходных сигналов;

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

Блок схема Таймера А приведена на рис. 6.1.

6.2. Функционирование Таймера А

Конфигурирование модуля Таймера А осуществляется пользовательской про граммой. Настройка Таймера А и его функционирование рассматриваются в сле дующих подразделах.

6.2.1. 16-битный таймер/счётчик

Регистр 16 битного таймера/счётчика TAR инкрементируется или декрементируется (в зависимости от режима работы) по нарастающему фронту импульсов тактового сигнала. Регистр TAR доступен как для чтения, так и для записи. Кроме того, при переполнении этого регистра таймер может генерировать прерывание.

Регистр TAR может быть очищен установкой бита TACLR. При установке бита TACLR также очищается делитель тактового сигнала и сбрасывается признак направления для режима реверсивного счёта.

Рекомендуется останавливать таймер перед изменением режима работы (это не относится к операциям с битами разрешения прерываний, флагами прерываний и битом TACLR), чтобы предотвратить его некорректное функционирование.

Если тактовый сигнал таймера не синхронен с тактовым сигналом ЦПУ, то любые операции чтения регистра TAR должны выполняться при остановленном

46

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

Рисунок 6.1 Блок схема Таймера А.

Тактовый сигнал и делитель таймера

Для тактирования таймера могут использоваться системные тактовые сигналы

ACLK и SMCLK или же внешние сигналы TACLK и INCLK. Источник тактового сигнала задаётся битами TASSELx регистра TACTL. Выбранный сигнал поступает

47

на таймер через делитель, коэффициент деления которого (1, 2, 4 или 8)

определяется битами IDx регистра TACTL. При установке бита TACLR делитель таймера очищается.

 

6.2.2. Запуск таймера

ерсивногосчёта

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

-таймер осуществляет счёт, если MCx > 0 и источник тактового сигнала таймера активен;

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

6.2.3. Управление режимом работы таймера

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

останов, прямого счёта, непрерывного счёта и реверсивного счёта. Выбор рабочего режима осуществляется битами MCx.

Таблица 6.1 – Режимы работы таймера

MCx

Режим

Описание

00

Останов

Таймер остановлен

01

Прямого счёта

Таймер циклически считает от нуля до значения,

 

 

записанного в регистре TACCR0

10

Непрерывного

Таймер циклически считает от нулевого

 

счёта

значения до 0FFFFh

11

 

Таймер циклически считает от нуля до значения,

 

 

записанного в регистре TACCR0, а затем в

 

 

обратном направлении до нуля

Режим прямого счёта

Режим прямого счёта используется в том случае, если период таймера должен быть отличным от 0FFFFh. В этом режиме таймер циклически считает в прямом направлении до тех пор, пока его значение не станет равным содержимому регистра сравнения TACCR0, определяющего период счёта, как показано на рис. 6.2. Величина периода в тактах равна TACCR0 + 1. Когда значение таймера достигает величины, записанной в регистре TACCR0, таймер сбрасывается и счёт начинается с нуля. Если в момент выбора режима прямого счёта значение таймера будет больше содержимого TACCR0, таймер сразу же начнёт счёт с нулевого значения.

48

Рисунок 6.2 – Режим прямого счёта

Флаг прерывания CCIFG, соответствующий регистру TACCR0,

устанавливается при достижении таймером в процессе счёта значения, записанного в этом регистре. Флаг прерывания TAIFG устанавливается при счёте таймера от значения, содержащегося в регистре TACCR0, до нуля (рис. 6.3).

Рисунок 6.3 – Установка флагов прерываний в режиме прямого счёта

Изменение регистра периода TACCR0

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

Режим непрерывного счёта

В режиме непрерывного счёта таймер циклически считает в прямом направлении от нуля до значения 0FFFFh, как показано на рис. 6.4. Регистр

TACCR0 используется так же, как и остальные регистры захвата/сравнения.

Рисунок 6.4 – Режим непрерывного счёта

49

Флаг прерывания TAIFG устанавливается при счёте таймера от значения

0FFFFh до нуля (рис. 6.5).

Рисунок 6.5 – Установка флага прерывания в режиме непрерывного счёта

Использование режима непрерывного счёта

Режим непрерывного счёта может использоваться для формирования независимых временных интервалов и сигналов разных частот. Каждый раз при завершении очередного интервала генерируется прерывание. В процедуре обработки прерывания длительность следующего интервала прибавляется к содержимому регистра TACCRx. На рис. 6.6 показано формирование двух временных интервалов длительностью t0 и t1 (эти значения прибавляются к содержимому регистров захвата/сравнения). В данном случае формирование временных интервалов осуществляется аппаратно, и задержка обработки прерывания не сказывается на их длительности.

Рисунок 6.6 – Формирование временных интервалов в режиме непрерывного счёта

Временные интервалы можно формировать и в других режимах,

использующих регистр TACCR0 в качестве регистра периода. Однако при этом

50