Несколько моментов Где глобальное разрешение прерываний? Всмысле точно после этих инитов, или вдруг до?
ACLK включен?
А зачем TBCLR+ID_2?
TBCLR Bit 2 Timer_B clear. Setting this bit resets TBR, the clock divider, and the count
direction. The TBCLR bit is automatically reset and is always read as zero.
Флаги прерываний стОит чистить (если это действительно нужно, в чем в данном случае я сомневаюсь) когда прерывание запрещено.
А Capture/Compare Вы используете?
ЗЫ. Знак "+" в отличие от "|" может приводить к ошибке в случае повторного включения маски в выражении,
т.е. TBCTL = TBCLR + TBSSEL_1 + TBCLR; и TBCTL = TBCLR | TBSSEL_1 | TBCLR; приведут к разным результатам. Оно не критично, но иногда на этом можно попотеть.
ЗЗЫ. Я бы намалевал как-нибудь так (
void TimerB_Set(unsigned short UpValue){
TBCTL = TBSSEL_1 | MC_0; /* off */
TBR = 0; /* TBCTL |= TBCLR; */
TBCCR0 = UpValue;
TBCTL = TBSSEL_1 | MC_1 | ID_2; /* ACLK, UP timer mode, int enable, /4 */
}
#define TIMERB_IE() do{TBCCTL0 = CCIE;}while(0) /* TBCCR0 interrupt enabled */
...
TimerB_Set(ACLK_FREQ_HZ);
TIMERB_IE();