Руководство 02: MSP430 адресация и регистры

Много мест я облазил в поиске информации как же на самом деле работает MSP430 и везде начинали рассказывать о архитектуре, адресации, шинах и других технических премудростях. К сожалению, это всё требует немного опыта в электротехнике. Сегодня мы попытаемся узнать что нужно что бы начать использование MSP430, без понимания физических свойств биполярных переходов или чего нибудь подобного. Технические знания очень полезны в точной настройке проекта или в программировании на ассемблере, но элементарнейших знаний хватит для работы на C.

Одна из отличительных характеристик MSP430 по отношению к другим микроконтроллерам является фон Нейманская архитектура, вся память и информация доступная процессору находится в одном месте. Другие микроконтроллеры используют различные типы памяти раздельно, хотя такой подход и показывает лучшую эффективность, но он несколько усложняет проектирование. Проще будет понять это представив микроконтроллер как город(или в случае с Гарвардской архитектурой, группой городов). Для фон Неймановской системы, такой как у MSP430, все живут вместе каждый со своим уникальным адресом. Для Гарвардской системы, адрес может повторяться, и город должен быть указан.

Память

Место памяти в MSP430 включает раздел для программы, раздел для хранения данных, память(RAM), и разделы для других важных вещей с которыми мы познакомимся позже. Сейчас нас больше всего интересует группа адресов называемая регистрами. Эти адреса как бы представляют коммунальные услуги, в нашем MSP430 городе: такие как почта, электроэнергетическая компания и так далее. В MSP430 регистры контролируют процессор и его периферию. Вы можете представить регистры как дома с выключателями и включателями. Положение переключателей определяет что произойдёт в определённом случае, какую работу берёт контакт, как поведёт себя та или иная периферия… Регистры это группа которая состоит из трёх секций: регистр специальных функций(SFR), 8-битная периферия (секция которой нужны только 8-битные инструкции), и 16-битная периферия(очевидно которая нужны полные 16-битные инструкции). Как пример, давайте взглянем на самый младший из семейства MSP430 — MSP430G2001. Откройте копии справочника семейства x2xx и даташит на G2x01.

Ссылки могут оказаться битыми если TI обновит любой из этих документов. Самый простой путь найти их вручную, зайдя на сайт TI, и используя поле «Search by Part Number» найти необходимый документ, для микроконтроллеров G2x01, поискать всё что подходит для этой категории, например msp430g2001. Справочник семейства может быть найден на странице любого чипа семейства x2xx.

На страницах с 1 по 4, справочника семейства, показывается карта «города» семейства x2xx. Вы можете видеть что адреса для SFR находятся везде от 0h до Fh (h обозначает что значение в шестнадцатеричной системе счисления. Адреса от 0 до 15, если в десятичной). За ними идёт 8-битная периферия, от 10h до Ffh(от 16 до 255). Обратите внимание есть большой разрыв между адресами RAM и флэш памяти. Справочник семейства показывает общие сведения для всего семейства x2xx – что бы узнать значение конкретного чипа, обратитесь к даташиту.

На странице 11 даташита есть таблица адресов памяти для всех микроконтроллеров из семейств G2x01 и G2x11. Для G2001 есть регистры периферии, а также 128 байт RAM. Адреса от 0201h до 10FEh недоступны, и дальше мы видим 256 байтную часть называемую «Information memory». (Эта область хранит калибровочные значения и другие важные числа которые могут понадобиться при ослаблении питания. Обыкновенно они не доступны для записи, но могут быть в случае необходимости… но это уже другая история.) Итак, ещё мы имеем 512 байт для кода, включая векторы прерываний в самом верху(опять же, это уже другая история).

Регистры

Сейчас когда мы имеем представление как выглядит городок G2001, давайте вернёмся к домам переключателям упоминаемых ранее. Регистры MSP430 являются специальной областью памяти, которая выполняют настройку устройства и говорит нам когда случается что то важное. На десятой странице даташита рассказывается о SFR(Регистр Специальных Функций) доступных в G2001. Там указаны четыре из них, в адресах от 0h до 3h: разрешения прерывания — Interrupt Enable 1 (IE1) и Interrupt Enable 2 (IE2), а также флаги регистра прерываний — Interrupt Flag Register 1 (IFG1) и Interrupt Flag Register 2 (IFG2). Каждый адрес указывает на 1 байт памяти, то есть 8 бит для каждого регистра. Страница 10 показывает какие из них задействованы в G2001.

В этом микроконтроллере для IE1 доступны биты 0, 1, 4 и 5. Также и для IFG1 доступны биты от 0 до 4. Даташит называет имена этих битов и расшифровывает их предназначение. Для начала, бит 0 в IE1 называется WDTIE, или Разрешение Прерываний Сторожевого Таймера. Этот бит обыкновенно установлен в 0, но если мы захотим устройство использовало сторожевой таймер как счётчик времени, тогда понадобится установить этот бит в 1, что позволит сторожевому таймеру установить флаг(IFG1 бит 0, если быть точным) в соответствующих условиях при появлении прерывания(мы вернёмся к этому позже). Итак, этот бит может сообщать MSP430 о действиях которые должен выполнить процессор, либо вообще ничего не сообщать.

