8-900-374-94-44
[email protected]
Slide Image
Меню

Программирование msp430: MSP430, учимся программировать и отлаживать железо / Хабр

MSP430, учимся программировать и отлаживать железо (часть 3) / Хабр

Возможно Вы уже не первый раз садитесь за программирование Вашего MSP430. Если это не так, то рекомендую ознакомиться с предыдущими статьями по данной тематике: часть 1, часть 2.
В этой статье мы рассмотрим инструмент для графической настройки периферии нашего микроконтроллера — Grace, познакомимся с принципом работы watchdog и поработаем с виртуальным COM-портом (через программатор). Уже традиционно будет рассмотрен небольшой пример кода, и предоставлены все необходимые для понимания ссылки.
Введение

В первой статье я упоминал Code Composer Studio, от рассмотрения которого отказался, но недавно моё внимание, благодаря Соколову А.В., привлёк один плагин для неё — Graphical Peripheral Configuration Tool (Grace).

Каждый раз, когда приходится настраивать очередной периферийный модуль MSP430, мы сталкиваемся с рядом сложностей. К таким сложностям можно отнести незнание списка регистров конкретного модуля, отличительные особенности конкретного микроконтроллера или плохое понимание англоязычных документаций. В любом из перечисленных случаев Grace может стать полезным.

Grace

Скачать и установить этот инструмент можно вместе с Code Composer Studio v5 по следующей ссылке. Для этого потребуется зарегистрироваться на сайте Texas Instruments.

После установки CCS выбираем Project→New CCS Project, в облати Project templates and examples выбираем Empty Project→Empty Grace (MSP430) Project, в области Device не забудьте указать микроконтроллер из списка.

Как только появится экран «Grace — Welcome», нажимаем клавишу Device Overview. Перед Вами появится следующая картинка.

Кликнув по конкретному устройству на ней, Вы перейдёте к его настройке, которую можно производить в нескольких режимах. Режимы могут отличаться для разных устройств, но обычно это Basic User, Power User и Registers. Basic User

и Power User предназначены для быстрой настройки периферийного устройства интуитивно. Registers отображает список всех регистров устройства и позволяет менять их значения.

Совет: в datasheet к микроконтроллеру не всегда содержится полная информация об интересующем устройстве, про все регистры и параметры обычно можно прочитать в файле MSP430xxxx Family User’s Guide, который можно скачать на сайте Texas Instruments.

Поскольку для работы я уже привык использовать Workbench, после завершения настройки, все конфигурационные данные требуется перенести туда. Для этого нажимаем Project→Build All, находим в папке проекта директорию /src/csl/, в ней и находятся все *.c файлы с конфигурацией каждого устройства.

Пример кода

Следующий код работает с USB-UART мостом встроенным в программатор, так же в код включено использование watchdog, но обо всём по порядку.
  1.  
  2. #include «msp430f2274.h»
  3. #include <string>
  4.  
  5. void UARTWriteString(string str);
  6.  
  7. bool watchdogReset = true;
  8.  
  9. void main(void)
  10. {
  11.   WDTCTL = WDT_MRST_32; // Watchdog автоматически
  12.                         // перезапустит систему через 32ms.
  13.  
  14.   BCSCTL1 = CALBC1_1MHZ; // Устанавливаем тактовую частоту Basic Clock System.
  15.   DCOCTL = CALDCO_1MHZ; // Устанавливаем тактовую
  16.                         // частоту Digital Controlled Oscillator.
  17.  
  18.   P3SEL = BIT4 + BIT5; // Выбираем функцию P1.4/P1.5 как TXD/RXD для UART.
  19.  
  20.   UCA0CTL1 |= UCSWRST; // Этот бит блокирует работу прерываний от UART и работу 
  21.                        // сдвигового регистра чтобы не мешать
  22.                        // настройке (грубо говоря отключает UART).
  23.   UCA0CTL1 |= UCSSEL_2; // Наш UART будет работать от 
  24.                         // SMCLK (Sub-main clock), тоесть от 1MHZ.
  25.   UCA0BR0 = 0x68; // Делитель частоты для SMCLK (1000000 / 9600).
  26.   UCA0BR1 = 0x00;
  27.   UCA0MCTL = 0x04; // Определяет маску модуляции.
  28.                   // Это помогает минимизировать ошибки.
  29.   UCA0CTL1 &= ~UCSWRST; // Включаем UART обратно.
  30.  
  31.   P1DIR |= BIT0; // Настройка светодиодов.
  32.   P1DIR |= BIT1;
  33.   P1OUT &= ~BIT0;
  34.   P1OUT &= ~BIT1;
  35.  
  36.   UARTWriteString(«—Привет, Хабр!—«);
  37.  
  38.   unsigned char data;
  39.   while(true)
  40.   {
  41.     while (!(IFG2&UCA0RXIFG)) // Проверка готовности буфера приёма.
  42.       if(watchdogReset)
  43.         WDTCTL = WDTPW + WDTCNTCL; // Сброс таймера watchdog в ноль.
  44.     data = UCA0RXBUF;
  45.     if(data == 0x01)
  46.     {
  47.       UARTWriteString(«—Погасить зеленый светодиод.—«);
  48.       P1OUT &= ~BIT1;
  49.     }
  50.     else if(data == 0x02)
  51.     {
  52.       UARTWriteString(«—Зажечь зеленый светодиод.—«);
  53.       P1OUT |= BIT1;
  54.     }
  55.     else if(data == 0x03)
  56.     {
  57.       UARTWriteString(«—Переключить состояние красного светодиода.—«);
  58.       P1OUT ^= BIT0;
  59.     }
  60.     else
  61.     {
  62.       UARTWriteString(«—Принятые данные не соответствуют.—«);
  63.       watchdogReset = false;
  64.     }
  65.   }
  66. }
  67.  
  68. void UARTWriteString(string str)
  69. {
  70.   int strSize = str.length();
  71.   for(int i = 0; i < strSize; i++)
  72.   {
  73.     WDTCTL = WDTPW + WDTCNTCL; // Сброс таймера watchdog в ноль.
  74.     while (!(IFG2&UCA0TXIFG)); // Проверка готовности буфера отправки.
  75.     UCA0TXBUF = str[i];
  76.   }
  77. }
  78.  

Для работы с COM-портом со стороны компьютера нам потребуется программное обеспечение, мой выбор пал на COM Port Toolkit. Что именно выберите Вы — не имеет значения.

Небольшое видео, которое позволит понять что именно делает пример.

В отличии от предыдущих статей, я постарался дать внятные комментарии прямо в коде программы. Не вижу смысла в этот раз пояснять каждый использованный в коде регистр. Хочу лишь обратить внимание на некоторые аспекты.

  1. Для расчёта значений UCA0BR0, UCA0BR1 и UCA0MCTL существует неплохой онлайн калькулятор.
  2. SMCLK — сигнал, который поступает из внешнего резонатора (если установлен) или из DCO с применением делителей 1, 2, 4 или 8. Используется как тактовый сигнал для периферии.
  3. В примере, watchdog используется не совсем по назначению, данный код лишь объясняет принцип его работы. Смысл заключается в том, что если Ваша программа в течении 32ms (WDT_MRST_32) не установит бит WDTCNTCL в регистре WDTCTL в единицу, то система будет перезагружена. Watchdog требуется для предотвращения зависания Вашего программного обеспечения.
  4. Регистр WDTCTL имеет 16 бит, первые 8 необходимо устанавливать в WDTPW каждый раз когда производится запись в него. Это механизм защиты регистра от случайной записи в случае программных сбоев.
  5. Описание и настройка Basic Clock System это повод для целой статьи, пока следует понять, что MSP430 имеет очень гибкую систему тактовых генераторов, которую, в упрощенном виде, можно настроить с помощью Grace.
  6. Использование такого метода отладки сильно замедляет работу программы в целом, однако это позволяет достоверно определить порядок выполнения кода, в том числе в обработчиках прерываний.
Заключение

