Привет всем!
В предыдущих уроках мы познакомились с платой разработчика семейства 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

С этого момента вашими настольными книгами должны стать:
- Справочный лист данных: http://www.ti.com/lit/ds/symlink/cc430f5137.pdf
- Руководство пользователя: http://www.ti.com/lit/ug/slau259e/slau259e.pdf
Обратившись к справочной документации на микроконтроллер 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 в качестве программатора-отладчика

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