2014-11-30 6 views
1

У меня есть msp430 семейство mcu (на самом деле msp430g2553 на панели стартовой панели). Я написал драйвер uart, и он работает. Но после добавления драйвера таймера я обнаружил некоторые проблемы: uart перестает работать после первого тайм-прерывания. Нужно ли мне восстанавливать некоторые флаги в обработчике прерываний таймера?msp430 прерывания 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

Чтобы узнать, застряла ли микросхема в ISR, попробуйте добавить мигающий светодиод в основную программу (или даже в UART ISR). Смешно простая идея, я знаю, но иногда это может быть проблемой. – Jubatian

ответ

1

Поскольку вы просто считая от 0 до 0xFFFF, вы на самом деле не нужно быть в «вверх режиме» (MC_1), где вы рассчитывать на значение в регистре TA0CCR0, вы могли бы быть «непрерывным mode "(MC_2), который автоматически подсчитывается от 0 до 0xFFFF и удаляет необходимость в любых регистрах TA0CCRX, если я правильно помню.

В противном случае вы должны привыкнуть говорить TACTL = TACLR; (который очищает этот регистр), прежде чем устанавливать какие-либо значения в нем, возможно, это может помочь.