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

Микропроцессорная техника / Семейство микроконтроллеров MSP430x2xx_

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

10.3. Регистры сторожевого таймера 301

IE1, регистр разрешения прерываний 1

7

6

5

4

3

2

1

0

 

 

 

NMIIE

 

 

 

WDTIE

 

 

 

 

 

 

 

 

 

 

 

rw–0

 

 

 

rw–0

 

Биты

 

7…5

NMIIE

Бит 4

 

Биты

 

3…1

WDTIE

Бит 0

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

Разрешение немаскируемого прерывания. Этот бит разрешает не маскируемое прерывание. Поскольку прочие биты регистра IE1 мо гут использоваться другими модулями, то для установки или очистки битов регистра рекомендуется вместо команд MOV.B или CLR.B при менять команды BIS.B и BIC.B.

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

1Прерывание разрешено

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

Разрешение прерывания модуля WDT+. Данный бит разрешает пре рывание WDTIFG при работе модуля в режиме интервального тай мера. При использовании режима сторожевого таймера установка этого бита не требуется. Поскольку прочие биты регистра IE1 могут использоваться другими модулями, то для установки или очистки битов регистра рекомендуется вместо команд MOV.B или CLR.B при менять команды BIS.B и BIC.B.

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

1Прерывание разрешено

IFG1, регистр флагов прерываний 1

7

6

5

4

3

 

2

1

0

 

 

 

 

NMIIFG

 

 

 

 

WDTIFG

 

 

 

 

 

 

 

 

 

 

 

 

 

 

rw–0

 

 

 

 

rw–(0)

 

Биты

Эти биты могут использоваться другими модулями. См. документа

 

7…5

цию на конкретный микроконтроллер.

 

 

 

NMIIFG

Бит 4

Флаг немаскируемого прерывания. Бит NMIIFG должен сбрасы

 

 

ваться программно. Поскольку прочие биты регистра IFG1 могут ис

пользоваться другими модулями, то для установки или очистки би тов регистра рекомендуется вместо команд MOV.B или CLR.B применять команды BIS.B и BIC.B.

0 Не было запроса прерывания

 

 

1

Есть запрос прерывания

 

Биты

Эти биты могут использоваться другими модулями. См. документа

 

3…1

цию на конкретный микроконтроллер.

WDTIFG

Бит 0

Флаг прерывания модуля WDT+. В режиме сторожевого таймера бит

 

 

WDTIFG остаётся установленным до тех пор, пока не будет сброшен

 

 

программно. В режиме интервального таймера бит WDTIFG сбрасы

 

 

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

 

 

быть сброшен программно. Поскольку прочие биты регистра IE1 мо

 

 

гут использоваться другими модулями, то для установки или очистки

 

 

битов регистра рекомендуется вместо команд MOV.B или CLR.B при

 

 

менять команды BIS.B и BIC.B.

 

 

0

Не было запроса прерывания

 

 

1

Есть запрос прерывания

302 Глава 11. Аппаратный умножитель

ГЛАВА 11

АППАРАТНЫЙ УМНОЖИТЕЛЬ

В этой главе описывается модуль аппаратного умножителя, реализованного в некоторых моделях микроконтроллеров семейства MSP430x2xx.

11.1. Введение

Аппаратный умножитель представляет собой специализированное перифе рийное устройство и не входит в состав ЦПУ MSP430. Соответственно, его функ ционирование никак не влияет на работу ЦПУ микроконтроллера. Регистры ум ножителя — это регистры периферийного устройства, для загрузки и чтения со держимого которых используются команды ЦПУ.

Аппаратный умножитель поддерживает:

умножение без знака;

умножение со знаком;

умножение без знака с накоплением;

умножение со знаком и с накоплением;

разрядность 16 16 бит, 16 8 бит, 8 16 бит, 8 8 бит. Блок схема аппаратного умножителя приведена на Рис. 11.1.

11.2. Функционирование аппаратного умножителя

Аппаратный умножитель поддерживает операции умножения без знака, ум ножения со знаком, умножения без знака с накоплением и умножения со знаком и с накоплением. Тип операции определяется адресом, по которому располагает ся первый операнд.

