Мощный 16-разрядный RISC-архитектуры процессор (CPU) выполняет инструкции за 1-2 машинных цикла. Шестнадцать 16-разрядных регистров располагаются в CPU, обеспечивая сокращенное время выполнения инструкций. Это уменьшает время выполнения операции регистр-регистр в одном цикле процессора. Четыре регистра (R0…R3) резервируются для использования в качестве счетчика команд, указателя вершины стека, регистра статуса и генератора констант. Остальные двенадцать регистров (R4…R15 ) - регистры общего назначения. Периферийные устройства подключаются к CPU, использующему шины адресов, данных и шины управления, и могут работать со всеми инструкциями для обработки памяти.
Рис.2 Архитектура MSP430F11xx
Система команд обеспечивается мощным и легким в использования ассемблером. Система команд состоит из 51 инструкции с тремя форматами и семью адресными режимами. Рассмотрим назначение отдельных модулей, входящих в микроконтроллер MSP430F11xx.
Модуль System Clock & Oscillator . Модуль SCO генерирует три частоты, используемые в микроконтроллере:
базовая частота MCLK, необходимая для работы CPU
вспомогательная базовая частота SMCLK для периферийных модулей
вспомогательная частота ACLK
Модуль претерпел значительные изменения в сравнении с прежними микроконтроллерами MSP430. Внешний резонатор, подключаемый к выводам Xin и Xout ( генератор LFXT1), может иметь частоту резонанса от 32.768 kHz до 8 MHz. Вспомогательная частота ACLK получается делением частоты генератора LFXT1 на /1, /2, /4, /8 делителем DIVA. Делитель DIVA управляется программно. В состав модуля SCO введен генератор DC. Частота этого генератора задается либо внешним резистором, подключаемым к выводу P2.5, либо внутренними резисторами микроконтроллера, управляемыми программно. Диапазон частот генератора DC : от 100 kHz до 5 MHz. Импульсы генератора DC поступают на вход синтезатора частот ( DCO), управляемого программно. Импульсы с выхода синтезатора частот поступают на вход делителя частоты DIVM (режимы /1, /2, /4, /8, Off) . Импульсы с выхода делителя DIVM (управляемого программно) и есть MCLK. Аналогично формируется частотная последовательность SMCLK , но при помощи делителя DIVS. Благодаря перечисленным изменениям, возросла устойчивость системы и гибкость управления производительностью системы и режимами энергосбережения.
Память данных (RAM) имеет объем 128-256 байт. Используется для хранения переменных и для организации стека. Программная память (FLASH) организована в виде сегментов объемом 512 байт. Число сегментов, 2 или 8, зависит от типа микроконтроллера. Сегменты могут модифицироваться индивидуально или всем блоком. В состав памяти входят два сегмента, называемых информационными. Модификация информационных сегментов аналогична основным. Модификация Flash-памяти осуществляется по протоколу JTAG. JTAG - это комплекс аппаратных и программных средств, благодаря которому осуществляется чтение, стирание и запись информации в программную Flash-память микроконтроллера. Для этого процесса используются выводы TDO(P1.7), TDI(P1.6), TMS(P1.5) и TCK(P1.4).
Первичная функция модуля сторожевого таймера Watchdog (WDT) - выполнить управляемый системный перезапуск после того, как возник программный сбой. Если выбранный интервал времени истекает, WDT генерирует системный сброс. Если функция сторожевого таймера не нужна в приложении, модуль может работать как таймер интервала, который генерирует прерывание после истечении выбранного интервала времени. Счетчик сторожевого таймера (WDTCNT) 16-битовый, непосредственно не доступен из программы. WDTCNT управляется через управляющий регистр сторожевого таймера (WDTCTL), который является 16-битовым регистром. Запись в WDTCNT-регистр возможна при использовании правильного пароля в старшем байте. Младший байт загружает данные записанные в WDTCTL-регистре. Старший байт должен быть паролем - 05Ah. Если в старший байт WDTCTL-регистра будет записан байт отличный от 05Ah , то система сгенерирует программный перезапуск.
Модуль Timer_A представляет собой 16-разрядный таймер/счетчик с тремя регистрами слежения/сравнения. В режиме счетчика Timer_A подсчитывает импульсы, поступающие от внешнего источника через вывод P1.0 или P2.1. В режиме таймера Timer_A подсчитывает импульсы, поступающие от одного из двух внутренних источников: ACLK или SMCLK. Входные импульсы можно делить на один, два, четыре, или восемь. Таймер полностью управляется программно, его можно останавливать, запускать, читать, и модифицировать. Три регистра слежения/сравнение конфигурируются программно, чтобы выполнять функции слежения за состоянием входа или сравнить значение счетчика с заданным значением в регистре. Режим слежения используется для контроля за изменением состоянием сигнала на внешнем входе, т. е. реализуется режим GATE. Эта функция применима к выводам P1.1-P1.3 и P2.3-P2.3, причем, работать в этом режиме могут одновременно три входа. Режим слежения может запускаться и останавливаться программно. Режим сравнения используется, чтобы сгенерировать синхронизацию для программных или прикладных аппаратных средств, или сгенерировать импульсный модулирующий сигнал для различных целей. Модулем Timer_A используются два вектора прерывания. Один вектор присваивается первому блоку слежения/сравнения, и один общий вектор прерывания используется для таймера и двух оставшихся блоков слежения/сравнения. Три события прерывания, использующие один и тот же вектор, идентифицируются по содержимому регистра прерывания.
Модуль UART - программный. Последовательная связь осуществляется использованием программного обеспечения и одного блока слежения/сравнения. Аппаратные средства поддерживает выход потока последовательных данных, с синхронизацией, определяемой таймером. Регистр слежения/сравнения генерирует прерывание, определив начало стартового импульса входной последовательности (старт-бит). Затем, по прерыванию генерируемому таймером, происходит выборка сигнала в середине каждого бита последовательности. Благодаря использованию системы прерываний, работа программы приема последовательности проходит в фоновом режиме.
Модуль I/O Port P1 - 8 линий вход/выход и модуль I/O Port P2 - 6 линий вход/выход, т. е. в распоряжении пользователя имеется 14 линий ввод/вывод для работы с внешними устройствами. Все линии программно перестраиваются в режим вход или выход. Каждый порт имеет свой вектор прерывания. Режимы работы всех линий I/O программируются независимо друг от друга. Установку режимов работы цифровых линий портов I/O осуществляют, используя семь служебных регистров:
Входной регистр порта - содержит входную информацию.
Выходной регистр порта - содержит выходную информацию.
Регистр направления порта - изменяет направление линии (вход/выход).
Регистр типа входного сигнала порта - задает фронт, спад или уровень сигнала на линии, необходимый для возникновения события прерывания.
Регистр флагов порта - контролирует наступление события прерывания.
Регистр маски порта - позволяет установить маску для запрета прерывания.
Идентификация сработавшего вектора прерывания осуществляется программно, чтением данных соответствующего регистра флагов порта.
Идентификация сработавшего вектора прерывания осуществляется программно, чтением данных соответствующего регистра флагов порта.
Модуль Comparator_A (только в микроконтроллерах MSP430F1101, MSP430F1121) значительно расширяет возможности микроконтроллера. Теперь модуль имеет два источника опорного напряжения - внутренний и внешний. При использовании внутреннего источника опорного напряжения, Uref выбирается из ряда 0 Vcc, 0.25 Vcc, 0.5 Vcc и Vcc, где Vcc - напряжение питания микроконтроллера. При использовании внешнего Uref , значение опорного напряжения определяет пользователь в диапазоне 0...Vcc. Появилась возможность работать практически со всеми типами датчиков. Напряжение, ток, резистивные или емкостные датчики - основная сфера применения модуля Comparator_A.