- •Микроконтроллеры 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.10 Аналоговый компаратор
- •3.11 Аналого-цифровой преобразователь adc12
- •3.12 Flash контроллер
- •3.12.1 Стирание Flash памяти
- •3.12.2 Запись Flash памяти
- •3.12.3 Регистры Flash контроллера
3.5 Аппаратный умножитель
В системе команд MSP микроконтроллеров нет команд, производящих умножение и деление. Однако в старших моделях имеется периферийное устройство, с помощью которого можно производить 8-ми и 16-ти разрядные операции умножения. Наличие быстрого аппаратного умножителя с возможностью накопления результата диктуется необходимостью, в ряде случаев, использования MSP микроконтроллеров для цифровой обработки сигналов в реальном времени, например для реализации цифровых фильтров.
Встроенный аппаратный умножитель позволяет производить умножение и умножение с накоплением знаковых и беззнаковых 8-ми и 16-ти битных операндов с получением 32-ти разрядного результата.
Для того чтобы выполнить операцию умножения необходимо первый операнд записать в определенный регистр умножителя, в зависимости от того, какая именно требуется операция, после чего записать второй операнд в специальный регистр. Практически сразу после этого из регистра результата можно вычитывать продукт умножения. Операция умножения с накоплением производит перемножение содержимого регистров первого и второго операндов и сложение полученного произведения с текущим содержимым регистра результата. Результат умножения сохраняется в трех 16-ти разрядных регистрах – младшего и старшего слова произведения, и регистре расширения, где фиксируется переполнение при сложении или знак результата.
Регистры аппаратного умножителя приведены в таблице 9
Таблица 9
-
Наименование
Назначение
Адрес
MPY
Регистр первого операнда для беззнакового умножения
130h
MPYS
Регистр первого операнда для знакового умножения
132р
MAC
Регистр первого операнда для беззнакового умножения с накоплением
134р
MACS
Регистр первого операнда для знакового умножения с накоплением
136h
OP2
Регистр второго операнда
138h
RESLO
Регистр младшего слова результата
13Ah
RESHI
Регистр старшего слова результата
13Ch
SUMEX
Регистр расширения суммы
13Eh
Содержимое регистра SUMEXT зависит от типа операции. Его возможные состояния показаны в таблице 10.
Таблица 10
-
Операция
Содержимое SUMEXT
MPY
Всегда 0
MPYS
0 – если результат положителен;
FFFFh – если результат отрицателен
MAC
0 – если нет переноса из 15-го бита RESHI;
FFFFh – если есть перенос из 15-го бита RESHI
MACS
0 – если результат положителен;
FFFFh – если результат отрицателен
ПРИМЕР.
Вычислить результат выражения 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
ПРИМЕЧАНИЕ. Если умножитель используется как в основной программе, так и в подпрограмме обработки прерывания, может возникнуть ситуация, когда прерывание происходит во время загрузки и чтения результата основной программой. В этом случае режим операции и сами операнды могут быть потеряны, и результат окажется непредсказуем. Для того чтобы избежать подобной ситуации рекомендуется в основной программе запрещать все прерывания перед загрузкой данных в умножитель и разрешать прерывания после вычитывания результата.
