ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Суббота
27 апреля
166711 Топик полностью
Vit (16.09.2009 12:16, просмотров: 100) ответил Stalko на С MSP430 работал мало... вероятно, где-то туплю... Пускаю таймер А от SMCLK, все идет на ура... после этого надо пустить тамер B от ACLK... тут происходит "затык"... стоит однажды контроллеру (F147) войти в прерывание таймера B, как все уходит в полный
Несколько моментов Где глобальное разрешение прерываний? Всмысле точно после этих инитов, или вдруг до? 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();