Состав микроконтроллеров серии MSP430F2xxx

Упрощенно рассматривая микроконтроллер, можно сказать, что он состоит из ядра (процессора), памяти и набора периферийных устройств.

Микроконтроллеры MSP430 имеют единое адресное пространство для памяти и периферийных устройств.

В микроконтроллере MSP430 имеется оперативная память ОЗУ и постоянная перепрограммируемая память — флешь. Флешь-память имеет две секции: первая секция предназначена для хранения кодов программы и называется «основной секцией», вторая — предназначена для хранения различных установок и констант и называется «информационной». Для удобства стирания/записи обе секции разбиты на сегменты. Таким образом, эти две секции памяти различаются только базовыми адресами, своими размерами и размерами секций. В остальном они одинаковы. Программы и данные можно размещать как в одной, так и в другой. Ядро микроконтроллера их никак не различает.

Регистры периферийных устройств так же разбиты на две области. Эти две области отличаются только тем, что к одной из них доступ осуществляется по-байтно, а к другой по словам (два байта, выровненных на границу слова).

В начале адресного пространства есть еще одна область — область регистров специальных функций.

Физические адреса памяти и регистров и их количество зависят от конкретной модели микроконтроллера.

Одни и те же периферийные устройства внутри серии размещаются на одних и тех же адресах. Таким образом модельный ряд серии формируется тем или иным набором периферийных устройств и размером памяти.

При создании программ для микроконтроллеров удобно пользоваться не абсолютными адресами памяти и регистров, а их мнемоническими названиями или именами. Например, при написании исходного кода на языке ассемблера намного удобнее использовать имя регистра порта вывода — P1OUT, чем запоминать его адрес — 0x0021.

Кроме того, почти все регистры периферийных устройств имеют уникальные (собственные) названия битов. Так, например, у сторожевого таймера WDT+ бит с порядковым номером 7 используется для выключения WDT+. Этот бит называется WDTHOLD. Очевидно, что это название намного легче запомнить, чем число 0x0080, которое ему соответствует.

Таким образом, для эффективной работы с регистрами периферийных устройств и их битами, возникает необходимость иметь таблицы переводов имен в числовые значения.

Ниже приведен фрагмент файла для компаратора Comparator_A+

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Регистры
CACTL1  equ     0x0059  ; CA control 1
CACTL2  equ     0x005a  ; CA control 2
CAPD    equ     0x005b  ; CA port diasable

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Наименование битов
CAIFG   equ     0x01
CAIE    equ     0x02
CAIES   equ     0x04
CAON    equ     0x08
CAREF0  equ     0x10
CAREF1  equ     0x20
CARSEL  equ     0x40
CAEX    equ     0x80

CAOUT   equ     0x01
CAF     equ     0x02
P2CA0   equ     0x04
P2CA1   equ     0x08
P2CA2   equ     0x10
P2CA3   equ     0x20
P2CA4   equ     0x40
CASHORT equ     0x80

CAPD0   equ     0x01
CAPD1   equ     0x02
CAPD2   equ     0x04
CAPD3   equ     0x08
CAPD4   equ     0x10
CAPD5   equ     0x20
CAPD6   equ     0x40
CAPD7   equ     0x80

А это фрагмент файла описания ресурсов микроконтроллера MSP430F2001

.include "Port_P1.inc"
.include "Port_P2.inc"
.include "BCM+.inc"
.include "Comparator_A+.inc"
.include "Timer_A.inc"
.include "FMC.inc"
.include "WDT+.inc"
.include "CPU.inc"

;; Внимание! Порт P2 имеет всего два бита: P2.6 и P2.7

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Регистры специальных функций
IE1 equ 0x0000  ; Разрешение прерывания
IFG1    equ     0x0002  ; Флаг прерывания

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Наименование битов
WDTIE   equ     0x01
OFIE    equ     0x02
MNIIE   equ     0x10
ACCVIE  equ     0x20

WDTIFG  equ     0x01
OFIFG   equ     0x02
PORIFG  equ     0x04
RSTIFG  equ     0x08
NMIIFG  equ     0x10