Чем дольше я пишу, тем сложнее и больше становится материал. Эта статья станет предпоследней в серии для новичков.
В следующий раз я затрону все вопросы, на которые не успел ответить ранее.

Я надеюсь, что эта статья оказалась полезна тебе, читатель.

Используем MSP430-Launchpad в качестве программатора / ХабрЗдравствуйте! Я хочу поделиться с хабрасообществом одним необычным применением отладочной платы MSP430-Launchpad.

Руководство предназначено тем, кто уже имеет MSP430-Launchpad, освоил микроконтроллеры MSP430-ValueLine и задумывается о том, чтобы перейти на более продвинутые МК MSP430, но пока не решился на то, чтобы приобрести профессиональный программатор MSP430-JTAG или MSP430-UIF. Но это не страшно. В качестве программатора можно пока будет использовать Launchpad. Под катом я расскажу как это сделать.

Оказывается, что программатор, входящий в состав платы Launchpad может прошить любой микроконтроллер (МК) MSP430, имеющий интерфейс SpyByWire (SBW). Каких-либо ограничений на модель МК по-видимому нет. Баг ли это Launchpad’а или так и задумала Texas Instrunmets неизвестно. По интерфейсу SBW программируется в том числе МК MSP430G2553 и MSP430G2452, которые идут в комплекте с платой. Убедиться, что в микроконтроллере есть интерфейс SBW можно посмотрев его даташит. Мы в качестве подопытной платы будем использовать самодельную отладочную плату с микроконтроллером MSP430F5438A. Интерфейс SBW в этом МК есть. Плата выглядит вот так:

Теперь нужно снять перемычки, которые соединяют верхнюю часть платы Launchpad с нижней и вывести провода с контактов RST,TEST,VCC,VSS. Эти провода нужно связать самодельным кабелем с ножками МК в следующем порядке (в скобках дана нумерация выводов для МК MSP430F5438A):

Launchpad <---------> MSP430F5438A 
           VCC<--------->VDD(87)
           RST<--------->SBWTDIO(96)
          TEST<--------->SBWTCK(91)
           GND<--------->VSS(88)

На следующей картинке ножки MSP430F5438, к которым нужно подключится отмечены крестиком:

Теперь делаем самодельный кабель, подключаем его к MSP430F5438 и к Launchpad. Должно получиться примерно так:

МК из розетки DIP-20 нужно извлечь. При этом МК на подопытной отладочной плате будет запитан от Launchpad, который в свою очередь питается от USB. Теперь можно подключить USB кабель в Launchad и подключить его к компьютеру. Если всё сделано правильно, то на Launchpad должен гореть зелёный светодиод PWR. Если перепутаны VSS и VDD, то светодиод не горит.

Теперь можно проверить опознаётся ли микроконтроллер. Далее я буду использовать ОС Linux и утилиту mspdebug. Если у вас другой toolchain для MSP430 то смотрите документацию к нему.Теперь проверим опознаётся ли наш МК. В консоли наберём:

mspdebug rf2500 

Плата должна дать такой ответ:
vvk@linux-bmx0:~> mspdebug rf2500
MSPDebug version 0.21 - debugging tool for MSP430 MCUs
Copyright (C) 2009-2012 Daniel Beer <[email protected]>
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Trying to open interface 1 on 004
Initializing FET...
FET protocol version is 30394216
Set Vcc: 3000 mV
Configured for Spy-Bi-Wire
Device ID: 0x0580
  Code start address: 0x5c00
  Code size         : 262144 byte = 256 kb
  RAM  start address: 0x1c00
  RAM  end   address: 0x5bff
  RAM  size         : 16384 byte = 16 kb
Device: MSP430F5438A
Number of breakpoints: 8
fet: FET returned NAK
warning: device does not support power profiling
Chip ID data: 05 80 17

Available commands:
    =           erase       isearch     opt         run         setwatch_w 
    alias       exit        load        power       save_raw    simio      
    break       fill        load_raw    prog        set         step       
    cgraph      gdb         locka       read        setbreak    sym        
    delbreak    help        md          regs        setwatch    verify     
    dis         hexout      mw          reset       setwatch_r  verify_raw 

Available options:
    color                       gdb_loop                   
    enable_bsl_access           gdbc_xfer_size             
    enable_locked_flash_access  iradix                     
    fet_block_size              quiet                      

Type "help <topic>" for more information.
Press Ctrl+D to quit.

(mspdebug) exit 

В результате мы должны попасть в консоль mspdebug. Чтобы выйти оттуда, введите exit. Если МК не ответил, то проверяйте кабель.
Если получили такой ответ, то МК распознался и можно его программировать командой:
mspdebug  rf2500 "prog имя_файла_с_прошивкой.elf"

Через Launchpad программирование идёт очень медленно. 8кБ прошивается несколько минут. В остальном каких-либо ограничений нет.

Ещё следует отметить, что после того, как мы отключили нижнюю часть платы Launchpad, кнопка RESET более не функциональна. Если на плате такой кнопки нет, то отправить МК в ресет можно с командной строки:

mspdebug rf2500 reset

В общем, приведённый способ профессиональный программатор не заменит, но со «взрослыми» МК серии MSP430 тем не менее можно не только ознакомиться но и полноценно работать, если не обращать внимание на низкую скорость прошивки.
Способы прожига MSP430. Lauchpad в качестве программатора. / MSP430 / Сообщество EasyElectronics.ru В данной статье хочу поведать не такую уж и тайну об использовании ланчпада для заливки или сливки прошивки с MCU в hex-файл.

Пожалуй стоит начать с того, что меня напрягает в подавляющем большинстве Launchpad-based проектов — откровенно глупый способ заливки прошивки в девайс. Практически везде пользователю предлагается: запустить IAR или CCS, создать проект, вставить код копипастом, скомпилировать и начать сеанс отладки. Получается муторно. Именно это и является зачастую камнем преткновения для того, чтобы мир увидел очередной проект. Ведь далеко не каждый разработчик желает делиться исходниками точно так же, как и далеко не каждому конечному пользователю интересно их смотреть.

Для начала стоит рассмотреть способы залива прошивки в кристалл:

  • Используя загрузчик, он же BSL, он же BootStrap Loader.
    Я преследовал цель использования ланчпада в качестве программатора для девственных кристаллов, поэтому выбрал другой вариант. Этот же способ может быть интересен, если разработчику необходимо предусмотреть возможность выпуска обновлений прошивки и так далее. При соблюдении определенных конструктивных особенностей можно грузить прошивку напрямую с USB, без всяких преобразователей интерфейсов вроде TUSB или FTDI. Подробнее об этом можно прочитать в SLAU319. Есть вполне приличный мануал(SLAA450) по написанию своего BSL
  • JTAG обыкновенный.
  • У нас на эту тему есть статья. Есть еще вот такая штука.Тоже не стал разбираться, ведь LPT у меня нету, использовать преобразователь я не хочу, как и покупать программатор. У TI есть отличный мануал(SLAU320), где описаны все шаманские танцы вокруг JTAG’a. Желающие смогут построить свой собственный программатор. Сразу оговорюсь, у MSP430 есть
    один
    фьюз, зато настоящий. И при коммерческом использовании его желательно спалить перед отправкой устройства в свет, если конечно изготавливаемое устройство не просто до мелочей. Кстати вышеописанная «вот такая штука» умеет пережигать этот фьюз, Launchpad не умеет
.
  • Spy-Bi-Wire, он же SBW. Его и будем использовать.
  • Бывает в свою очередь двухпроводной и четырехпроводной. Одно другое дополняет, тем не менее TI проводит между ними четкую грань. Для заливки прошивки в кристалл можно использовать открытый и мультиплатформенный mspdebug, однако мне больше по душе просто открытый MSP430 Flasher. Скачать можно по ссылке, заполнив заявку на скачивание, или если вы как добропорядочный гражданин уже все заполнили=) можно скачать установщик отсюда.Данная программа умеет:
    • Заливать прошивку в формате TXT или HEX в девайс
    • Выполнять проверку памяти
    • Читать память кристалла в файл TXT или HEX
    • Устанавливать аппаратные брейкпойнты
    • Работать с паролем JTAG
    • Выбирать один из нескольких режимов работы девайса
    • Обновлять прошивку MSP-FET430UIF
    • Несколько вариантов сброса
    • Пережигать перемычку JTAG. Не работает на Launchpad’e.
    При использовании не забудьте указать ключ » -m SBW2 » . Обо всем остальном можно прочитать на вики TI или указав ключ » -h «. Имя контроллера задается например так » -n MSP430G2553 «. На этом пока все.

