MSP430 UART и таймер прерывает
У меня msp430 семейство mcu (на самом деле msp430g2553 на плате панели запуска). Я написал драйвер UART, и он работает. Но после того, как я добавил драйвер таймера, я обнаружил некоторые проблемы: UART перестает работать после первого прерывания таймера. Нужно ли восстанавливать некоторые флаги в обработчике прерывания по таймеру?
interrupt(TIMER0_A0_VECTOR) enablenested timer0_isr() {
P1OUT ^= BIT6;
}
void timer_init(void) {
int i;
TACTL = TASSEL_2 + ID_3 + MC_1 + TAIE;
TA0CCR0 = 0xffff;
TACCTL0 = CM_0 + CCIE;
}
1 ответ
Поскольку вы просто отсчитываете от 0 до 0xFFFF, вам на самом деле не нужно находиться в "режиме вверх" (MC_1), где вы рассчитываете значение в регистре TA0CCR0, вы можете находиться в "непрерывном режиме" (MC_2), который автоматически считает от 0 до 0xFFFF и устранит необходимость в любых регистрах TA0CCRX, если я правильно помню.
В противном случае вы должны привыкнуть говорить: TACTL = TACLR; (который очищает этот регистр), прежде чем устанавливать какие-либо значения в нем, возможно, это могло бы помочь.