zx_ (22.02.2010 17:11, просмотров: 3587) MBedder
не получается настроить прерывания по таймеру. iar+msp Ножка по прерыванию дёргается, иногда прогамма сбрасывается на reset, иногда переполняется стек.
Недавно начал изучать С, поэтому ошибка, наверное, простейшая. :)
#include "io430.h"
#include <intrinsics.h>
//port1
#define SCLK (0x0008)
#define SD (0x0004)
#define XCLR (0x0002)
#define POW_LOW (0x0001)
//port2
#define POW_PRESS (0x0010)
#define POW_LOSK (0x0004)
#define BEEPER (0x0008)
int main( void ){
//STUP(begin)
WDTCTL = WDTPW + WDTHOLD;
do{
BCSCTL1 = 0;
BCSCTL2 = SELM1 + SELM0 + SELS;
IFG1 &= !OFIFG;
volatile unsigned int i;
i = 100;
do i--;
while (i != 0);
}
while ((IFG1 & OFIFG) == 0);
P2DIR = POW_LOSK + BEEPER; //P2.2, P2.3 out
P2OUT = POW_LOSK;
//timer(begin)
TACCTL0=CCIE; //разрешение прерывания
TACCR0=50;
TACTL = TASSEL_1+MC_1+TAIE; //ACLK, Режим «вверх», Разрешение прерывания
//timer(end)
//STUP(end)
__enable_interrupt();
P2OUT ^= BEEPER;
for (;;){
}
return 0;
}
#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A (void){
P2OUT ^= BEEPER;
}