P.S. По поводу прожигания фьюза, сейчас разбираюсь. Вот тут(SLAU265) даются ссылки на ресурсы по программированию памяти. Пережигание доступно для MSP430F1xx, 2xx, и 4xx линейки.SLAU319 (раздел 2.8) говорит о возможности прошивки контроллера с пережженным фьюзом через BSL, который можно защитить паролем. А раздел 2.7 уверяет нас, что при его неправильном вводе происходит стирание flash. Там же есть схема и софт для программатора Replicator (REP430). Подключение осуществляется по интерфейсу jtag, типа j-link. Буду копать дальше

Программирование MSP430G2553 и эксперименты с Launchpad.

Если Вы хотите разобраться как работает MSP430Gxxx,
и  у  Вас есть время и желание,  то это нужно деалать.
Если   времени  нет,  то  нужно  выбрать  другой  путь.
На  данный момент,  есть оболочка програмир.  Energia,
которая  позволяет программировать быстро, используя
готовый код. Запрограммировать LCD display — 10 минут.
Сделать  многоканальный  вольтметр  —  еще  10 минут.
Вывести данные  и  сохранить на компьютере — еще 10.
Готовый вольтметр, который уже работает —  здесь.    .

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

  Для разработки таких вещей требуется:

-микроконтроллер,
-программатор,
-компилятор,
-эмулятор микроконтроллера,
-знание языка Си или Ассемблера.

  Микроконтроллер и знание языка программирования  — не проблема. Но программатор, эмулятор и компилятор – это за деньги и не малые. Можно, конечно, скачать промышленный компилятор и немного его «подлечить», а программатор сделать самому. Но тогда очень тяжело разбираться с проблемами. То ли программа написана с ошибкой, то ли программатор «глючит», то ли компилятор с эмулятором не «вылечен» до конца. А о ситуации, когда все по отдельности работает, а вместе они не «дружат», так и вообще говорить не хочется. 

  Таким образом, если Вы хотите попробовать программировать микроконтроллеры, то вам понадобится комплект оборудования которое на 100% совместимое и которое на 100% нормально работает.

  Такой комплект есть. Он выпускается фирмой Texas Instruments под названием  «MSP430 Launchpad development kit». Этот комплект продается, исключительно, в учебных целях для популяризации микроконтроллеров TI (Texas Instruments).

   Упаковка и содержимое “MSP430 Launchpad development kit” на фотографии. Здесь есть ВСЕ (!!!) для того, что бы начать программировать, плюс кварцевый резонатор и два микроконтроллера  (MSP430G2553 и MSP430G2452). Программу, «Code Composer Studio V.5», можно скачать c  http://processors.wiki.ti.com/index.php/Download_CCS.  От Вас потребуется, только, начальные знания языка Си, и компьютер с USB портом.

       Ограничения:
— Для бесплатной версии ограничен размер скомпилированного кода до 16 кб.
— Вы не можете использовать этот комплект в коммерческих устройствах.

       Преимущества:
— Цена комплекта (включая 2 микроконтроллера) – вне конкуренции.
— Все начинает работать прямо из коробки.
— Напряжение питания – от 2,2 до 3,6 Вольт, с низким энергопотреблением.

       Недостаток:
