MSP430, учимся программировать и отлаживать железо (часть 3)
Возможно Вы уже не первый раз садитесь за программирование Вашего MSP430. Если это не так, то рекомендую ознакомиться с предыдущими статьями по данной тематике: часть 1, часть 2.
В этой статье мы рассмотрим инструмент для графической настройки периферии нашего микроконтроллера — Grace, познакомимся с принципом работы watchdog и поработаем с виртуальным COM-портом (через программатор). Уже традиционно будет рассмотрен небольшой пример кода, и предоставлены все необходимые для понимания ссылки.
Каждый раз, когда приходится настраивать очередной периферийный модуль 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, но обо всём по порядку.
while (!(IFG2&UCA0TXIFG)); // Проверка готовности буфера отправки.
UCA0TXBUF = str[i];
}
}
Для работы с COM-портом со стороны компьютера нам потребуется программное обеспечение, мой выбор пал на COM Port Toolkit. Что именно выберите Вы — не имеет значения.
Небольшое видео, которое позволит понять что именно делает пример.
В отличии от предыдущих статей, я постарался дать внятные комментарии прямо в коде программы. Не вижу смысла в этот раз пояснять каждый использованный в коде регистр. Хочу лишь обратить внимание на некоторые аспекты.
Для расчёта значений UCA0BR0, UCA0BR1 и UCA0MCTL существует неплохой онлайн калькулятор.
SMCLK — сигнал, который поступает из внешнего резонатора (если установлен) или из DCO с применением делителей 1, 2, 4 или 8. Используется как тактовый сигнал для периферии.
В примере, watchdog используется не совсем по назначению, данный код лишь объясняет принцип его работы. Смысл заключается в том, что если Ваша программа в течении 32ms (WDT_MRST_32) не установит бит WDTCNTCL в регистре WDTCTL в единицу, то система будет перезагружена. Watchdog требуется для предотвращения зависания Вашего программного обеспечения.
Регистр WDTCTL имеет 16 бит, первые 8 необходимо устанавливать в WDTPW каждый раз когда производится запись в него. Это механизм защиты регистра от случайной записи в случае программных сбоев.
Описание и настройка Basic Clock System это повод для целой статьи, пока следует понять, что MSP430 имеет очень гибкую систему тактовых генераторов, которую, в упрощенном виде, можно настроить с помощью Grace.
Использование такого метода отладки сильно замедляет работу программы в целом, однако это позволяет достоверно определить порядок выполнения кода, в том числе в обработчиках прерываний.
Заключение
Чем дольше я пишу, тем сложнее и больше становится материал. Эта статья станет предпоследней в серии для новичков.
В следующий раз я затрону все вопросы, на которые не успел ответить ранее.
Я надеюсь, что эта статья оказалась полезна тебе, читатель.