Таким образом, имея систему имен регистров и битов можно создавать программное обеспечение для МК, указывая в программе только их названия.

Проблема создания программ для MSP430 под Линуксом состоит в том, что реально имеется возможность это делать только в gcc на языке С или же на ассемблере, но только в для модулей, которые потом необходимо линковать с другими. Но иногда бывает так, что нужно создать небольшой проект, который состоит из одного ассемблерного файла, и который желательно с минимальными затратами превратить (отассемблировать) сразу в коды микроконтроллера (HEX-файл).

Такой минимальный ассемблер уже создан. (Автор ассемблера — Michael Kohn, mike@mikekohn.net, http://www.mikekohn.net) Я уже протестировал его, работает нормально. Сравнивал код с тем, что генерит IAR — почти байт-в-байт. Разница только в том, что Мишкин ассемблер размещает стринговые константы по выровненным на границу слова адресам, а IAR-овский — c любого свободного байта.

Я хочу сказать, что уже начал создавать систему .inc-файлов. Но работы оказалось больше, чем я думал. Поэтому я прошу помощи в написании этих файлов. Начинающим, а особенно тем, кто знакомится с архитектурой MSP430 будет и практика, и польза. Да и поучаствовать в crowd-source проекте неплохо, оставить свое имя в исходниках, которые разойдутся по всему миру.

Если есть интерес поучаствовать или что-то сказать, напишите .

UPDATE 09.02.2012

Сегодня выложил на github первую публичную версию include-файлов.

подробности тут:
https://zhevak.wordpress.com/2011/12/19/как-начнать-работать-с-msp430-в-linuxе/

Advertisements

5 responses to “Состав микроконтроллеров серии MSP430F2xxx

  1. Только начал знакомиться с этим контроллером, есть новый LaunchPad (с MSP430G2553 и MSP430G2452), установлен naken430asm в Ubuntu, опыта работы с микроконтроллерами совсем нет, только лишь загрузил во второй пустой МК программу мигания светодиодами (попробовал сделать это через msp430-gcc и naken430asm, посмотрел на размер кода, и решил оставить пока что си в стороне), давным-давно программировал на ассемблере БК0010.

    Было бы интересно поучаствовать в создании inc файлов, заодно хорошо изучу архитектуру этих МК.

    В ближайшем будущем хочу сделать интересные светодиодные двоично-десятичные часы с сенсорным управлением (кнопки и слайдеры) на MSP430.

    • «Оставайтесь на связи» (с)
      У меня почти готова очередная публикаяция на эту тему. Нужно дописать и вставить скриншоты. Сегодня-завтра наверно закончу и выложу.

      Вы мне очень поможете и ускорите процесс, если сможете организовать репозиторий (типа git), куда бы можно будет выложить inc-файлы.

      Относительно inc-файлов. Пару дней назад изменил файл BCM+.inc. Оказалось я тупо забыл дать описание битов у нескольких регистров.

      • Вместо своего репозитория можно воспользоваться готовым сервисом, вроде https://github.com/ или http://code.google.com/intl/ru/

        Пришлите мне на ibnteo@gmail.com файлы проекта, описание, название, и под какой лицензией публиковать, и я выложу их в открытый репозиторий.

        Вам какой системой контроля версий привычнее пользоваться, git или mercurial (hg)?

      • Да, я github и имел ввиду. Хотя ни с той, ни с другой, ни с какой-то еще системой я не работал. (Ну то, что как-то чужие файлы забирал с git—та — это не в счет. Одно дело забирать, выполняя пошаговые инструкции, а другое дело самостоятельно «плыть» — публиковать свое и вести какой-то учет.)

        Спасибо за помощь. Вообще-то я хотел бы сам разобраться в вопросе. Тем более, что еще толком не разбираюсь с этой кучей всяких лицензий.

      • Да, лучше попробуйте сами, ведь чтобы научиться этим пользоваться, нужно просто начать это делать 🙂
        http://brokenbrake.biz/2010/11/11/Git_And_GitHub

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s