关于MSP430的ADC DTC传输问题
#include"msp430g2553.h"void wait_ref_ready()//等待ADC参考源设置完成
{
//与_EINT()功能一致,打开总中断
__enable_interrupt(); // Enable interrupts.
TACCR0 = 30; // Delay to allow Ref to settle
TACCTL0 |= CCIE; // 打开TACCR0中断
TACTL = TASSEL_2 | MC_1; // TACLK = SMCLK, Up mode.
LPM0; // Wait for delay.
TACCTL0 &= ~CCIE; // 关闭TACCR0中断
__disable_interrupt(); //关闭总中断
}
void main(void)
{
unsigned int loop,sample;
unsigned int Sum;
unsigned int *pointer;
pointer = 0x00;
//关闭看门狗
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
//单通道重复采样,选择A1通道采样
ADC10CTL1 = CONSEQ_2 + INCH_2; // Repeat single channel, A1
//选择参考源Vref+,Vss。16个转换时钟,参考源开启,2.5V,ADC10模块开启,打开ADC中断
ADC10CTL0 =SREF_1+ ADC10SHT_2 + REFON + MSC + REF2_5V+ ADC10ON + ADC10IE; // ADC10ON, interrupt enabl
wait_ref_ready();
//采样32次
ADC10DTC1 = 0x20; // 32 conversions
//P1.1作为采样通道
ADC10AE0 |= 0x04; // P1.1 ADC option select
//P1.0设置为输出
P1DIR |= 0x01; // Set P1.0 to output direction
P1OUT = 0x01; //灯亮
for (;;)
{
Sum = 0x00;
//关闭ADC使能开关
ADC10CTL0 &= ~ENC;
//等待ADC10模块不忙
while (ADC10CTL1 & BUSY); // Wait if ADC10 core is active
ADC10SA = 0x200; // Data buffer start
//启动ADC转换
ADC10CTL0 |= ENC + ADC10SC; // Sampling and conversion start
//进入低功耗模式LPM0,开总中断
__bis_SR_register(CPUOFF + GIE); // LPM0, ADC10_ISR will force exit
for(loop = 0; loop < 0x20; loop++)
{
sample=*(pointer+0x200+loop);
// if(sample > MAX) sample =MAX ;
// if(sample < MIN) sample =MIN ;
// Sum += (sample & 0x03ff);
Sum += sample;
}
Sum = Sum/2;
if(Sum > 0x1ff)
P1OUT &= 0xfe; //灯灭
else
P1OUT |=0x01; //灯亮
}
}
// ADC10 interrupt service routine
#pragma vector=ADC10_VECTOR
__interrupt void ADC10_ISR(void)
{
__bic_SR_register_on_exit(CPUOFF); // Clear CPUOFF bit from 0(SR)
}
#pragma vector=TIMER0_A0_VECTOR
__interrupt void ta0_isr(void)
{
TACTL = 0; //关闭计数器,退出LPM0模式
LPM0_EXIT; // Exit LPM0 on return
}
请教各位大神,我的程序哪里出问题了,为什么P1.1口电平总是VCC,导致sample一直为1024?就算P1.1接GND也是一样。。。
页:
[1]