做了好久的交流采样,总是在定时器A与AD12的地方出问题,请大侠看看下面的定时器与AD12的初始设置到底哪儿有问题,我实在太菜了。
要求是,AD12的时钟由TimerA产生,采样频率为50HZ的交流信号,信号周期为20ms,采样间隔为1ms,单通道重复采样。求指导!!求助!!
void ADC_Init(void)
{
P1OUT = 0; // reset port outputs
ADC12CTL0 &= ~ENC;
ADC12CTL0 = ADC12ON+SHT0_2+REF2_5V+REFON+MSC; // Setup ADC12
ADC12CTL1 = CONSEQ_2+SHS_1+CSTARTADD_0; // Timer triggers sampling
ADC12MCTL0 = INCH_0 + SREF_1;
ADC12IE|=BIT0; // Enable ADC12IFG.0
TACCR0 = 1000; // Delay to allow Ref to settle
TACCTL0 |= CCIE; // Compare-mode interrupt.
TACTL = TASSEL_1 | MC_1; // TACLK = ACLK, Up mode.
_BIS_SR(LPM3_bits + GIE); // Wait for delay, Enable interrupts
// TACCTL0 &= ~CCIE; // Disable timer
P2SEL |= BIT3; // Set for Timer A1
P2DIR |= 0x08;
TACCR0 =700; // Init TACCR0 w/ sample prd=CCR0+1
TACCR1 =300; // Trig for ADC12 sample & convert(这两句不懂)
TACCTL1 = OUTMOD_3; // Set/reset
TACTL = TACLR | MC_1 | TASSEL_1; // ACLK, clear TAR, up mode
}
// ADC12 Interrupt Service Routine
#pragma vector=ADC12_VECTOR
__interrupt void ADC12ISR (void)
{
static unsigned int index = 0;
unsigned long sum = 0;//设置 A/D 转换结果变量
ADC12CTL0 &= ~ENC; //设置AD转换控制寄存器ADC12CTL0,ENC=0x002,~ENC=0xFFD,停止AD转换
。
。
。
。
}
// Timer_A0 Interrupt Service Routine
#pragma vector=TIMERA0_VECTOR
__interrupt void ta0_isr(void)
{
TACTL = 0;
LPM3_EXIT; // Exit LPM3 on return
}
此帖出自
小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>