Сейчас перейдём к 14 страницы даташита. На таблице показана peripheral file map, или адреса и имена регистров используемых в устройстве. Обратите внимание в нижней части списка находятся SFR, обсуждаемые ранее. В любое время когда вам необходимо использовать периферию страница 14 послужит вам отправной точкой для ознакомления с домами переключателями, вы также должны ознакомиться с указанной информацией для того что бы быть уверенными что всё настроено правильно. Мы рассмотрим на регистры для каждого периферийного модуля в своих постах. Сегодня, давайте взглянем на регистры для Порта P1 и Порта P2, так как они являются наиболее простыми.

На данном микроконтроллере имеются общедоступные контакты ввода/вывода(I/O pins). Схема контактов находится на странице 3 и она показывает что G2001 имеет все 8 контактов для P1(с P1.0 по P1.7) и 2 контакта для P2(P2.6 и 2.7). Все регистры имеют биты соответствующие каждому контакту, например P1.4 контролируется битом 4 в каждом из регистров. А сейчас давайте рассмотрим каждый регистр предназначенный для портов.

PxIN

Входной регистр порта, только для чтения. Когда контакт выбран на вход, прочитанное значение с этого бита говорит о напряжении на контакте. Байт PxIN читает значения одновременно всех входов на данном порту. Запомните это цифровая система, так что имеется только два значения которые могут быть прочитаны: либо 0 либо 1. Эти значения соответствуют напряжению Vss(0) и Vcc(1), которые обыкновенно 0 вольт и в диапазоне между 1.8 и 3.6 вольтами соответственно. Существует определённая граница посредством которой напряжение входящие в этот диапазон читается как 1, а то которое меньше читает как 0. Что бы предотвратить любой вред чипу, вы никогда не должны подавать на чип напрямую напряжение за пределами диапазона Vss — Vcc.

PxOUT

Выходной регистр порта, доступен для записи. Когда контакт выбран на выход, мы можем изменить напряжение это контакта записав 0 или 1 в соответствующий бит в PxOUT. Что на входе будет соответствовать Vss(0) или Vcc(1).

PxDIR

Регистр направлений определяет будет контакт входящим(бит = 0) или выходящим(бит = 1). Вначале вашей программы, вы можете настроить контакты порта устанавливая значениями на вход или на выход. Это вовсе не означает что вы не можете переопределить контакт в середине вашей программы.

PxIE, PxIES и PxIFG

Регистры разрешения прерываний(PxIE), регистры выбора фронта прерываний(IES) и регистры флагов прерывания (PxIFG). Мы рассмотрим их вместе, т. к. они работают вместе. Вы можете использовать контакты порта как флаг процессора и запустить прерывание. Пока будем думать, что прерывание это сообщение процессору для приостановки текущей работы, и выполнения чего-нибудь особенного. После завершения прерывания, процессор возвращается к работе выполняемой до прерывания. Устанавливая в 1 бит контакта PxIE вы разрешаете данное поведение. Биты PxIE убирается если флаг контакта изменяется из 0 в 1(а бит IES устанавливается в 0) или от 1 до 0 (бит IES устанавливается в 1). Другими словами, флаг срабатывает когда обнаруживается любое движение через порог. А когда появляется прерывание, тогда устанавливается соответствующий бит в PxIFG.

PxSEL

Посмотрите снова на схему выводов(стр.3 в даташите), на ней вы можете заметить что большинство ножек имеет несколько функций. Функция ножки зависит от настройки регистра. Функции по умолчанию указана первыми, так контакты P1 по умолчанию на ввод/вывод, тогда как контактам P2 назначены на подключение к кварцевому резонатору. Особенности настройки рассмотрим позже, а пока планируйте использовать значения по умолчанию в PxSEL.

PxREN

Внутренние подтягивающие резисторы — очень полезная вещь. С их помощью можно, например, подтянуть контакт к питанию (или земле) для подключения кнопки. Для этого надо установить нужный бит в PxREN, после чего выбрать нужный подтягивающий резистор через соответствующий бит регистра PxOUT: 1 — подтяжка к питанию, 0 — к земле.

Сейчас мы рассмотрели работу некоторых переключателей. Далее мы рассмотрим как установить их в программе записываемой в устройство.

Перевод Tutorial 02: The MSP430 Township and Registers.
  • 0
  • 29 сентября 2011, 12:22
  • Akay

Комментарии (7)

RSS свернуть / развернуть
Комментируем не стесняемся
0
  • avatar
  • Akay
  • 29 сентября 2011, 23:36
Начнем с конца. Последний абзац я-бы пересказал так:
Внутренние подтягивающие резисторы — очень полезная вещь. С их помощью можно, например, подтянуть пин к питанию (или земле) для подключения кнопки. Для этого надо установить нужный бит в PxREN, после чего выбрать нужный подтягивающий резистор через соответствующий бит регистра PxOUT: 1 — подтяжка к питанию, 0 — к земле.
0
Еще (абзацем выше):

ссылка на страницу 3 — это о чем вообще?
контакт = пин = ножка = вывод
кварцевый таки не генератор, а резонатор
0
А ещё выше — ошибка. PxIES — регистр фронтов, а PxIFG — флаги.
Ну и
прерывание края выбора
уж никуда не годится.
0
перед открывающими скобками во всем тексте нужен пробел. Запятые тоже имеют право на жизнь.
Стилистически не надо переводить исходник ПОСЛОВНО.
Сейчас, думайте что прерывание это сообщение процессору
Можно перевести так:
Давайте будем считать что прерывание это просто сообщение процессору.
0
+1
  • avatar
  • _YS_
  • 01 октября 2011, 15:18
информативненько
0
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.