- •Микроконтроллеры msp430 Введение
- •1. Центральный процессор msp430
- •1.1. Адресное пространство микроконтроллеров msp430f1xx
- •1.2. Регистровый файл
- •1.3. Байтовая и словная формы инструкций.
- •1.4. Режимы адресации
- •1.4.1 Регистровая адресация
- •1.4.2. Индексная адресация
- •1.4.3 Символьная адресация
- •1.4.4 Абсолютная адресация
- •1.4.5. Косвенная адресация
- •1.4.6. Косвенная адресация с автоинкрементом
- •1.4.7 Непосредственная адресация
- •2. Система команд msp микроконтроллеров
- •2.1. Двухадресные команды
- •2.2 Одноадресные команды
- •2.3 Команды переходов
- •2.4. Эмулируемые команды
- •3. Периферийные устройства микроконтроллеров msp430f1xx
- •3.1 Внешние выводы микроконтроллера msp430f149
- •3.2 Система прерываний
- •3.3 Система тактирования
- •3.4 Сторожевой таймер
- •3.5 Аппаратный умножитель
- •3.6 Порты ввода/вывода
- •3.7 Таймер a3
- •3.8 Таймер b7
- •3.9 Интерфейс usart
- •3.9.1 Режим uart
- •3.9.1.1 Передача данных
- •3.9.1.2 Прием данных
- •3.9.1.3 Поддержка коммуникации в многопроцессорных системах
- •3.9.1.4 Обнаружение стартового бита при приеме
- •3.9.1.5 Скорость передачи
- •3.9.1.6 Регистры usart
- •3.9.2 Режим spi
- •3.9.3 Режим i2c
- •3.9.3.1 Общие сведения о шине i2c
- •3.9.3.2 Режимы работы usart в режиме i2c
- •3.9.3.3 Арбитраж
- •3.9.3.4 Тактирование i2c модуля
- •3.9.3.4 Инициализация модуля i2c
- •3.9.3.5 Регистры модуля usart в режиме i2c
- •3.10 Аналоговый компаратор
- •3.11 Аналого-цифровой преобразователь adc12
- •3.12 Flash контроллер
- •3.12.1 Стирание Flash памяти
- •3.12.2 Запись Flash памяти
- •3.12.3 Регистры Flash контроллера
- •3.13 Цифро-аналоговый преобразователь
- •Контроллер dma
3.5 Аппаратный умножитель
В системе команд MSP микроконтроллеров нет команд, производящих умножение и деление. Однако в старших моделях имеется периферийное устройство, с помощью которого можно производить 8-ми и 16-ти разрядные операции умножения. Наличие быстрого аппаратного умножителя с возможностью накопления результата диктуется необходимостью, в ряде случаев, использования MSP микроконтроллеров для цифровой обработки сигналов в реальном времени, например для реализации цифровых фильтров.
Встроенный аппаратный умножитель позволяет производить умножение и умножение с накоплением знаковых и беззнаковых 8-ми и 16-ти битных операндов с получением 32-ти разрядного результата.
Для того чтобы выполнить операцию умножения необходимо первый операнд записать в определенный регистр умножителя, в зависимости от того, какая именно требуется операция, после чего записать второй операнд в специальный регистр. Практически сразу после этого из регистра результата можно вычитывать продукт умножения. Операция умножения с накоплением производит перемножение содержимого регистров первого и второго операндов и сложение полученного произведения с текущим содержимым регистра результата. Результат умножения сохраняется в трех 16-ти разрядных регистрах – младшего и старшего слова произведения, и регистре расширения, где фиксируется переполнение при сложении или знак результата.
Регистры аппаратного умножителя приведены в таблице 9
Таблица 9
-
Наименование
Назначение
Адрес
MPY
Регистр первого операнда для беззнакового умножения
130h
MPYS
Регистр первого операнда для знакового умножения
132h
MAC
Регистр первого операнда для беззнакового умножения с накоплением
134h
MACS
Регистр первого операнда для знакового умножения с накоплением
136h
OP2
Регистр второго операнда
138h
RESLO
Регистр младшего слова результата
13Ah
RESHI
Регистр старшего слова результата
13Ch
SUMEX
Регистр расширения суммы
13Eh
Содержимое регистра SUMEXT зависит от типа операции. Его возможные состояния показаны в таблице 10.
Таблица 10
-
Операция
Содержимое SUMEXT
MPY
Всегда 0
MPYS
0 – если результат положителен;
FFFFh – если результат отрицателен
MAC
0 – если нет переноса из 15-го бита RESHI;
1 – если есть перенос из 15-го бита RESHI
MACS
0 – если результат положителен;
FFFFh – если результат отрицателен
В том случае, если необходимо произвести байтовое умножение, к регистрам умножителя можно обращаться с помощью байтовых форм инструкций. Однако, вместо символьных имен регистров, приведенных в таблице 9, необходимо использовать их абсолютные адреса. Это связано с тем, что в стандартном головном файле определения имен (например “msp430x14x.h”), включаемом в начале программы, эти регистры описаны как 16-ти разрядные и использование их с байтовыми инструкциями вызовет ошибку трансляции. Поэтому для байтового умножения необходимо использовать запись
mov.b &200h, &130h ; обращение к регистру MPY
mov.b &300h, &138h ; обращение к регистру OP2
Если необходимо произвести байтовое знаковое умножение, необходимо пользоваться следующим приемом:
mov.b &200h, &132h ; обращение к регистру MPYS
sxt &MPYS ; расширение знака MPYS
mov.b &300h, R5 ; временное сохранение 2-го операнда
sxt R5 ; расширение знака
mov R5, &OP2 ; обращение к регистру OP2
Если необходимо умножать несколько значений на один и тот же коэффициент, достаточно этот коэффициент записать в регистр первого операнда только один раз, после чего переменные данные последовательно записывать только в регистр OP2.
Если умножитель используется как в основной программе, так и в подпрограмме обработки прерывания, может возникнуть ситуация, когда прерывание происходит во время загрузки и чтения результата основной программой. В этом случае режим операции и сами операнды могут быть потеряны, и результат окажется непредсказуем. Для того чтобы избежать подобной ситуации рекомендуется в основной программе запрещать все прерывания перед загрузкой данных в умножитель и разрешать прерывания после вычитывания результата.
ПРИМЕР.
Вычислить результат выражения R13:R12 = 1234 * R4 + 5678 * R5 ,
где
R13 - старшее слово результата;
R12 - младшее слово результата;
R4, R5 – беззнаковые 16-ти разрядные переменные.
mov #1234, &MPY
mov R4, &OP2
mov #5678, &MAC
mov R5, &OP2
mov &RESLO, R12
mov &RESHI, R13
