js_gary 发表于 2015-1-20 21:44:37

TQ210 ADC


int read_adc(int ch)
{
// 使能预分频功能,设置A/D转换器的时钟 = PCLK/(65+1)
        TSADCCON0 = (1<<16)|(1 << 14) | (65 << 6);
// 清除位,设为普通转换模式,禁止read start
        TSADCCON0 &= ~((1<<2)|(1<<1));       
        // 选择通道
        ADCMUX = 1; //ch
// 设置位为1,启动A/D转换
TSADCCON0 |= (1 << 0);
// 当A/D转换真正开始时,位会自动清0
while (TSADCCON0 & (1 << 0));
// 检测位,当它为1时表示转换结束
while (!(TSADCCON0 &(1 << 15)) );
// 读取数据
return (TSDATX0 & 0xfff);
}



void adc_test(void)
{
        printf("\r\n##################adc test################\r\n");
        while(1)
        {
                printf("adc = %d\r\n",read_adc(1));
                delay(0x100000);
        }
}

请教天嵌工程师,按210手册和TQ210开发板原理图配置好后,一直没有数据显示,不知道那里配置不对,还是你们开发板有什么地方需要特点配置才能工作,在read_adc里debug发现while (TSADCCON0 & (1 << 0));一直退不出来,说明ADC转换没有启动。然后我用你们自带的ADC测试程序是可以测试,并且改变可调电阻AIN1的值能正常变化,说明硬件应该没问题。期待回复,谢谢。

js_gary 发表于 2015-1-22 09:15:37

自己顶下
怎么没有人回复呢

js_gary 发表于 2015-1-22 17:06:59

有人调试过吗

js_gary 发表于 2015-1-22 17:10:09

       

int read_adc(int ch)
{
// 使能预分频功能,设置A/D转换器的时钟 = PCLK/(65+1)
      TSADCCON1=(1<<17)| (1<<16)|(1 << 14) | (65 << 6);
// 清除位,设为普通转换模式,禁止read start
      TSADCCON1 &= ~((1<<2)|(1<<1));      
      // 选择通道
      ADCMUX = 1; //ch
// 设置位为1,启动A/D转换
TSADCCON1 |= (1 << 0);
// 当A/D转换真正开始时,位会自动清0
while (TSADCCON1 & (1 << 0));
// 检测位,当它为1时表示转换结束
while (!(TSADCCON1 &(1 << 15)) );
// 读取数据
return (TSDATX1 & 0xfff);
}
改用这组寄存器,问题是一样的

Anonymous 发表于 2015-1-27 12:12:23

没有人在TQ210上做这个裸机程序吗{:5_330:}
页: [1]
查看完整版本: TQ210 ADC