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.

[参考译文] TDC7200:无法正确读取 TDC7200寄存器

Guru**** 2614265 points
Other Parts Discussed in Thread: TDC7200

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

https://e2e.ti.com/support/sensors-group/sensors/f/sensors-forum/672443/tdc7200-unable-to-read-the-tdc7200-registers-properly

器件型号:TDC7200

您好!

我正在使用 TDC7200和 PIC 18F4550进行飞行时间测量。 但是、每当我读回24位寄存器时、MSB 都会作为0接收。 此外、当我读回配置而不为 TDC 提供 START 和 STOP 脉冲时、我会返回 origina 值(对于 CONFIG1为0x03)、并且在提供 START STOP 脉冲后、CONFIG1会读作0x02 (在循环中相同)。  

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

    在不当交易期间、您能否发布 SPI 通信线路的一些示波器捕获? 正在使用哪些 SPI 设置、您是否有正在使用的一些 SPI 事务代码示例?

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

    这是我们用于 SPI 事务的代码。 我们使用了用于读取和写入8位和24位寄存器的函数。 我们将尽快发布示波器捕获。

    setupSPI()
    
    {
    
    
    TRISBbits.RB0 = 1;// SDI 配置为输入
    TRISBbits.RB1 = 0;// SCLK 配置为输出
    TRISCbits.RC7 = 0;// SDO 配置为输出
    TRISCbits.RD6 = 0;//从器件选择
    
    //SPI 配置
    
    SSPSTAT=0b11000000;
    SSPCON1 =0b00100010;
    
    }
    
    
    enableSPI ()
    
    {
    
    SSPCON1bits。SSPEN = 1;//激活 SPI 相关引脚
    
    }
    
    
    disableSPI ()
    
    {
    
    SSPCON1bits。SSPEN = 0;//禁用 SPI 引脚
    
    }
    
    
    
    无
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    符号 SPIWrite (int 值){PIR1bits。SSPIRF = 0;SSPIRF
    
    = 0;SSPIIF = 0;SSPIWR1BIF = 0;SSPIWR1BIF = 0;SSPIAR 位数(SSPIRF)
    
    
    
    
    
    SSPBUF=0x00;
    
    while (!PIR1bits.SSPIF);
    
    data=SSPBUF;
    
    PIR1bits.SSPIF=0;
    
    RD6=1;
    
    返回数据;
    
    }
    
    
    
    void SPIRead24 (int address、unsigned char * a、unsigned char * b、unsigned char * c)
    {
    RD6=0;
    PIR1bits.SSPIF=0;
    SSPBUF=(地址和0x1F);
    while (!PIR1bits.SSPIF);
    PIR1bits.SSPIF=0;
    SSPBUF=0x00;
    while (!PIR1bits.SSPIF);
    PIR1bits.SSPIF=0;
    * a = SSPBUF;
    SSPBUF=0x00;
    while (!PIR1bits.SSPIF);
    PIR1bits.SSPIF=0;
    *b = SSPBUF;
    SSPBUF=0x00;
    while (!PIR1bits.SSPIF);
    PIR1bits.SSPIF=0;
    * c = SSPBUF;
    RD6=1;
    }
    
    
    
    void main()
    
    {
    
    
    unsigned int counter=0;
    
    unsigned char lower =0x00;
    
    unsigned char upper =0x00;
    
    unsigned char a、b、c;
    
    unsigned char config1、config2;
    
    unsigned char array[15];
    
    
    TRISBbits.RD7 = 0;//启用
    TRISBbits.RB2 = 1;//中断引脚
    
    TRISD=0;
    PORTD=0;
    
    const int config1 = 0x00;//默认0x00
    CONST int CONFIG2 = 0x01;//默认0x40
    const int INT_STATUS = 0x02;//默认0x00
    const int INT_MASK = 0x03;//默认0x07
    const int 粗糙_CNTR_OVF = 0x04; //默认0xff
    const int 粗糙_CNTR_OVF = 0x05; //默认0xff
    const int clock_CNTR_OVF = 0x06; //默认0xff
    const int clock_CNTR_OVF = 0x07; //默认0xff
    CONST int CLOCK _CNTR_STOP_MASK_H = 0x08;//默认值0x00
    CONST int CLOCK _CNTR_STOP_MASK_L = 0x09;//默认值0x00
    
    const int Time1 = 0x10;//默认0x00_0000
    CONST int CLOCK _COUNT1 = 0x11; //默认0x00_0000
    const int Time2 = 0x12;//默认0x00_0000
    CONST int CLOCK _COUNT2 = 0x13; //默认0x00_0000
    const int Time3 = 0x14;//默认0x00_0000
    CONST int CLOCK _COUNT3 = 0x15; //默认0x00_0000
    const int TIME4 = 0x16;//默认0x00_0000
    CONST int CLOCK _COUNT4 = 0x17; //默认0x00_0000
    const int Time5 = 0x18;//默认0x00_0000
    CONST int CLOCK _COUNT5 = 0x19; //默认0x00_0000
    const int TIVE6 = 0x1A;//默认0x00_0000
    CONST int CALIBRATION1 = 0x1B; //默认0x00_0000
    CONST int CALIBRATION2=0x1C; //默认0x00_0000
    
    延迟(2);
    RD7=0;
    延迟(5);
    RD7=1;
    
    
    CONFIG1=0x03;
    CONFIG2=0x40;
    
    
    while (1)
    {
    
    setupSPI ();
    enableSPI ();
    
    RD6=0;
    SPIWrite (CONFIG1 | 0x03);//配置模式2测量
    SPIWrite (CONFIG1);
    RD6=1;
    
    for (int n=0;n<5;n++);
    
    RD6=0;
    SPIWrite (CONFIG2 | 0x40); //配置为单停止
    SPIWrite (CONFIG2);
    RD6=1;
    
    //读回配置寄存
    器 config1=SPIRead8 (CONFIG1);
    
    config2=SPIRead8 (CONFIG2);
    
    
    while (INT);
    
    delay (2);
    
    
    SPIRead24 (Time1、&A、&c);
    
    array[0]=a;
    
    array[1]=b;
    
    array[2]=c;
    
    
    SPIRead24 (Time2、&a、&b、&c);
    
    array[3]=a;
    
    array[4]=b;
    
    array[5]=c;
    
    
    SPIRead24 (clock_Count1、&a、&b、&c);
    
    array[6]= a;
    
    array[7]= b;
    
    array[8]=c;
    
    
    SPIRead24 (CALIBRATION1、&a、&b、&c);
    
    array[9]=a;
    
    array[10]=b;
    
    array[11]=c;
    
    
    SPIRead24 (CALIBRATION2、&a、&b、&c);
    
    array[12]=a;
    
    array[13]=b;
    
    array[14]=c;
    
    
    
    disableSPI ();
    
    
    
    
    
    }
    
    }