Аппаратный умножитель содержит два 16 битных регистра операндов (OP1 и OP2) и три регистра результата (RESLO, RESHI и SUMEXT). В регистре RESLO хранится младшее слово результата, в регистре RESH — старшее слово результа та, а в регистре SUMEXT содержится информация о результате. Для формирова ния результата требуется три такта MCLK, поэтому его можно прочитать уже с помощью команды, следующей за командой записи в регистр OP2. При исполь зовании косвенной адресации для обращения к регистрам результата, перед их чтением необходимо вставить одну команду NOP.

 

 

 

 

11.2. Функционирование аппаратного умножителя 303

15

rw

0

 

 

 

 

MPY 130h

 

 

 

 

 

MPYS 132h

 

 

15

rw

0

 

 

 

 

 

 

 

 

 

OP1

OP2 138h

 

MAC 134h

 

 

 

 

 

MACS 136h

 

 

 

 

 

 

 

 

 

Умножитель 16 x 16

 

 

Доступные

 

 

 

 

 

 

регистры

 

 

 

 

 

MPY = 0000

MACS MPYS

 

 

32–битный сумматор

 

 

 

 

 

 

 

 

 

MAC

 

 

 

 

 

 

 

 

MPY, MPYS

MAC, MACS

Мультиплексор

 

 

32–битный мультиплексор

 

SUMEXT 13Eh

C

S

RESHI 13Ch

RESLO 13Ah

 

 

 

 

 

 

 

15

r

0

31

rw

rw

0

 

 

Рис. 11.1. Блок схема аппаратного умножителя.

 

11.2.1. Регистры операндов

Регистр первого операнда OP1 имеет 4 адреса, указанные в Табл. 11.1, которые используются для выбора режима умножения.

Таблица 11.1. Адреса регистра OP1

Адрес OP1

Название регистра

Операция

 

 

 

0130h

MPY

Умножение без знака

 

 

 

01332h

MPYS

Умножение со знаком

 

 

 

0134h

MAC

Умножение без знака с накоплением

 

 

 

0136h

MACS

Умножение со знаком и с накоплением

 

 

 

Загрузка первого операнда по выбранному адресу определяет конкретный тип операции умножения. Запись второго операнда в регистр OP2 инициирует вы полнение операции заданного типа над значениями, загруженными в регистры операндов OP1 и OP2. Результат умножения сохраняется в трёх регистрах резуль тата RESLO, RESHI и SUMEXT.

304 Глава 11. Аппаратный умножитель

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

11.2.2. Регистры результата

Младший регистр результата RESLO содержит младшие 16 бит полученного результата. Содержимое старшего регистра результата RESHI зависит от типа операции умножения (Табл. 11.2).

Таблица 11.2. Содержимое регистра RESHI

Режим

 

Содержимое регистра

 

 

 

MPY

Старшие 16

бит результата

 

 

MPYS

В старшем бите содержится знак результата. В остальных битах содержатся старшие 15 бит

 

результата. Результат представлен в дополнительном коде

 

 

 

MAC

Старшие 16

бит результата

 

 

 

MACS

Старшие 16

бит результата. Результат представлен в дополнительном коде

 

 

 

Содержимое регистра SUMEXT также зависит от типа операции умножения (Табл. 11.3).

Таблица 11.3. Содержимое регистра SUMEXT

Режим

 

Содержимое регистра

 

 

MPY

SUMEXT всегда содержит 0000h

 

 

MPYS

SUMEXT содержит расширенный знак результата:

 

00000h

Результат положителен или равен нулю

 

0FFFFh

Результат отрицателен

 

 

MAC

SUMEXT содержит признак переноса:

 

00000h

Переноса не было

 

00001h

Был перенос

 

 

MACS

SUMEXT содержит расширенный знак результата:

 

00000h

Результат положителен или равен нулю

 

0FFFFh

Результат отрицателен

 

 

 

Потеря значимости и переполнение в режиме MACS

