- •Микроконтроллеры 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 контроллера
1. Центральный процессор msp430
1.1. Адресное пространство микроконтроллеров msp430f1xx
Т.к. MSP микроконтроллеры построены по фон-неймановской архитектуре, все классы памяти, включающие Flash-память программ, ОЗУ, регистры управления периферийных устройств, отображены на единое адресное пространство общей емкостью 64 килобайта. Типовое распределение памяти приведено на рис.1.
Рисунок 1. Распределение памяти микроконтроллеров MSP430F1xx
Младшие адреса памяти занимает область SFR (Special Function Registers) в которой находятся несколько 8-битных регистров, предназначенных для конфигурации некоторых периферийных устройств.
В диапазоне адресов FFh – 10h находятся регистры управления 8-битных периферийных устройств, таких как порты ввода/вывода, UART и т.д. К этим регистрам, также как и к регистрам SFR, необходимо обращаться, используя только байтовые формы инструкций.
В диапазоне адресов 1FFh – 100h находятся регистры управления 16-битных периферийных устройств, таких как таймеры, АЦП и т.д. К этим регистрам необходимо обращаться, используя только словные (16-ти разрядные) формы инструкций.
Начиная с адреса 200h, располагается ОЗУ памяти данных. Верхняя граница этой области зависит от физического объема памяти для данной модели. Так для устройств, снабженных ОЗУ объемом 2 kB, верхняя граница имеет адрес 9FFh. К ОЗУ данных можно обращаться, используя как байтовую, так и словную форму инструкций.
Область BSL (Bootstrap Loader) представляет собой ПЗУ, в которой записаны специальные отладочные подпрограммы, предназначенные для загрузки пользовательских программ через встроенный последовательный порт. Правила работы с BSL в данном документе рассматриваться не будут.
К области BSL примыкает Flash память данных. Эта память может программироваться так же, как и основная память программ. Различие заключается в том, что стирание этой памяти осуществляется сегментами меньшего размера.
Старшие адреса занимает Flash память программ. Адрес начала этого класса памяти зависит от физического объема памяти для данной модели. Для моделей, имеющих общий объем памяти программ 60 kB, эта область примыкает к Flash памяти данных и ее начальный адрес равен 1100h.
Последние 32 байта адресного пространства также реализованы как Flash память и предназначены для хранения векторов прерывания.
1.2. Регистровый файл
Все микроконтроллеры семейства MSP430 имеют в своем составе регистровый файл, состоящий из 16 16-ти разрядных регистров. Регистровый файл не отображается на общее адресное пространство, поэтому к регистрам можно обращаться только по их именам – R0, R1, … R15. Большинство регистров из регистрового файла могут выступать как источник или приемник данных, или использоваться в качестве указателей. Регистры с индексами от R0 до R3 имеют специальные предназначения, в то время как регистры R4-R15 являются регистрами общего назначения.
Регистр R0 является программным счетчиком (Program Counter) и к нему можно также обращаться по имени PC. Регистр PC содержит адрес команды, которую должен выполнить процессор в данный момент. Так как все команды процессора имеют четное количество байт, младший бит этого регистра всегда имеет значение 0.
Регистр R1 является указателем стека (Stack Pointer) и к нему можно обращаться по имени SP. Стек – это область памяти ОЗУ, предназначенная, главным образом, для хранения адресов возврата из подпрограмм. Стек также может использоваться для временного хранения содержимого регистров и ячеек памяти. В MSP контроллерах используется падающая модель стека, т.о. ячейки памяти стека заполняются от старших адресов к младшим. Регистр SP всегда содержит адрес последней (с младшим адресом) ячейки стека, в которую производилась запись. В начале прикладной программы необходимо инициализировать регистр SP. Т.к. при сохранении данных на стеке, например с помощью команды PUSH, содержимое SP всегда уменьшается на 2, необходимо чтобы его начальное значение было бы четным. Обычно SP настраивают так, чтобы он указывал на самую верхнюю область ОЗУ. Для моделей, содержащих 2 килобайта памяти данных, в регистр SP записывается значение, равное 0A00h.
Регистр R2 является статусным регистром (Status Register) и к нему можно обращаться по имени SR. Регистр SR содержит, во-первых, биты управления режимами работы центрального процессора и, во-вторых, флаги, сигнализирующие о результате последней операции. Структура регистра SR представлена ниже.
15 9 8 7 6 5 4 3 2 1 0
-
Зарезервировано
V
SCG1
SCG0
OSCOFF
CPUOFF
GIE
N
Z
C
Регистр SR содержит следующие биты:
Бит 8: V (oVerflow) – переполнение. Устанавливается аппаратно если в результате последней операции зарегистрировано арифметическое переполнение, т.е. произошел перенос в старший, знаковый бит. Если переполнения не было, бит аппаратно сбрасывается.
Биты 7 и 6: SCG1, SCG0 – (System Clock Generator) – предназначены для управления системным тактовым генератором. Назначение этих бит будет рассмотрено позже (п.3.3).
Бит 5: OSCOFF – выключение осциллятора. Устанавливается программно для отключения тактового генератора. В этом случае останавливается центральный процессор и вся тактируемая периферия. Уровень электрического потребления падает до долей микроампер.
Бит 4: CPUOFF – выключение центрального процессора. Программная установка этого бита отключает тактирование центрального процессора, при этом периферийные устройства могут находиться в активном режиме. Комбинация состояний битов 7…4 дает возможность гибкого управления режимами пониженного потребления всего микроконтроллера. Различные режимы потребления будут рассмотрены ниже (п.3.3).
Бит 3: GIE (Global Interrupt Enable) – глобальное разрешение прерываний. Устанавливается/сбрасывается программно для разрешения/запрещения всех прерываний процессора.
Бит 2: N (Negative) – бит фиксации отрицательного результата. Устанавливается аппаратно, если в качестве результата последней операции было получено отрицательное значение, в противном случае – сбрасывается. Фактически в бит N переписывается старший значащий бит результата: 15-й бит для словной формы или 7-й бит для байтовой формы данных.
Бит 1: Z (Zero) – бит фиксации нулевого результата. Устанавливается аппаратно, если в качестве результата последней операции было получено нулевое значение, в противном случае – сбрасывается.
Бит 0: С (Carry) – бит переноса. Устанавливается аппаратно, если результат последней операции не умещается в разрядной сетке операции (16 бит для словной формы или 8 бит для байтовой данных), в противном случае сбрасывается.
Все биты флагов в регистре SR также могут устанавливать/сбрасываться программно.
Ассемблер использует ссылку на регистр R2 для генерации некоторых констант (см. ниже).
Регистр R3 является генератором констант. Он используется неявно ассемблером для генерации часто используемых констант: 0, 1, 2, 4, 8, -1. Для этого при кодировании ассемблер достаточно хитроумно используют различные способы адресации к регистрам R2 и R3. Использование в коде команды ссылки на регистр R2 при генерации констант становится возможным, т.к. использование R2 в качестве регистра-указателя не имеет смысла.
Использование генератора констант в некоторых случаях приводит к сокращению объема кода программы и увеличению скорости исполнения определенных фрагментов программы. Программисту нет необходимости задумываться об использовании данных констант, подстановку нужного кода производит ассемблер автоматически. Вместе с тем, программист не должен явно использовать регистр R3 в своих программах.
Регистры R4 - R15 программист может использовать свободно по своему усмотрению.