— Сложное внутреннее устройство микроконтроллера.

  Недостаток этот, весьма условный. Если Вы только начинаете изучать микроконтроллеры, то для Вас это не имеет НИКАКОГО значения.

  Все, что Вам необходимо или может понадобиться, находится на странице «Getting Started with the MSP430 LaunchPad Workshop». Видеоролики (en) объясняют как все работает. Видео о «Code Composer Studio V.5» — ti.com/tool/ccstudio  Сборник рускоязычных материалов в архиве for_MSP.rar (narod.ru)

  То, что написано дальше имеет мало общего с программированием. Это, скорее, изучение микроконтроллера методом «реверс-инжиниринга» (Rverse Eng

учебный курс. / MSP430 / Сообщество EasyElectronics.ru

Добрый день всем!

Позвольте представить вам учебный курс по микроконтроллерам MSP430.

Хочу сразу предупредить — данный тип МК несколько тяжеловат для рядового пользователя. Его используют в основном профессиональные разработчики, но… Я хочу сделать его доступным для всех. Так, что смотрим и не боимся.
Да, и ещё — традиционно я тяготею к ассемблерным типам языков, так что начнём с них. Потом будет и С.

Как уже говорил глубокоуважаемый _YS_, данный тип контроллеров построен по Фон-Неймановской архитектуре, т.е. имеет одну адресную ось. Деления на память программ и данных нет, просто они располагаются по разным адресам. Чуть позже приведу разбивку.
Мануалы пока читать не будем, просто покажу основное.
Контроллер 16-ти разрядный, в составе ядра есть 16 регистров, четыре из которых специального назначения (R0 или PC — счетчик команд, R1 или SP — указатель стека, R2 или SR — регистр состояния, R3 или CG — генератор констант). Остальные (R4-R15) доступны как регистры общего назначения. Есть одна отличная вещь — любой регистр может быть указателем.
Пока сведений достаточно.

С чего начать? Со среды программирования, ибо первые шаги можно делать не имея аппаратуры.

Внимание! Кто захочет начать с аппаратуры — запомните! Контроллер питается от напряжения 3,3 вольта, 5 вольт для него смертельны! Будьте осторожны.

Итак, среда разработки. Во всём мире профессионалы пользуются программами фирмы IAR Systems — www.iar.com.
Не будем изобретать велосипед, последуем их рекомендациям. С официального сайта можно скачать 30-дневную бесплатную версию. Заморочка в том, что прийдётся заполнить длинную форму личных данных. Кто не боится — вперёд!

После установки и запуска мы видим (у меня 4-я версия, текущая на официальном сайте — 5-я, но отличий немного):

Посмотреть на Яндекс.Фотках

Жмём кнопку «Создать новый проект в текущем рабочем пространстве» («Create new project in current workspace»).
Смотрим на окошко и выбираем «asm/asm».

Посмотреть на Яндекс.Фотках

Нажимаем «Ok» сохраняем файл проекта в нужное нам место. Рекомендую, каждый проект сохранять в отдельный каталог.

Получаем следующее:

Посмотреть на Яндекс.Фотках

Комментирую полученный код.


#include "msp430.h"

Ну тут всё ясно, подключаем заголовочный файл.

        NAME    main                    ; module name

        PUBLIC  main                    ; make the main label vissible
                                        ; outside this module

Это стандартное объявление имени модуля и его видимости из других модулей.

        ORG     0FFFEh
        DC16    init                    ; set reset vector to 'init' label

Тут мы объявляем вектор перехода по сигналу «Reset». Я делаю это несколько иначе, чуть ниже покажу как.
У MSP430 вектора прерываний располагаются в конце памяти — от адреса FFFFh и вниз. Для серии F1xxx и F1xx их 16 штук. Да, и ещё существенное отличие — в вектор заносится адрес, а не команда перехода! Т.е., в данном случае, адрес метки «init».

        RSEG    CSTACK                  ; pre-declaration of segment
        RSEG    CODE                    ; place program in 'CODE' segment

Тут объявляем сегмент стека и кода.
Вот собственно с этого и начинается программа.

init:   MOV     #SFE(CSTACK), SP        ; set up stack

Вот она метка «init», её адрес компилятор потом подставит в вектор сброса.
Первая команда — инициализация стека. Директива SFE вычисляет конец сегмента. А # нужен, чтобы подставлять вычисленное значение, а не рассматривать его как адрес. К примеру:

mov   #1, R1 - поместить 1 в R1,
а
mov   1, R1 - поместить значение из ячейки памяти с адресом 1 в R1

Вот такие хитрости.
Идём далее.
Команда «nop» у нас просто для задержки.
А вот это важная вещь:

        MOV.W   #WDTPW+WDTHOLD,&WDTCTL  ; Stop watchdog timer

Дело в том, что по умолчанию у MSP430 включен сторожевой таймер. Чтобы не было неожиданностей, выключаем его данной командой.
Да, и обратите внимание: все команды пишутся немного не так как у AVR, x51 или x86 — источник сначала, затем приёмник.

        JMP $                           ; jump to current location '$'
                                        ; (endless loop)

Это прыжок «сам на себя». Просто, чтобы создать замкнутый цикл.

Ну и не забываем «END» в конце программы, также как и у PIC в MPLAB. После этого волшебного слова программа заканчивается.

Что сейчас делает наша программа? Почти ничего. Давайте наполним её смыслом. А в качестве примера сделаем сортировку случайных чисел.
Задача следующая:
1. Имеем данные в ПЗУ (набор из 16 случайных чисел).
2. Переместим данные из ПЗУ в ОЗУ.
3. Отсортируем данные в ОЗУ.

Для начала настроим проект.
Выберем тип контроллера. Открываем меню «Projects->Options»:

Посмотреть на Яндекс.Фотках

Появится вот такое окошко, где мы и выберем тип контроллера.

Посмотреть на Яндекс.Фотках

Далее выберем тип отладчика:

Посмотреть на Яндекс.Фотках
Счастливые владельцы аппаратного эмулятора могут выбрать «FET Debugger», ну а нам пока сойдет и «Simulator».

Для начала настроек достаточно. Жмём «Ok».

Далее, вставляем вместо всего в окошке текста следующий код (пока без самой сортировки):


#include "msp430.h"                     ; подключаем заголовочный файл

        NAME    main                    ; имя модуля
        PUBLIC  main                    ; установить видимость модуля из других
                                        
; Определение констант
ArrLn	EQU	16                      ; длина массива

        ; Вектора прерываний
        RSEG	INTVEC
        ORG     RESET_VECTOR           ; вектор сброса
        DC16    init 

        RSEG    CSTACK                  ; объявление сегмента стека

        RSEG    CODE                    ; объявление сегмента кода

init:   MOV     #SFE(CSTACK), SP        ; инициализация регистра стека

main:                                   ; начало основной части
        MOV.W   #WDTPW+WDTHOLD,&WDTCTL  ; запрет сторожевого таймера
        
SortMain:
        ; Переписать из ПЗУ в ОЗУ массив данных
        mov	#ArrLn, R4              ; инициализируем счётчик количества данных
	mov	#RamArr, R5             ; установим R5 как указатель на данные в ОЗУ
	mov	#RomArr, R6             ; установим R6 как указатель на данные в ПЗУ
	
MoveRomToRam:
	mov	@R6+, 0(R5)             ; копирование слова
	add	#2, R5                  ; продвинем указатель
	dec	R4                      ; уменьшим счётчик
	jnz	MoveRomToRam            ; если не ноль, то повторим
   
BasicCycle:
	JMP $                           ; jump to current location '$'

	
;	определение данных в ОЗУ
	RSEG	DATA16_N
RamArr:
	DS16	ArrLn

;	определение данных в ПЗУ
	RSEG	DATA16_C
RomArr:
	DC16	101, 11, 25, 657, 567, 217, 5732, 896, 123, 5467, 12, 65, 2345, 23, 98, 2398


        END

Разберём по частям. Но для начала научимся запускать программу на выполнение.
Скомпилируем проект — пункт меню «Project -> Make» или значок на панели инструментов:

Появится окошко «Messages», в котором отражен процесс компиляции. В случае успеха (а данный текст должен нормально скомпилироваться) появится сообщение об этом.

Далее жмем «Project -> Debug» или кнопку:

Должен запуститься собственно отладчик. IAR поддерживает два набора окон — раздельно для редактирования и отладки.
Закроем лишнее. Структура проекта при отладке не нужна, окно «Disassembly» используется редко, да и «Messages» не нужно.
А вот регистры и память хотелось бы видеть. Жмём «View -> Registers» и два раза «View -> Memory». Перетаскиваем окошки в нужные углы и получаем картинку (на мой вкус, можете сделать по своему):

Посмотреть на Яндекс.Фотках
В окошках «Memory» выбираем типы памяти «RAM» и «Flash», так будет удобнее просматривать. Также, в каждом окшке памяти щёлкаем правой кнопкой и выбираем из контекстного меню «2x Units» (для просмотра 16-ти разрядных данных) и «Data Coverage -> Enable» (будет показано обращение к текущим ячейкам — удобно).
К отладке готовы!

С помошью кнопки F10 (не входить в подпрограммы) или F11 (входить в подпрограммы) проходим по шагам и любуемся результатом. Техника нам подвласна!

На сегодня всё, а завтра продолжим разбор программы.

Просьба — прокомментируйте. Понравилось, не понравилось, не слишком ли тяжело для понимания, что хотелось бы ещё в этом уроке, а также что хочется на будущие. Жду откликов.
Спасибо за внимание.

Быстрый старт с микроконтроллерами MSP430.

Немного отвлечемся от STM32 и сегодня займемся устройствами от Texas Instruments – микроконтроллерами MSP430. И эта статья будет посвящена так называемому быстрому старту с этими девайсами. Все опыты и эксперименты будут ставиться на недорогой отладочной платке – MSP430 LaunchPad.

Итак, открываем коробку с платой и достаем все, что нам понадобится. На данном этапе нам нужна лишь сама плата и USB-кабель для подключения ее к компьютеру. Смело втыкаем шнур в USB-разъем и ждем пока заботливый Windows установит нам необходимые драйвера. Но тут есть одна неприятность – драйвер MSP430 Application UART надо найти и установить самим. Не вопрос!

Идем на официальный сайт Texas Instruments и качаем IDE (я остановил свой выбор на IAR Embedded Workbench for MSP430). Архив скачан, распаковываем и идем в диспетчер устройств. Там находим наш девайс и указываем вручную пути к файлам драйвера, которые находятся в скачанном архиве в папке Drivers. В случае успеха отладочная плата будет определяться в диспетчере устройств следующим образом:

Установка драйвера.

Первый этап позади, теперь необходимо установить IAR Embedded Workbench. Запускаем IAR и создаем новый проект. Для этого идем в Project->Create New Project. В появившемся окне выбираем следующее:

Создание нового проекта для MSP430.

В результате получаем пустой проект, в который уже включен файл main.c. Теперь мы можем переходить к написанию собственного кода. Давайте по традиции начнем с портов ввода-вывода. На отладочной плате есть пользовательская кнопка и парочка светодиодов – а точнее два, красный и зеленый. Давайте так – если кнопка нажата горит зеленый, иначе красный 🙂 Но перед тем как писать программу, посмотрим, какие же регистры отвечают в MSP430 за порты ввода-вывода. Итак, начинаем!

Регистр PxDIR.

Каждый бит этого регистра отвечает за режим работы соответствующего вывода микроконтроллера. Если в регистре бит равен 0, то ножка контроллера является входом, если бит равен 1 – выходом. Пусть, например, второй бит регистра P1DIR равен 1. Что это значит? А то, что вывод P1.1 работает в режиме выхода.

Регистр PxREN.

А этот регистр отвечает за включение/отключение подтяжки вверх/вниз. Тут больше и сказать то нечего.

Регистр PxOUT.

А вот здесь поинтереснее 🙂 Если вывод у нас работает в режиме выхода, то биты этого регистра отвечают за уровень сигнала на ножке контроллера. Пусть у нас P1.3 работает как выход. Если мы выставим четвертый бит регистра P1OUT в 1, то на выводе P1.3 появится сигнал высокого уровня (логическая единица), если 4-ый бит P1OUT равен 0, то и сигнал на ножке контроллера низкого уровня.

Другое дело, если пин работает как вход. В этом случае биты этого регистра отвечают за подтяжку вывода. Вот небольшой примерчик, чтобы сразу все стало понятно. Пусть P1.0 – вход. Если нулевой бит P1OUT = 1, то подтяжка вверх, если нулевой бит равен 0, подтяжка вниз. Все очень логично!

Регистр PxIN.

Тут все просто – биты этого регистра соответствуют уровню сигнала на соответствующих пинах микроконтроллера. На входе – 1, в регистре – 1, на входе 0, и в регистре – 0. Каждому выводу, например, порта 1 (P1.0, P1.1…) соответствует свой бит регистра P1IN.

Регистры PxSEL и PxSEL2 отвечают за альтернативные функции выводов при использовании какой-либо периферии микроконтроллера.

Кроме всего вышеперечисленного, каждый пин портов 1 и 2 может работать в режиме внешнего прерывания. То есть при изменении сигнала на каком-либо выводе программа ускачет на обработку прерывания. Но мы пока не будем на этом останавливаться, а перейдем уже наконец-то к написанию кода программы. Осталось лишь разобраться, что и как подключено на нашей отладочной плате:

Схема отладочной платы MSP430 LaunchPad.

Видим, что кнопка висит на ножке P1.3, а светодиоды на P1.0 и P1.6.

/***************************************************************************************/
#include "io430.h"


/***************************************************************************************/
int main( void )
{
	// Stop watchdog timer to prevent time out reset
	WDTCTL = WDTPW + WDTHOLD;

	// Выводы P1.0 и P1.6 работают в качестве выходов
	P1DIR = BIT6 | BIT0;
	
	// Обнуляем значение регистра P1OUT и все светодиодики гаснут
	P1OUT = 0x00;

	// Как видно из схемы кнопка у нас замыкает вывод на землю,
	// поэтому активируем для вывода P1.3 подтяжку вверх
	P1REN |= BIT3;
	P1OUT |= BIT3;

	while(1)
	{
		// Проверяем состояние кнопки
		if ((P1IN & BIT3) == 0)
		{
			// Зажигаем зеленый, гасим красный, если нажата
			P1OUT |= BIT6;
			P1OUT &= ~BIT0;
		}
		else
		{
			// Не нажата - гасим зеленый, зажигаем красный
			P1OUT |= BIT0;
			P1OUT &= ~BIT6;
		}
	}

	return 0;
}


/***************************************************************************************/

Осталось совсем немного – а именно настроить наш проект и отладчик. Идем в настройки проекта и выбираем наш контроллер:

Настройка проекта в IAR.

В этом же окне идем во вкладку Debugger и выбираем FET Debugger вместо Simulator. Теперь мы готовы прошивать контроллер!

Программирование MSP430.

В итоге при нажатии на кнопку мы должны увидеть горящий зеленый светодиод, а если кнопка не нажата, то горит красный. На этом, собственно, и все, с нашим первый проектом для MSP430 мы разобрались!

MSP430 — учебный курс. Часть 2

Итак, продолжим.

Сегодня мы разберём приведённую на прошлой паре… э-э-э, блин, привычка однако… программу.

Кто желает, может скачать новый IAR (текущая версия набора 5.20, среда разработки Embedded Workbench — 6-й версии), без необходимости заполнения анкеты как на сайте www.iar.com. Самый свежий. При этом, официально бесплатный, правда с ограничением в 4 Кб кода. Для наших уроков это не проблема — данного объёма вполне хватит.
Заходим по ссылке http://focus.ti.com/docs/toolsw/folders/print/iar-kickstart.html и жмём кнопку «Download».
Предупреждение! Размер скачиваемого архива значителен — около 200 Мб!

А пока я жду заказанного MSP430F249, оговорюсь — рассматриваем 149-й (вернее серию 1xx). Моделька помладше версией ядра, но по ногам они 1 к 1 и совместимы снизу вверх. Кстати, оба контроллера — старшие модели в своём классе.

Приведу текст программы ещё раз:


#include "msp430.h"                     ; подключаем заголовочный файл

        NAME    main                    ; имя модуля
        PUBLIC  main                    ; установить видимость модуля из других
                                        
; Определение констант
ArrLn   EQU     16                      ; длина массива

        ; Вектора прерываний
        RSEG    INTVEC
        ORG     RESET_VECTOR           ; вектор сброса
        DC16    init 

        RSEG    CSTACK                  ; объявление сегмента стека

        RSEG    CODE                    ; объявление сегмента кода

init:   
        MOV     #SFE(CSTACK), SP        ; инициализация регистра стека

main:                                   ; начало основной части
        MOV.W   #WDTPW+WDTHOLD,&WDTCTL  ; запрет сторожевого таймера
        
SortMain:
        ; Переписать из ПЗУ в ОЗУ массив данных
        mov     #ArrLn, R4              ; инициализируем счётчик количества данных
        mov     #RamArr, R5             ; установим R5 как указатель на данные в ОЗУ
        mov     #RomArr, R6             ; установим R6 как указатель на данные в ПЗУ
        
MoveRomToRam:
        mov     @R6+, 0(R5)             ; копирование слова
        add     #2, R5                  ; продвинем указатель
        dec     R4                      ; уменьшим счётчик
        jnz     MoveRomToRam            ; если не ноль, то повторим
   
BasicCycle:
        JMP $                           ; jump to current location '$'

        
;       определение данных в ОЗУ
        RSEG    DATA16_N
RamArr:
        DS16    ArrLn

;       определение данных в ПЗУ
        RSEG    DATA16_C
RomArr:
        DC16    101, 11, 25, 657, 567, 217, 5732, 896, 123, 5467, 12, 65, 2345, 23, 98, 2398


        END

Первые три строки — как и в прошлом уроке.

Следом определяем константу длины массива в элементах, чтобы потом пользоваться символьным именем вместо изменения конкретной цифры в куче мест. Да и удобнее сделать так, если вдруг прийдется поменять тип хранимых элементов. То же самое можно сделать как «#define ArrLn 16«, если вам стиль C больше по душе.


        ; Вектора прерываний
        RSEG    INTVEC
        ORG     RESET_VECTOR           ; вектор сброса
        DC16    init 

Здесь мы определяем таблицу векторов прерываний. Я предпочитаю делать именно так, а не как в заготовке проекта (первый пример на скриншоте из первого урока). «RSEG INTVEC» определяет сегмент векторов. Вторая строка — адрес вектора сброса. Здесь будьте внимательны — константа RESET_VECTOR (как и другие вектора) исчисляется от начала сегмента. Т.е., нельзя писать вторую строку без первой — компилятор вас не поймёт и разместит вектор по адресу 001Eh вместо положенных FFFEh. Адрес начала таблицы FFE0h и, соответственно, RESET_VECTOR от него в 30 байтах.
Т.к. разрядность контроллера 16 бит, то адреса тоже 16-ти разрядные, посему каждый вектор занимает 2 байта. А вот адресация памяти побайтная, а не пословная (как адресация памяти программ в AVR). Обратите внимание на это.
Как уже было сказано, в вектор помещается не команда перехода к обработчику, а непосредственно его адрес. Делается это третьей строкой «DC16 init«, что означает «разместить по текущему адресу 16-ти битную константу значения адреса, определённого меткой init». Данная метка располагается в начале кода программы и значение её адреса вычисляется на этапе связывания (линковки). Как заметили читатели, DC16 означает «Define Constant 16 bit», директива аналогична DW.
Вообще, рекомендую почитать заголовочные файлы. Расположены они в каталоге «C:\Program Files\IAR Systems\Embedded Workbench Evaluation 4.0\430\inc\». Номер версии может отличаться от моего, тогда нужно подправить путь. «msp430.h» не содержит ничего существенного, но ссылается на заловочные файлы для конкретных серий, например «msp430x14x.h», как у меня.

Далее объявление сегмента стека «RSEG CSTACK«. Стек располагается в конце ОЗУ и растёт вверх.
После него объявление сегмента кода программы «RSEG CODE«. С этого места и начинается наша программа. По умолчанию, сегмент кода начинается с начала ПЗУ, если нет сегментов данных в нём. Если есть — то после них.
Кстати, RSEG означает «перемещаемый сегмент» (relocatable).

Команда

MOV     #SFE(CSTACK), SP
заносит адрес стека в регистр-указатель. Директива SFE служит для вычисления адреса конца сегмента (любого).
Внимание, запоминаем раз и навсегда! Значок # служит для определения непосредственно значения выражения. В противном случае оно считается адресом памяти, откуда надо взять данные. Исключение — команды переходов типа jmp, в них подставляются выражения без диеза (в команде call диез нужен!). В следующей части рассмотрим режимы адресации подробнее.
Также запомните — порядок операндов прямой, т.е. «откуда в куда».

Следующая команда

MOV.W   #WDTPW+WDTHOLD,&WDTCTL
запрещает сторожевой таймер, записывая в его управляющий регистр предусмотренную для этого комбинацию бит.

Перед тем как рассматривать код дальше, обратим внимание на конец текста программы. Там располагаются определения данных в ОЗУ и ПЗУ.


       RSEG    DATA16_N
RamArr:
       DS16    ArrLn
Здесь определяются данные в ОЗУ. Директивой «RSEG DATA16_N» определяем сегмент неинициализируемых 16-ти разрядных данных для статических и глобальных переменных. По умолчанию располагаются в начале ОЗУ. Директивой «DS16 ArrLn» определяем массив 16-ти разрядных слов в количестве ArrLn. Метка RamArr нужна для обращения к этим данным с помощью символьного имени без необходимости указания абсолютного адреса (чтобы не высчитывать его вручную, да и менять состав данных так легче и меньше будет семантических ошибок).

        RSEG    DATA16_C
RomArr:
        DC16    101, 11, 25, 657, 567, 217, 5732, 896, 123, 5467, 12, 65, 2345, 23, 98, 2398
Здесь мы определяем данные в ПЗУ. Директивой «RSEG DATA16_С» определяем сегмент постоянных 16-ти разрядных данных. Обратите внимание на разницу в именых сегментов. По умолчанию располагаются в начале ПЗУ. Директивой «DC16 ArrLn» определяем массив 16-ти разрядных слов со значениями, указанными в перечислении следом. При компиляции эти значения будут занесены в ПЗУ. Ну и не забываем метку.

Вернемся к коду.


SortMain:
        mov     #ArrLn, R4        
        mov     #RamArr, R5             
        mov     #RomArr, R6             

Первым действием заносим константу в регистр R4, он будет счётчиком. Диез не забываем, иначе получим не то, что ожидали.
Вторая команда заносит значение адреса метки RamArr в R5, третья — значение адреса метки RomArr в R6.
Если не поставим диез, получим значения из ячеек памяти по этим адресам — можете поэкспериментировать.

Теперь перенесём данные из ПЗУ в ОЗУ.


MoveRomToRam:
        mov     @R6+, 0(R5)             
        add     #2, R5                  
        dec     R4                      
        jnz     MoveRomToRam            

Первая команда перемещает данные из ячейки памяти, адрес которой в R6 в ячейку, адрес которой равен «R5 + (смещение, равное нулю)«. Символ @ указывает на косвенную адресацию. При этом, содержимое R6 увеличивается на два, т.к. команда в таком виде обращается к словам, а не к байтам. К сожалению, нельзя написать «mov @R6+, @R5+» и даже «mov @R6+, @R5«, т.к. это не поддерживается. Поэтому следующей командой мы вручную увеличиваем содержимое R5 на 2. После чего декрементируем счётчик и последней командой проверяем его на равенство нулю. Если не равен нулю, то идем опять за следующим значением, т.е. по метке MoveRomToRam. Если равен — выходим на следующую команду.

Последней командой

jmp $
зацикливаем код ($ — ссылка на счётчик команд, т.е. на текущее положение), дабы не улететь в сияющие чистотой дали пустого FLASH’а.

На следующей… паре, мы рассмотрим режимы адресации и структуру памяти, а пока вам для затравки полная версия программы сортировки.
Ну а я поехал кататься на свежекупленном Т-34-85 :-), бо глаза от буковок разбегаются, а мозг требует засадить бронебойным кому-нибудь в боеукладку. До завтра!