Аппаратный умножитель не может автоматически определить переполнение или потерю значимости в режиме MACS. Диапазон допустимых значений акку мулятора составляет 0…7FFF FFFFh для положительных чисел и 0FFF FFFFh…8000 0000h для отрицательных. Потеря значимости происходит, когда результат сложения двух отрицательных чисел оказывается в диапазоне по ложительных значений. Переполнение происходит, когда результат сложения двух положительных чисел оказывается в диапазоне отрицательных значений. В обоих случаях в регистре SUMEXT содержится знак результата и соответствую щее значение: 0FFFFh при переполнении и 0000h при потере значимости. Поль зовательская программа должна отслеживать такие ситуации и обрабатывать их соответствующим образом.

11.2. Функционирование аппаратного умножителя 305

11.2.3. Примеры кода

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

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

; 16x16

Умножение без знака

MOV

#01234h,&MPY

; Загружаем первый операнд

MOV

#05678h,&OP2

;

Загружаем второй операнд

; ...

 

;

Обрабатываем результат

; 8x8 Умножение без знака. Абсолютная адресация

MOV.B

#012h,&0130h

; Загружаем первый операнд

MOV.B

#034h,&0138h

; Загружаем второй операнд

; ...

 

; Обрабатываем результат

; 16x16

Умножение со знаком

MOV

#01234h,&MPYS

; Загружаем первый операнд

MOV

#05678h,&OP2

; Загружаем второй операнд

; ...

 

; Обрабатываем результат

; 8x8 Умножение со знаком. Абсолютная адресация.

MOV.B

#012h,&0132h

; Загружаем первый операнд

MOV.B

#034h,&0138h

; Загружаем второй операнд

; ...

 

; Обрабатываем результат

; 16x16

Умножение без знака с накоплением

MOV

#01234h,&MAC

; Загружаем первый операнд

MOV

#05678h,&OP2

; Загружаем второй операнд

; ...

 

; Обрабатываем результат

; 8x8 Умножение без знака с накоплением. Абсолютная адресация

MOV.B

#012h,&0134h

; Загружаем первый операнд

MOV.B

#034h,&0138h

; Загружаем второй операнд

; ...

 

; Обрабатываем результат

; 16x16

Умножение со знаком и с накоплением

MOV

#01234h,&MACS

; Загружаем первый операнд

MOV

#05678h,&OP2

; Загружаем второй операнд

; ...

 

; Обрабатываем результат

; 8x8

Умножение со знаком и с накоплением. Абсолютная адресация

MOV.B #012h,&0136h

; Загружаем первый

операнд

MOV.B #034h,R5

; Временное хранилище для 2$го операнда

MOV

R5,&OP2

;

Загружаем второй

операнд

; ...

 

;

Обрабатываем результат

11.2.4. Косвенная адресация RESLO

При обращении к регистрам результата с использованием режимов косвен ной адресации или косвенной адресации с автоинкрементом между загрузкой

306 Глава 11. Аппаратный умножитель

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

;Использование косвенной адресации для обращения

;к регистрам результата умножителя

MOV #RESLO,R5

; Загружаем адрес RESLO в R5 для косвенной адресации

MOV &OPER1,&MPY

; Загружаем 1$й операнд

MOV &OPER2,&OP2

; Загружаем 2$й операнд

NOP

; Требуется один такт

MOV @R5+,&xxx

; Копируем RESLO

MOV @R5,&xxx

; Копируем RESHI

11.2.5. Использование прерываний

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

; Запрещение прерываний на время использования аппаратного умножителя

DINT

; Запрещаем прерывания

NOP

; Требуется для DINT

MOV #xxh,&MPY

; Загружаем

1$й операнд

MOV #xxh,&OP2

;

Загружаем

2$й операнд

EINT

;

Теперь можем разрешить прерывания

;Обрабатываем результат

11.3.Регистры аппаратного умножителя

Список регистров аппаратного умножителя приведён в Табл. 11.4.

Таблица 11.4. Регистры аппаратного умножителя

Регистр

Обозначение

Тип регистра

Адрес

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

 

 

 

 

 

Первый операнд — умножение

MPY

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

0130h

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

без знака

 

 

 

 

 

 

 

 

 

Первый операнд — умножение

MPYS

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

0132h

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

со знаком

 

 

 

 

 

 

 

 

 

Первый операнд — умножение

MAC

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

0134h

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

без знака с накоплением

 

 

 

 

 

 

 

 

 

Первый операнд — умножение

MACS

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

0136h

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

со знаком и с накоплением

 

 

 

 

 

 

 

 

 

