MSP430GXXXX timerA UART v1.1

В процессе использования своего софтового UART'a для MSP430 я обнаружил в нем баг — огромное время переключения с приема на передачу. Это было вызвано непродуманной инициализацией регистра совпадения таймера в функции UART_SetTxMode(). В версии 1.1 это поправлено.

Кроме того, добавлена функция UART_DefaultTimerConfig(), выполняющая настройку тактирования таймера для его использования с UART'ом. Внимание — параметры конденсатора кварца выставляются для того экземпляра, который идет с LaunchPad'ом.

В аттаче лежит демонстрационный проект для IAR.
  • +2
  • 24 июля 2011, 17:16
  • _YS_
  • 1
Файлы в топике: TA_UART11.zip

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

RSS свернуть / развернуть
С удовольствием поэкспериментирую с вашим модулем. Версию 1.0 я правда пропустил.
Кстати, а нет чего-то подобного для GPIO? Понимаю что вопрос глупый, но как-то пробовал писать при помощи таких вот библиотечных функций на Cortex — оказалось очень удобно.
0
Версию 1.0 я правда пропустил.

Первая версия (и полное описание функций, хотя, модуль сам по себе обильно прокомментирован) лежит тут.

Кстати, а нет чего-то подобного для GPIO?

У меня — нету, не писал. Вообще говоря, то, что выложено выше, не есть API — это именно софтовая реализация UART'а с использованием блока таймера A. Я написал ее потому, что в MSP430G2231 UART'а нет, а в LaunchPad'е он разведен, вот я и поправил несоответствие. :-)
0
TACCR1=(TACCR1+UART_BITTIME_NORMAL) % 0xFFFF;
Замените остаток от деления на битовое И:
TACCR1=(TACCR1+UART_BITTIME_NORMAL) & 0xFFFF;
IAR, позор на его седую голову, недодумывается до этого самостоятельно (это вам не GCC) и честно генерирует вызов функции DivMod16u.
0
Хм, &0xffff эквивалентно %0x10000
0
Точно. Но в данном случае нужно именно TACCR1=(TACCR1+UART_BITTIME_NORMAL) & 0xFFFF;
А можно и просто TACCR1=TACCR1+UART_BITTIME_NORMAL;
TACCR1 — 16-ти разрядный, будет проворачиваться через ноль периодически и всё.
0
Да я вообще подумываю о том, чтобы переписать внутренние обработчики на асме. Но лень. :-) Ведь и так работает. :-)
0
Смысла в этом нет. Си-шный код чуть причесать и всё хорошо будет.
0
Таки да, IAR неплохо оптимизирует.

Но меня напрягает то, что я не знаю, сколько тактов они выполняются, и потому не могу сказать, на какой минимальной частоте проца это будет работать.
0
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.