void DMA_int();
int ledvalue=0xaa;
void main( void )
{ WDTCTL = WDTPW + WDTHOLD; //关闭看门狗 P11DIR = BIT1+BIT2; // P11.1-2 to output direction P11SEL |= BIT1+BIT2; // P11.1-2 to output SMCLK,MCLK P5SEL |= 0x0C; // Port select XT2
UCSCTL6 &= ~XT2OFF; // Enable XT2 UCSCTL3 |= SELREF_2; // FLLref = REFO // Since LFXT1 is not used, // sourcing FLL with LFXT1 can cause // XT1OFFG flag to set UCSCTL4 |= SELA_2; // ACLK=REFO,SMCLK=DCO,MCLK=DCO
// Loop until XT1,XT2 & DCO stabilizes do { UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + XT1HFOFFG + DCOFFG); // Clear XT2,XT1,DCO fault flags SFRIFG1 &= ~OFIFG; // Clear fault flags }while (SFRIFG1&OFIFG); // Test oscillator fault flag
UCSCTL6 &= ~XT2DRIVE0; // Decrease XT2 Drive according to // expected frequency UCSCTL4 |= SELS_5 + SELM_5; // SMCLK=MCLK=XT2 P2DIR|=0xff ; //8个LED方向 TA0CCTL0 = CCIE; // CCR0 interrupt enabled TA0CCR0 =16; TA0CTL |= TASSEL_2 +MC_1 + TACLR; // SMCLK, DMA_int(); __bis_SR_register(LPM3_bits + GIE); // Enter LPM3, enable interrupts __no_operation(); // For debugger
} #pragma vector=TIMER0_A0_VECTOR
__interrupt void Timer0_A0 (void)
{ ledvalue=~ledvalue; DMA0CTL |=DMAEN;
}
void DMA_int()
{ DMACTL0 |= DMA0TSEL_1; // TA0CCRO CCIFG __data16_write_addr((unsigned short) &DMA0SA,(unsigned long) ledvalue); __data16_write_addr((unsigned short) &DMA0DA,(unsigned long) &P2OUT); DMA0SZ = 16; DMA0CTL |= DMADT_0;
}
选了外部8M晶振,Ta单调增模式,DMA选择TA CCIFG触发,程序感觉没什么问题?但灯就是不亮。 主要是想在示波器上看灯亮灭的周期,,DMA的设置可能有问题,但不会改,纠结了快一星期了,请大侠帮帮忙看看~~~~~ |