Здравствуйте! Помогите пожалуйста разобраться, что я не так делаю.Есть простенькая прога для msp430:
#include "msp430x20x3.h"
#include <intrinsics.h>
unsigned int i = 0;
void main(void)
{
WDTCTL= WDTPW+WDTHOLD;
P1DIR|=0x01;
TACCR0=65500;
P1OUT|=0x01;
TACTL|=TACLR+ID_2+TASSEL_2+ID_1;
TACCTL0|=CCIE;
__enable_interrupt();
while (1);
}
#ifdef __IAR_SYSTEMS_ICC__
#if __VER__ < 200
interrupt[TIMERA0_VECTOR] void TimerA0_ISR(void)
#else
#pragma vector=TIMERA0_VECTOR
__interrupt void TimerA0_ISR( void )
#endif
#endif
#ifdef __CROSSWORKS_MSP430
void TimerA0_ISR(void) __interrupt[TIMERA0_VECTOR]
#endif
#ifdef __TI_COMPILER_VERSION__
__interrupt void TimerA0_ISR(void);
TIMERA0_ISR(TimerA0_ISR)
__interrupt void TimerA0_ISR(void)
#endif
{
__disable_interrupt();
if (P1OUT == 0x00)
{ P1OUT|=0x01;
i+=500;
TACCR0-=i;
}
else
{P1OUT|=0x00;
TACCR0-=i;
}
__enable_interrupt();
}
На обработчик прерывания можно в данном случае особо не обращать внимания, не в нем суть. Вроде как для инициализации таймера я пишу то, что надо. В симуляторе же (и на эмуляторе - ez430-F2013) видно ,что счетный регистр таймера TAR никак вообще не изменяется...
Соответственно вопросы:
1) Как заставить таймер таки считать?
2) Насчет прерывания - как проверить работу обработчика? (разрешение прерывания по сравнению - CCIE установлено), руками ставлю CCIFG (ведь он аппаратно ставиться, когда таймер досчитывает до значения в TACCR0), прерывания разрешаю - результат - никакой....
Помогите плз!