Вопросик по MSP430(+)
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено Kukaracha 02 ноября 2004 г. 12:22

Опять таки хочу просто поморгать светодиодиком.
В прерывании выставляю флаг, а в главном цикле по флагу
инвертирую состояние ноги для светодиода. Впечатление такое,
что главный цикл не крутиться, а в прерывании все работает.
Подскажите плиз, что у меня не так.


#include "typedef.h"
#include "defines.h"


byte fSec = 0;
word MainClockMs = 0;


void InitHardware(void);

void main(void)
{

InitHardware();


for(;;) {
if(fSec) {
P1OUT ^= 0x40; // здесь не работает
fSec = 0;
}
}

}


void InitHardware(void)
{
unsigned int i;

WDTCTL = WDTPW + WDTHOLD; // Stop WDT
P5DIR |= 0x10; // P5.4= output direction
P5SEL |= 0x10; // P5.4= MCLK option select
BCSCTL1 &= ~XT2OFF; // XT2= HF XTAL
do {
IFG1 &= ~OFIFG; // Clear OSCFault flag
for (i = 0xFF; i > 0; i--); // Time for flag to set
}
while ((IFG1 & OFIFG)); // OSCFault flag still set?
BCSCTL2 |= SELM_2;
BCSCTL2 |= SELS;

// init ports
P1DIR |= 0x40;

// init system timer
CCTL0 = CCIE; // CCR0 interrupt enabled
CCR0 = MAIN_FREQUENCY/COEF_SYSTEM_TIMER;
TACTL = TASSEL_2 + MC_2; // SMCLK, contmode
_BIS_SR(LPM0_bits + GIE); // Enter LPM0 w/ interrupt
}


// Timer A0 interrupt - system timer
#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A (void)
{
CCR0 += MAIN_FREQUENCY/COEF_SYSTEM_TIMER; // Add Offset to CCR0

if((++MainClockMs) == COEF_SYSTEM_TIMER) {
MainClockMs = 0;
fSec = 1;
P1OUT ^= 0x40; // а здесь работает

}

}

Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru