Цитата(PhX @ Oct 24 2010, 00:00)

Если убрать из обработчика прерывания таймера if (TAIV==2), оставив только cnt++; перестает работать прерывание PORT1. С чем связано такое поведение?
До чего же люди ленивы в прочтении руководств?

Цитирую раздел
12.2.6 Timer_A Interrupts из
MSP430x2xx Family User's Guide (Rev.E)Цитата
Any access, read or write, of the TAIV register automatically resets the highest pending interrupt flag. If another interrupt flag is set, another interrupt is immediately generated after servicing the initial interrupt.
То бишь без обращения к регистру TAIV флаг прерывания автоматом
не сбрасывается, а остается активным. А поскольку прерывание с адресом вектора TIMERA1_VECTOR имеет б
ольший приоритет, чем прерывание PORT1_VECTOR (это указано в
datasheet), то второе прерывание просто перестает вызываться.
Цитата(PhX @ Oct 24 2010, 00:00)

Да и вот еще вопрос, у таймера есть 2 вектора прерывания TIMERA0_VECTOR и TIMERA1_VECTOR в каких случаях работает первый, а в каких второй?
Снова цитата из того же раздела руководства

Цитата
Two interrupt vectors are associated with the 16-bit Timer_A module:
- TACCR0 interrupt vector for TACCR0 CCIFG
- TAIV interrupt vector for all other CCIFG flags and TAIFG