Привет всем!

В предыдущих уроках мы познакомились с платой разработчика семейства TiTAN на базе MSP430 и двумя средами разработки от компании Texas Instruments. Надеемся вы выбрали наиболее удобную для вас.

Итак, мы научились конфигурировать выводы микроконтроллера для управления светодиодом, научились его включать и выключать.

Предлагаем вам самостоятельно изучить простую работу с кнопкой на нашем примере «Simple button» по ссылке  http://titan-roject.com/wp-content/uploads/2020/01/TiTAN_example_02_simply_button.zip

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

Подробное изучение микроконтроллера с ядром MSP430

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

В этом уроке мы рассмотрим сразу два примера, в которых мы изучим простое управление состоянием светодиода по прерыванию от таймера и управление яркостью свечения светодиодов при помощи таймера в режиме ШИМ (PWM).

Примеры, которые нам понадобятся располагаются по ссылке https://titan-project.com/wpcontent/uploads/2020/01/TiTAN_example_03_timer_led_blink.zip и https://titan-project.com/wpcontent/uploads/2020/01/TiTAN_example_04_PWM_leds.zip  

С этого момента вашими настольными книгами должны стать:

Обратившись к справочной документации на микроконтроллер CC430F5137 найдем, что в нашем распоряжении есть два 16-ти битных таймера.

Мы выбираем ТА1 для примера.

В руководстве пользователя на странице 398 вы можете ознакомиться со строением таймера и регистрами его конфигурирования.

Не стоит пугаться такого большого количества регистров! На самом деле их не много. На странице 411 руководства пользователя они все перечислены.

Отбросьте лень и внимательно прочитайте этот раздел. Постепенно вы поймете их назначение и сможете легко настроить нужный вам режим работы.

На странице 409 описан механизм прерывания по событиям таймера.

И так, приступим.

Сначала мы устанавливаем возможность прерывания по событиям таймера

Далее установим предел счета равный 500 миллисекундам для таймера 

Настроим таймер таким образом, чтоб он работал от источника тактирования 32768 Гц (ACLK = TASSEL_1), считал до значения, записанного в регистр TA1CCR0 (MC_1) и очистим (TACLR) текущее значение регистра счета (TA0R) самого таймера.

Почти все готово.

Остается создать сам обработчик прерывания, в котором мы будем включать и выключать светодиод.

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

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

Все готово!

Собираем наш проект и запускаем.

Не сложно? Тогда продолжим.

Режим работы ШИМ

Во втором примере (в котором мы изучим режим работы ШИМ) нам необходимо подключить четыре светодиода. Именно на них мы и изучим способ управления яркостью.

Если вы еще не знаете, что такое ШИМ (PWM), то можете ознакомиться с принципом который хорошо демонстрирует Андрей Кулагин по этой ссылке: https://www.youtube.com/watch?v=qvKFTU7SNj8

И снова нам потребуется обратиться к справочной документации компании Texas Instruments. Нас интересуют сигналы выхода таймера TA0, которые имеют общее название CCRxA. Вот они.

Как должно быть понятно из написания, порты P3.2 … P3.5 имеют вторую функцию как выходы таймера. Но есть один маленький момент – нам не удобно использовать именно эти порты. Причин для этого может быть много (уже используются для других целей, мешает топология платы, просто скучно и т.д.). 

Что же делать? Вспомним, что при знакомстве с платами семейства TiTAN мы говорили о механизме переназначения портов (remapping). Давайте его применим.

Для этого мы выбираем интересующие нас порты P2.0 … P2.3 и всего пятью строками кода переназначим порты так как мы выбрали.

Первой командой мы вводим «пароль» для смены назначения портов, и каждому порту назначаем его новую функцию, которую раньше он не имел. И последней строкой мы сохраняем настройки. 

Легко, правда?

Теперь настроим таймер.

В регистр TA0CCR0 мы зададим период общего счета таймера (это определит частоту ШИМ). В регистрах TA0CCTLx укажем, что нас интересует режим ШИМ с переключением

И в регистры TACCRx зададим ширину формируемых импульсов по каждому каналу.

И в конце настроим источник тактирования таймера и настроим порты в режим выхода.

Вот и все! Собираем наш проект и запускаем.

Вот что у нас получилось

Аналогичный результат мы продемонстрируем с использованием платы TiTAN-I и платы TiTAN в качестве программатора-отладчика

Поздравляем! Вы освоили основные функции таймера и научились использовать прерывания.

Предлагаем вам самостоятельно объединить эти два примера в один и проанализировать получившийся результат.