#include "msp430.h"                     ; #define controlled include file

        NAME    main                    ; module name

        PUBLIC  main                    ; make the main label vissible
                                        ; outside this module
; Constant definition
ArrLn	EQU	16



	ORG     0FFFEh
        DC16    init                    ; set reset vector to 'init' label

        RSEG    CSTACK                  ; pre-declaration of segment
        RSEG    CODE                    ; place program in 'CODE' segment

init:   MOV     #SFE(CSTACK), SP        ; set up stack

main:                                   ; main program
        MOV.W   #WDTPW+WDTHOLD,&WDTCTL  ; Stop watchdog timer
        
SortMain:
        ; Переписать из ПЗУ в ОЗУ массив данных
        mov	#16, R4
	mov	#RamArr, R5
	mov	#RomArr, R6
	
MoveRomToRam:
	mov	@R6+, 0(R5)
	add	#2, R5
	dec	R4
	jnz	MoveRomToRam
        
SortingInit:
	mov	#(ArrLn-1), R4
	mov	#RamArr, R6
Sorting:
	mov	R4, R5
	mov	R6, R7
Sort1:
	add	#2, R7
	cmp	0(R6), 0(R7)
	jge	Sort1NonSwap
	mov	0(R6), R8
	mov	0(R7), 0(R6)
	mov	R8, 0(R7)