Второй операнд

OP2

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

0138h

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

 

 

 

 

 

Результат, младшее слово

RESLO

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

013Ah

Не определено

 

 

 

 

 

Результат, старшее слово

RESHI

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

013Ch

Не определено

 

 

 

 

 

Регистр расширения знака

SUMEXT

Чтение

013Eh

Не определено

 

 

 

 

 

12.1. Введение 307

ГЛАВА 12

ТАЙМЕР A

Таймер А представляет собой 16 битный таймер/счётчик, имеющий несколь ко регистров захвата/сравнения. В этой главе описывается работа Таймера А, реа лизованного во всех микроконтроллерах семейства MSP430x2xx.

12.1. Введение

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

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

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

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

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

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

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

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

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

Примечание. Использование термина «счёт»

В этой главе активно используется термин «счёт». Использование данного терми на означает, что для совершения действия заданное значение должно быть достиг нуто таймером в процессе счёта. Если это значение просто записать в регистр счётчика таймера, то соответствующее действие выполнено не будет.

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

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

308 Глава 12. Таймер A

 

 

 

 

 

 

 

 

 

Тактовый сигнал

 

 

 

Блок таймера

 

TASSELx

 

таймера

 

 

 

 

IDx

 

 

MCx

 

 

 

 

 

 

 

 

 

 

 

 

 

 

15

 

0

 

 

TACLK

 

00

Делитель

 

 

16–битный таймер

 

Режим

 

 

 

 

TAR

 

EQU0

ACLK

 

01

1/2/4/8

 

 

 

счёта

 

 

Очистка

RC

 

 

 

 

 

 

 

 

SMCLK

 

10

 

 

 

 

 

 

 

INCLK

 

11

 

 

 

 

 

 

Установка

 

 

 

 

 

TACLR

 

 

TAIFG

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

CCR0

 

 

 

 

 

 

 

 

 

CCR1

 

 

 

 

 

 

 

 

 

CCR2

 

CCISx

CMx

 

Логика

COV

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

SCS

 

 

 

CCI2A

00

 

Режим

 

 

 

15

 

0

CCI2B

01

 

захвата

 

 

 

 

 

 

 

0

 

 

 

 

 

Тактовый сигнал

 

TACCR2

 

GND

10

Синхр.

1

 

 

 

 

таймера

 

 

 

 

VCC

11

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

CCI

 

 

 

 

Компаратор 2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

EQU2

CAP

 

 

 

 

 

 

 

 

SCCI

Y

A

 

 

 

 

 

 

 

EN

 

 

 

 

 

0

Установка

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

TACCR2

 

 

 

 

 

 

 

 

 

CCIFG

 

 

 

 

 

OUT

 

 

 

 

 

 

 

Модуль

 

 

 

 

 

 

 

EQU0

вывода

 

Тактовый

D Установка Q

Сигнал

 

 

2

 

 

 

 

OUT2

 

 

 

 

 

 

сигнал

Сброс

 

 

 

 

 

 

 

 

 

 

 

 

 

таймера

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

POR

 

 

 

 

 

 

OUTMODx

 

 

 

 

 

 

 

 

 

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

 

 

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

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

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

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

Примечание. Изменение регистров Таймера А

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

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

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

Для тактирования таймера могут использоваться системные тактовые сигна лы ACLK и SMCLK или же внешние сигналы TACLK и INCLK. Источник такто вого сигнала задаётся битами TASSELx регистра TACTL. Выбранный сигнал пос тупает на таймер через делитель, коэффициент деления которого (1, 2, 4 или 8) определяется битами IDx регистра TACTL. При установке бита TACLR делитель таймера очищается.

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

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

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

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

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

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

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

MCx

Режим

Описание

 

 

 

00

Останов

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

 

 

 

01

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

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

 

 

TACCR0

 

 

 

10

Непрерывного счёта

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

 

 

 

11

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

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

 

 

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

 

 

 

310 Глава 12. Таймер A

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

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

0FFFFh

TACCR0

0h

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

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

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

Таймер

CCR0–1 CCR0

0h

1h

CCR0–1 CCR0

0h

Установка TAIFG

Установка TACCR0 CCIFG

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

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

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