如题,当程序运行时,检测到的主时钟MCLK频率(8MHZ)变化,每次TACCRX的值变化,数值从几百k至几MHZ之间。不知道是怎么回事。TA0端口没有输出4MHZ的频率,改变TACCR0的值,输出也很混乱。TA1和TA2的10k、1k频率输出正常。TA1和TA2最高输出100khz的频率。到底是怎么回事呢?
问:2:可以使用32768或8MHZ时钟产生9Khz的频率吗?
以下是代码:
#include <msp430x26x.h>
void main(void)
{int i;
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
BCSCTL1 &= ~XT2OFF;
BCSCTL3 |= XT2S_2;
do
{
IFG1&= ~OFIFG;
for(i=0xff;i>0;i--);
}
while((IFG1&OFIFG));
BCSCTL2|=SELM1+SELS;
P5DIR |= 0X70;
P5SEL |= 0X70;
P1SEL |= 0x3E; // P1.1 - P1.3 option select
P1DIR |= 0x3F; // P1.0 - P1.3 outputs
TACCTL0 = CCIE; // CCR0 toggle, interrupt enabled
TACCTL1 = OUTMOD_4 + CCIE; // CCR1 toggle, interrupt enabled
TACCTL2 = OUTMOD_4 + CCIE; // CCR2 toggle, interrupt enabled
TACTL = TASSEL_2 + MC_2 + TAIE; // ACLK, contmode, interrupt enabled
// while(1);
_BIS_SR(LPM1_bits + GIE); // Enter LPM3 w/interrupt
}
// Timer A0 interrupt service routine
#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A0(void)
{
CCR0 += 1; // Add Offset to CCR0
}
// Timer_A3 Interrupt Vector (TAIV) handler
#pragma vector=TIMERA1_VECTOR
__interrupt void Timer_A1(void)
{
switch(TAIV)
{
case 2: CCR1 += 400; // Add Offset to CCR1
break;
case 4: CCR2 += 4000; // Add Offset to CCR2
break;
case 10: P1OUT ^= 0x01; // Timer_A3 overflow
break;
}
}