
Микропроцессорная техника / Конспект лекций
.pdfрегистра 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