This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] ADS1148-Q1:ADS1148-Q1 SPI配置正确(通过读取配置的寄存器进行验证),但无法获取DOUT (Miso)引脚上的数据。

Guru**** 2393725 points
Other Parts Discussed in Thread: ADS1148-Q1

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/601680/ads1148-q1-ads1148-q1-spi-configured-properly-verified-by-reading-configured-registers-but-can-t-able-to-get-data-on-dout-miso-pin

部件号:ADS1148-Q1

1.对SCLK,CS,MOSI (DIN)的波形进行数据传输验证。

2.由于ADS1148-Q1的所有ADC输入通道也可用作GPIO,因此将AIN7引脚配置为GPIO。 CAN能够打开/关闭通过程序连接到引脚AIN7的LED。

3.代码与数据表中给出的伪代码相同。

4.无法获取DOUT引脚上的数据,原因可能是什么? 请帮我解决这个问题,提前感谢。

我的代码如下所示:

内部主(无效)

   UINT8_t高位字节;
   uINT8_t low_byte;
   UINT16_t ADC_DATA;
   UINT8_t DATA_READY;

   UINT8_t received_val = 0;
   INIT_USART1 (9600);
   gPIO_CONFIG();

   //将低重置为高
   GPIO_ResetBits (GPIOC,GPIO针脚12);//重置为低
   delay_ms(10);
   GPIO_SetBits (GPIOC,GPIO针脚_12);   //重置为高

   /****************** 步骤*************************** /
   delay_ms(16);
   INIT_SPI1();//SPI   初始化

   GPIOE->BSRRH |= GPIO引脚_7;//设置PE7 (CS)低
   delay_ms(16);      // tcssc*/的最小延迟
   SPI1_SEND (0x06);   //reset命令
   delay_ms(1);
   SPI1_SEND (0x16);   //SDATAC命令

   SPI1_SEND (0x40);
   SPI1_SEND (0x0E);
   SPI1_SEND (0x01);   //MUX0
   SPI1_SEND (0x00);   //VBIAS
   SPI1_SEND (0x30);   //MUX1
   SPI1_SEND (0x52);   //SYS0
   SPI1_SEND (0x00);   //OFC0
   SPI1_SEND (0x00);   //OFC1
   SPI1_SEND (0x00);   //OFC2
   SPI1_SEND (0x00);   //FSC0
   SPI1_SEND (0x00);   //FSC1
   SPI1_SEND (0x00);   //FSC2
   SPI1_SEND (0x06);   //IDAC0
   SPI1_SEND (0x89);   //IDAC1
   SPI1_SEND (0x80);   //GPIOCFG
   SPI1_SEND(0x00);   //GPIODIR
   SPI1_SEND (0x80);   //GPIODAT
   GPIOE->BSRRL |= GPIO引脚_7;   //设置PE7 (CS)高
   DELAY _Us (10);

   //读取所有寄存器
   GPIOE->BSRRH |= GPIO引脚_7;   //设置PE7 (CS)低

   SPI1_SEND (0x20);   //从地址0开始读取
   SPI1_SEND (0x0E);   //读取0xE + 1 = 15字节
   UINT8_t MUX0 = SPI1_SEND (0xFF);      //读取MUX0
   UINT8_t VBIAS = SPI1_SEND (0xFF);
   UINT8_t MUX1 = SPI1_SEND (0xFF);
   UINT8_t SYS0 = SPI1_SEND (0xFF);
   UINT8_t OFC0 = SPI1_SEND (0xFF);
   UINT8_t OFC1 = SPI1_SEND (0xFF);
   UINT8_t OFC2 = SPI1_SEND (0xFF);
   UINT8_t FSC0 = SPI1_SEND (0xFF);
   UINT8_t FSC1 = SPI1_SEND (0xFF);
   UINT8_t FSC2 = SPI1_SEND (0xFF);
   UINT8_t IDAC0 = SPI1_SEND(0xFF);
   UINT8_t IDAC1 = SPI1_SEND (0xFF);
   UINT8_t GPIOCFG = SPI1_SEND (0xFF);
   UINT8_t GPIODIR = SPI1_SEND (0xFF);
   UINT8_t GPIODAT = SPI1_SEND (0xFF);
   GPIOE->BSRRL |= GPIO引脚_7;   //设置PE7 (CS)高

   GPIOE->BSRRH |= GPIO引脚_7;   //设置PE7 (CS)低
   SPI1_SEND (0x04);             //sync命令
   DELAY _Us (10);                //延迟> tsccs

   //GPIO_ResetBits (GPIOC,GPIO引脚_12);   //重置高
   //delay_ms(10);
   同时(1)
   {
      GPIO_SetBits (GPIOE,GPIO引脚_14);   //起始值为高
      delay_ms(10);
      GPIO _ResetBits (GPIOE,GPIO引脚_14);   //启动低

      DATA_READY = 0x01;
      delay_ms(1);
      while (data_ready == 0x01)
      {
         DATA_READY = GPIO_ReadInputDataBit(GPIOE,GPIO PIN_11);
      }

      GPIOE->BSRRH |= GPIO引脚_7;   //设置PE7 (CS)低

      delay_ms(7);

      SPI1_SEND (0x12);             //RDATA命令

      //delay_ms(1);

      HIGH _BYTE = SPI1_SEND (0xFF);
      low_byte = SPI1_send (0xFF);

      /*SPI1_SEND(0xFF);
      HIGH _BYTE=SPI_I2S_ReceiveData (SPI1);
      SPI1_SEND (0xFF);
      low_byte=SPI_I2S_ReceiveData(SPI1);*/

      delay_ms(20);

      GPIOE->BSRRL |= GPIO引脚_7;   //设置PE7 (CS)高

      ADC_DATA =(((uint16_t) HIGH _Byte)< 8)|((uint16_t) LOW)_Byte);

      USART_SendData (USART1,ADC_DATA);
   }

   同时(1);
   返回0;
}

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Harshal,


    看一下您的代码,您似乎已将FSC设置为0万h。 这相当于将数字滤波器中的所有内容乘以0。 通常,FSC值约为40万h。

    尝试使用标称值,并告诉我这是否有帮助。 如果不是问题,请发回,我们可以继续调试问题。


    吴若瑟
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    是的,将FSC设置为40万h (重置值)现在可以在DOUT引脚上获取数据:-)

    谢谢约瑟夫。