Будьте добры, помогите разобраться с возникшей проблемой:

Есть MSP430F149, к которому по I2C (программному) подключен индикатор TIC85 (аналог TIC32). В устройстве задействовано много (по крайней мере для меня, учитывая что это всего второй проект) периферийных модулей (АЦП,I2C,2xSPI,1-wire,UART итд). По отдельности всё это отлажено и работает как положено. Но при сборе в единую программу обнаружился вот какой глюк: через некоторое время (скорее всего произвольное, но не более минуты) после включения питания индикатор гаснет. При этом контроллер остаётся полностью работоспособным.

Сначала долгое время думал, что дело в индикаторе (неправильная инициализация, аппаратные проблемы итд итп.), что я сам где-то ошибочно выдаю команду отключения. Но ничего найти не удалось. Потом начал поочерёдно выкидывать блоки из программы и обнаружил, что проблема появляется тогда, когда я активирую прерывания от TimerB (собственно говоря, в конце концов в исходнике остался только вывод на индикатор и таймерsmile.gif). На всех ногах индикатора, подключенных к контроллеру вместо сигналов наблюдается постоянные 0.8В - похоже, что от этого он и отключается. Повторная инициализация индикатора (и настройка ног) позволяет запустить его опять на некоторое время, но это не выход из ситуации (сильное мерцание).

Функция этого таймера у меня - системные часы, тактируется от часового кварца, тикает постояно с интервалом в 0.1 секунду. Настраиваю вот так:
Код
void clock_init(void)
{
  TBCTL = TBSSEL_1 + MC_1;
  TBCCR0 = 3277;  // 0.1 s
  TBCCTL0 = CCIE;
}


а обрабатываю прерывание вот так: (это уже урезанный вариант smile.gif)
Код
#pragma vector = TIMERB0_VECTOR // 0.1 s system timer
__interrupt void timerB0_ISR(void)
{
  _NOP();
  _NOP();
  _NOP();
  TBCCTL1 &= ~CCIFG;
}


И теперь самое главное: индикатор как назло подключён к выводам, которые мультиплексированы с TBx (А TBoutH висит в воздухе). На ti.com нашёл bug report: TB3 - TimerB ports are switched to tristate independent of selected function (Port or TBx). Вот и думаю - это я с таймером где-нибудь сглупил или нарвался на эту ошибку и придётся переделывать плату...

Может, кто-нибудь сталкивался с подобным; подтвердите или опровергните мои предположения, plz...