TI中文支持网
TI专业的中文技术问题搜集分享网站

TLC2554无法读取采样数据

主控制是带四线制SPI接口的微处理器,设置为24位模式(16位模式也试过,现象是一样的),时钟信号12MHz,CLCK时钟滞后CS片选信号1.5us,读写SFR均正常。采样模式设置为单次采样,12CLCK转换时间,内部基准源。读取通道11、12、13测试通道的数据都是一样的,应该是没有实现数据转换。

Hawk Tong:

1. 是否监测采样时中断信号EOC的输出波形?

2. 设计上如何处理CSTART管脚 ?对应的控制信号

3. 方便时,将你处上传你的代码看看

liang hu30:

回复 Hawk Tong:

CSTART和FS管脚都没用,直接通过电阻拉高,测试时采用延时测试,没有检测EOC引脚状态。下面是测试代码:

static int adc_init(void);

static int adc_write_data(unsigned int cmd);

static int adc_get_data(unsigned int cmd);

static int adc_get_analog(unsigned int cmd);

static int adc_get_sfr(void);

ADCSPI_T   adc = {

                   .value = 0.0,

                   .tdata = 0,

                   .sfr_data = 0,

                   .init = adc_init,

                   .get_data = adc_get_data,

                   .get_analog = adc_get_analog,

                   .get_sfr = adc_get_sfr

                };

static int adc_init(void)

{

   PIO_ADC_CS->DATA.BITS.CS = 1;//这是后来将SPI数据位改成8位模式,并将CS引脚用IO脚模拟

   adc_write_data(0xa000);

   adc_write_data(0xa804);

   return 0;

}                

static int adc_write_data(unsigned int cmd)

{

/************16和24模式****************

//    unsigned int cmd_temp;//

//    cmd_temp = cmd<<8;

*/

unsigned char cmd_h,cmd_l;

   cmd_l = cmd;

   cmd_h = cmd>>8;

   PIO_ADC_CS->DATA.BITS.CS = 0;

   usleep(2);

   ADC_SPI->TXDATA = cmd_h;//cmd_temp;

   while(!(ADC_SPI->STATUS.BITS.TMT));

   ADC_SPI->TXDATA = cmd_l;//cmd_temp;

   while(!(ADC_SPI->STATUS.BITS.TMT));

   usleep(5);

   PIO_ADC_CS->DATA.BITS.CS = 1;

   return 0;

}                

static int adc_get_sfr(void)

{

   int ttdata;

/************16和24模式****************  

//    adc_write_data(0x9000);

//    ttdata = ADC_SPI->RXDATA >>8;

//    adc.sfr_data = ttdata & 0x0fff;

*/

   PIO_ADC_CS->DATA.BITS.CS = 0;

   usleep(2);

   ADC_SPI->TXDATA = 0x90;//cmd_temp;

   while(!(ADC_SPI->STATUS.BITS.TMT));

   ttdata = ADC_SPI->RXDATA;

   ttdata = ttdata << 8;

   ADC_SPI->TXDATA = 0x00;//cmd_temp;

   while(!(ADC_SPI->STATUS.BITS.TMT));

   ttdata = ttdata + ADC_SPI->RXDATA;

   usleep(5);

   PIO_ADC_CS->DATA.BITS.CS = 1;

   adc.sfr_data = ttdata & 0x0fff;

   return 1;

}

static int adc_get_data(unsigned int cmd)

{

   int data;

       unsigned char cmd_h,cmd_l;

/************16和24模式****************    

//    adc_write_data(cmd);

//    data = ADC_SPI->RXDATA;

//    usleep(500);  

//    while(PIO_ADC_ECO->DATA.BITS.ECO == 0);

//    adc_write_data(cmd);

//    data = ADC_SPI->RXDATA;

*/

   PIO_ADC_CS->DATA.BITS.CS = 0;

   usleep(2);

   ADC_SPI->TXDATA = cmd_h;//cmd_temp;

   while(!(ADC_SPI->STATUS.BITS.TMT));

   data = ADC_SPI->RXDATA;

   data = data << 8;

   ADC_SPI->TXDATA = cmd_l;//cmd_temp;

   while(!(ADC_SPI->STATUS.BITS.TMT));

   data = data + ADC_SPI->RXDATA;

   usleep(5);

   PIO_ADC_CS->DATA.BITS.CS = 1;

   data = data >>12;

   return data;

}

static int adc_get_analog(unsigned int chn)

{

   int ddata;

//    float value;

   ddata = adc_get_data(chn);

   adc.tdata = ddata;

   adc.value = ddata *  MOD;// + OFFSET;

//    dac_set_data(chn,ddata);

   return 1;

}

liang hu30:

回复 liang hu30:

主程序0.5s读一次采样数据。时间上肯定能转换完成,准备延时采样测试成功再通过检测EOC采样。

赞(0)
未经允许不得转载:TI中文支持网 » TLC2554无法读取采样数据
分享到: 更多 (0)