Sort1NonSwap:
	dec	R5
	jnz	Sort1
	add	#2, R6
	dec	R4
	jnz	Sorting
	
	
	
BasicCycle:
	JMP $                           ; jump to current location '$'

	
;	RAM definition
	RSEG	DATA16_N
RamArr:
	DS16	ArrLn

;	ROM definition
	RSEG	DATA16_C
RomArr:
	DC16	101, 11, 25, 657, 567, 217, 5732, 896, 123, 5467, 12, 65, 2345, 23, 98, 2398


        END

90000 MSP430 Programming & development tools. (CDK4MSP) 90001 MSP430 Programming & development tools. (CDK4MSP) 90002 CDK4MSP stands for Cross Development Kit for the Texas Instruments MSP430 MCUs and should you support with a comprehensive Assembler and C development environment for even this processor familie under Linux or similar host systems. It will present only free of fee tools, so you can use it without any risks. Further you will find some useful OS projects and related sample code all arround MSP430 inside of the example packages.90003 90002 CDK4MSP collects all programms and development tools in one directory (90005 / opt / cdk4msp 90006) and will try to present an easy to admin installation. My intention for CDK4MSP is / was to provide a full featurd tool chain distribution of all the free accessible resources, because often the most stuff is hidden or scattered to the wide of the whole Internet and only compilable and translatable by wizards or professions. 90003 90002 Basically CDK4MSP is based on the GCC toolchain for the Texas Intruments MSP430 MCUs maintained by Dimitry Diky and Chris Lichti at Sourceforge (Http: // mspgcc.sourceforge.net/). Til now MSPGCC supports Win32 developer systems as best as possible. There is no really good Linux support. So, CDK4MSP tries out to close this gap. 90003 90010 OTHER CDKs 90011 90012 90010 NOTES & WARNINGS 90011 90012 90002 The most packages are untested. Some few packages will be unstable or developer snapshot code. So I’m looking for (beta) test users. Please tell me your experience with CDK4MSP. Further I try to be up to date with all the package versions, but CDK4MSP is a leisure-time project and so I think my update cycle will be 5 or 7 months, sorry 🙁 90003 90002 The base package 90005 cdk-msp-base 90006 will work only at Red Hat based distributions (Red Hat, Mandrake, and I believe SuSe).For other distributions you have to ensure the linked scripts cdk4msp.sh and cdk4msp.csh in /etc/profile.d are involved in your user environment build process at login time. 90003 90010 PROJECT LINKS 90011 90012 90010 INSTALL 90011 90012 90002 Each package will be provided as RPM only. It is not necessary to install all packages, but you have to install the base package 90005 cdk-msp-base 90006 every time you want to use another package. Here is an example for a typical GNU development environment: 90003 90032 [User @ host] $ rpm -hiv cdk-msp-base-0.2-20031111.i386.rpm [User @ host] $ rpm -hiv cdk-msp-binutils-2.14-20031106.i386.rpm [User @ host] $ rpm -hiv cdk-msp-gcc-3.3.2-20031106.i386.rpm [User @ host] $ rpm -hiv cdk-msp-gcc-colorgcc-3.3.2-20031106.i386.rpm [User @ host] $ rpm -hiv cdk-msp-libc-3.1-20031023.noarch.rpm [User @ host] $ rpm -hiv cdk-msp-insight-5.1.1-20031023.i386.rpm [User @ host] $ rpm -hiv cdk-msp-jtag-lib-20031101cvs-20031102.i386.rpm [User @ host] $ rpm -hiv cdk-msp-insight-proxy-5.1.1-20031102.i386.rpm 90033 90002 Currently you will found all released files at SourceForge.Net 90003 90002 90003 90010 PACKAGES 90011 90012 90041 90042 90043 90044 0. Base System (you need it): 90045 90046 90047 90048 90049 90046 90051 0.1 90046 90053 cdk-msp-base 90046 90053 Base package — is needed every time you will use any CDK4MSP package. 90046 90047 90042 90043 90044 1.Assembler, Disassembler, Object File Operator: 90045 90046 90047 90064 90049 90046 90051 1.1 90046 90053 cdk-msp-binutils 90046 90053 Binutils is a collection of binary utilities, including: 90072 90073 msp430-ar: creating modifying and extracting from archives 90074 90073 msp430-as: a family of GNU assemblers 90074 90073 msp430-ld: the GNU linker 90074 90073 msp430-nm: for listing symbols from object files 90074 90073 msp430-objcopy: for copying and translating object files 90074 90073 msp430-objdump: for displaying information from object files 90074 90073 msp430-ranlib: for generating an index for the contents of an archive 90074 90073 msp430-size: for listing the section sizes of an object or archive file 90074 90073 msp430-strings: for listing printable strings from files 90074 90073 msp430-strip: for discarding symbols 90074 90073 msp430-addr2line: for converting addresses to file and line 90074 90073 msp430-readelf: for displaying information about ELF files 90074 90097 Supported processors: 90072 90073 msp430x110 msp430x112 90074 90073 msp430x1101 msp430x1111 90074 90073 msp430x1121 msp430x1122 msp430x1132 90074 90073 msp430x122 msp430x123 90074 90073 msp430x133 msp430x135 90074 90073 msp430x1331 msp430x1351 90074 90073 msp430x147 msp430x148 msp430x149 90074 90073 msp430x155 msp430x156 msp430x157 90074 90073 msp430x167 msp430x168 msp430x169 90074 90073 msp430x311 msp430x312 msp430x313 msp430x314 msp430x315 90074 90073 msp430x323 msp430x325 90074 90073 msp430x336 msp430x337 90074 90073 msp430x412 msp430x413 90074 90073 msp430x435 msp430x436 msp430x437 90074 90073 msp430x447 msp430x448 msp430x449 90074 90097 Install binutils if you need to perform any of these types of actions on MSP430 assembler source files or binary files.Most programmers will want to install binutils. 90012 Development is part of MSPGCC project. For more informartion see: http://mspgcc.sourceforge.net 90046 90047 90042 90043 90044 2. Compiler, Interpreter: 90045 90046 90047 90064 90049 90046 90051 2.1 90046 90053 cdk-msp-gcc 90046 90053 A compiler aimed at integrating all the optimizations and features necessary for a high-performance and stable MSP430 development environment.You’ll need this package in order to compile C code. It includes: 90072 90073 msp430-gcc: GNU project C compiler 90074 90073 msp430-cpp: GNU C compatible compiler preprocessor 90074 90097 Supported processor variants: 90072 90073 see package 90005 cdk-msp-binutils 90006 90074 90073 msp430x1222 msp430x1232 90074 90073 msp430x1471 msp430x1481 msp430x1491 90074 90073 msp430x167 msp430x168 msp430x169 msp430x1610 msp430x1611 90074 90073 msp430xE423 msp430xE425 msp430xE427 90074 90073 msp430xW423 msp430xW425 msp430xW427 90074 90097 Install gcc if you need to perform any of these types of actions on MSP430 C source files.Most programmers will want to install gcc. 90012 Development is part of MSPGCC project. For more informartion see: http://mspgcc.sourceforge.net 90046 90047 90042 90043 90044 3. Debugger, Simulator, Emulator: 90045 90046 90047 90064 90049 90046 90051 3.1 90046 90053 cdk-msp-gdb 90046 90053 GDB, the GNU debugger, allows you to debug programs written in C, C ++, and other languages, by executing them in a controlled fashion and printing their data.In the case of MSP430 processores you can use a integrated simulator to run programs. This collection includes: 90072 90073 msp430-gdb: GNU debugger for MSP430 microcontrollers 90074 90073 msp430-run: simulator for MSP430 microcontrollers 90074 90073 msp430-gdbproxy: remote proxy program for the GNU debugger (You will need it for JTAG access) 90074 90097 Supported targets: 90072 90073 simulator 90074 90073 remote gdb server 90074 90097 Install gdb if you need to perform any of these types of actions on MSP430 binary files.Most programmers will want to install gdb. 90012 Development is part of MSPGCC project. For more informartion see: http://mspgcc.sourceforge.net 90046 90047 90064 90049 90046 90051 3.2 90046 90053 cdk-msp-insight 90046 90053 Insight is a graphical user interface to GDB, the GNU Debugger written in Tcl / Tk by people working at Red Hat, Inc. and Cygnus Solutions. This package includes the GDB binary too.So it is not a GDB extension. You have to decide between simple GDB (90005 cdk-msp-gdb 90006) and Insight, the graphical GDB. 90046 90047 90042 90043 90044 4. Libraries, Operating Systems: 90045 90046 90047 90064 90049 90046 90051 4.1 90046 90053 cdk-msp-libc 90046 90053 The MSP430 Libc package provides a subset of the standard C library for TIs MSP430 microcontrollers. In addition, the library provides the basic startup code needed by most applications.It includes: 90072 90073 standard C library 90074 90073 SFR read and write access 90074 90073 I / O definitions and access macros 90074 90073 bit-field access to ports 90074 90073 MSP430 interrupt and signal handling 90074 90073 Functions for long jumps 90074 90073 String manipulation functions 90074 90073 Error handling 90074 90073 size / speed optimized FP library (ieee-754 32-bit complaint) 90074 90097 Install MSP430 Libc if you need to perform any of these types of actions on MSP430 C source files.Most programmers will want to install Libc. 90012 Development is part of MSPGCC project. For more informartion see: http://mspgcc.sourceforge.net 90046 90047 90042 90043 90044 5. In System Programming (ISP): 90045 90046 90047 90064 90049 90046 90051 5.1 90046 90053 cdk-msp-isp 90046 90053 This is the base package. It includes some important python modules needed by some other isp tools.90046 90047 90064 90049 90046 90051 5.2 90046 90053 cdk-msp-isp-bsl 90046 90053 BootStrapLoader software for the flash devices MSP430F1xx (maybe F4xx too, but its not tested). Based on the example provided by TI but with more features. It includes: Install bsl (alias pybsl) if you need to perform any of these types of actions at your MSP430 (eva) board. Most programmers will want to install bsl.90012 Development is part of MSPGCC project. For more informartion see: http://mspgcc.sourceforge.net 90046 90047 90064 90049 90046 90051 5.3 90046 90053 cdk-msp-isp-parjtag 90046 90053 Software to talk to the parallel port JTAG PCB. This software uses the JTAG hardware that comes with the FET kits. It is connected to the parallel port. It includes: Install parjtag (alias pyjtag) if you need to perform any of these types of actions at your MSP430 (eva) board.Most programmers will want to install parjtag. 90012 Development is part of MSPGCC project. For more informartion see: http://mspgcc.sourceforge.net 90046 90047 90064 90049 90046 90051 5.4 90046 90053 cdk-msp-isp-serjtag 90046 90053 Software to talk to the Serial-JTAG box. The MSP430 SerialJTAG hardware is needed. The schmatics are available on http://mspgcc.sourceforge.net or see into doc / isp / serjtag.This programm can be used to communicate between the PC and that box. It includes: Install serjtag (alias pyserjtag) if you need to perform any of these types of actions at your MSP430 (eva) board. Only some programmers will want to install serjtag. 90012 Development is part of MSPGCC project. For more informartion see: http://mspgcc.sourceforge.net 90046 90047 90064 90302 90046 90051 5.5 90046 90053 cdk-msp-jtag 90046 90053 P L A N N E D 90002 JTAG Tools is a software package which enables working with JTAG-aware (IEEE 1149.1) hardware devices (parts) and boards through JTAG adapter. This package has open and modular architecture with ability to writing miscellanous extensions (like board testers, flash memory programmers, and so on). 90044 Warning: 90045 This software may damage your hardware! 90003 90002 Supported JTAG adapters / cables: 90003 90072 90073 90044 ARCOM 90045 Arcom JTAG Cable 90074 90073 90044 ByteBlaster 90045 Altera ByteBlaster, ByteBlaster II, ByteBlasterMV Parallel Port Cable 90074 90073 90044 DLC5 90045 Xilinx DLC5 JTAG Parallel Cable III 90074 90073 90044 EA253 90045 ETC EA253 JTAG Cable 90074 90073 90044 EI012 90045 ETC EI012 JTAG Cable 90074 90073 90044 KeithKoep 90045 Keith & Koep JTAG cable 90074 90073 90044 MPCBDM 90045 Mpcbdm JTAG cable 90074 90073 90044 WIGGLER 90045 Macraigor Wiggler JTAG Cable 90074 90097 90012 For more informartion see: http: // openwince.sourceforge.net/jtag/ 90046 90047 90042 90043 90044 6. Misc: 90045 90046 90047 90064 90049 90046 90051 6.1 90046 90053 cdk-msp-jtag-lib 90046 90053 Parallel Port JTAG Interface — the MSP430mspgcc library. The Python extension using it and the hardware access library HIL. It includes: 90072 90073 90044 funclets: 90045 Helper programs that are downloaded to the target.90074 90073 90044 hardware access: 90045 The hardware layer is encapsulated in the HIL library. 90074 90073 90044 msp430: 90045 The MSP430mspgcc library communicates trough the JTAG with an attached MSP430 processor. It has support to read and write memory, erase and write Flash. 90074 90073 90044 python: 90045 Python extension for use with parjtag (alias pyjtag). 90074 90097 This package will not needed to build any MSP430 target binaries, but you may need it to make JTAG accesses through 90005 msp430-gdbproxy 90006 or 90005 msp430-parjtag 90006.90012 Development is part of MSPGCC project. For more informartion see: http://mspgcc.sourceforge.net 90046 90047 90042 90043 90044 7. Examples, Tutorials: 90045 90046 90047 90048 90049 90046 90051 7.1 90046 90053 cdk-msp-examples-libc 90046 90053 This is a collection of MSP430 Libc examples: 90072 90073 free TCP / IP stack by Andreas Dannenberg with web-server integration named «easyWEB» 90074 90073 flash access and random generator 90074 90073 Reed-Solomon code for IR control devices 90074 90097 Install this examples if you need to study these informations.90046 90047 90048 90049 90046 90051 7.2 90046 90053 cdk-msp-examples-mspgcc 90046 90053 This is a collection of MSP430 examples from MSPGCC web-site: 90072 90073 bufferedUSART — MSP430 USART features receive and transmit buffers 90074 90073 char_lcd — how to use a character LCD 90074 90073 gfx_lcd —how to use a graphical LCD with T6963 90074 90073 leds — accesses the ports of the MSP 90074 90073 pc_keyboard — capturing keys from a standard at keyboard 90074 90073 tasker — implementation of a cooperative mutlitasker 90074 90073 timerA_uart —Timer_A uart, full duplex 90074 90073 uart_test — simple hardware UART test program 90074 90073 video — TVPong and TVTetris 90074 90097 Install this examples if you need to study these informations.90046 90047 90048 90043 90046 90047 90042 90043 90044 Meaning of colors: 90045 90046 90047 90064 90049 90046 90458 green 90046 90460 90072 90073 projects with most significant development work 90074 90073 in about all cases there are more than one core developer 90074 90097 90046 90047 90064 90470 90046 90472 yellow 90046 90460 90072 90073 projects with sporadical release flow 90074 90073 about each project will be maintained by only one programmer 90074 90097 90046 90047 90064 90302 90046 90486 red 90046 90460 90072 90073 obsoleted and / or non continued projects 90074 90073 initiators, authors, and core developer undiscoverable or without furthermore development work 90074 90097 90046 90047 90497 90012 contact .90000 embedded — Is there an emulator of MSP430 chip that works without the actual chip and integrates with Code Composer Studio? 90001 Stack Overflow 90002 90003 Products 90004 90003 Customers 90004 90003 Use cases 90004 90009 90010 90003 Stack Overflow Public questions and answers 90004 90003 Teams Private questions and answers for your team 90004 90003 Enterprise Private self-hosted questions and answers for your enterprise 90004 90003 Jobs Programming and related technical career opportunities 90004 90003 Talent Hire technical talent 90004 90003 Advertising Reach developers worldwide 90004 90009 90024 Loading … 90025 90002 90003 90004 90003 Log in 90004 90009.90000 MSP430 90001 90002 The MSP430 microcontrollers are Ultra-Low-Power mixed signal, 16-Bit RISC Core devices. 90003 90004 MSP430 is a family of microcontrollers designed and manufactured by Texas Instruments. The main focus in the MSP430 devices is the ultra-low-power consumption. There is a huge portfolio of these 16-bit RISC core devices (different peripherals, memory organization, power, temperature ranges, etc.). 90005 90004 MSP430 devices can run up to 25Mhz and the active power consumption of the most capable MSP430 chip is less than 500μA per MHz — that can be lowered even less if you disable the perihperals that you do not use or if you set up the different sleep modes. This makes them perfect for portable and hand-held devices. 90005 90008 90002 PLUSES: 90003 90011 90012 90013 Very low power consumption: between 40 μA / MHz and 400 μA / MHz (depending on the exact chip) 90014 90013 Mature and popular product with very clean architecture — the code porting between different members of the MSP430 family needs almost no re-touch 90014 90013 Very good range of peripherals: precise ADC and DACs, comparators, OAMPs on chip, LCD drivers, SPI, I2C, UART, DMA 90014 90013 Very good documentation, with lots of application notes and code examples available 90014 90013 Big portfolio of products — you may chose the one that fits your application without anything extra 90014 90013 Available in any quantity through TI distributors 90014 90025 90008 MINUSES: 90011 90012 90013 Von Neuman architecture, instructions take from 1 to 4 bytes, and are performed in 1 to 6 clocks.90014 90013 Not suitable for applications that would require heavy processing power 90014 90025 90004 The new members MSP430X have extended instruction set and allow more than 64KB memory addressing. 90005 90004 The information above apples only for MSP430 devices; it does not apply to other MSP43x devices (like MSP432) that use ARM Cortex architecture. 90005 90038 MSP430 development with completely free compiler and IDE setup with MSPGCC + Eclipse 90039 .

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *