Микропроцессорная техника / Семейство микроконтроллеров MSP430x2xx_
.pdf
|
|
|
|
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 при потере значимости. Поль зовательская программа должна отслеживать такие ситуации и обрабатывать их соответствующим образом.
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 |
Не определено |
|
|
|
|
|
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 во время работы таймера новый период окажется больше или равен предыдущему периоду или больше те кущего значения таймера, то таймер продолжит счёт до достижения нового зна чения периода. Если новый период окажется меньше текущего значения таймера, то таймер начнёт счёт с нуля, однако перед обнулением счётчика может возник нуть дополнительный отсчёт.