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.

[参考译文] TDC7200EVM:读取 TDC7200时间和时钟计数(24位)寄存器

Guru**** 2644125 points

Other Parts Discussed in Thread: TDC7200

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

https://e2e.ti.com/support/sensors-group/sensors/f/sensors-forum/798977/tdc7200evm-reading-tdc7200-time-and-clock_count-24-bits-registers

器件型号:TDC7200EVM
主题中讨论的其他器件:TDC7200

大家好、

使用的 EVM TDC7200板具有 TM4C1294XL DEV。 电路板。 TDC7200芯片通过 SPI 进行通信,因此我使用 ROM_SSI 与它进行通信。 目前,我正在使用不同的 MCU 模拟“开始”和“停止”信号,在每次启动和停止之间发送2个脉冲,每个脉冲之间有240uS,并计划使用 TDC 的模式2。

在我向 TDC 发送测量命令后,我能够从 INT_STATUS 寄存器(02h)读取0x19,这意味着测量已完成,并且“根据数据表中的8.6.4”,我没有溢出时钟或粗略计数器

到目前为止、我的问题是我尝试读取时间和时钟计数寄存器。 它们是24位寄存器,我现在所做的就是发送地址为“16位”的读取命令,然后我再发送一个“16位”给我可以读取剩余的8位, 但我又回到了“0x2”,它在两个脉冲之间保持不变,“除了两个脉冲之间的时间超过2ms”,这使我认为我读取寄存器的方式有问题!

不确定问题是我读取寄存器的方式还是 TDC 设置中的某个问题。

如果看一下代码、我会很感激、让我知道我的错误在哪里
void IO_SSI_setup (void){

ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOA);
ROM_SysCtlPeripheralEnable (SYSCTL_Periph_SSI2);
ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOD);

ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOQ);
ROM_SysExpalEnable (SYSCTL_Periph_SSI3);

ROM_GPIOPinConfigure (GPIO_PD0_SSI1_SSIPDAT1);// MISOPD0
ROM_GPIO2 (GPIO_SSIP2


);ROM_SSIP2


(ROM_SSIP2)
G_ui32SysClock、SSI_FRF_MOTO_MODE_0、SSI_MODE_MASTER、5000000、16);
ROM_SSIEnable (SSIBASENum);

ROM_GPIOPinTypeGPIOOutput (GPIO_PORTN_BASE、GPIO_PIN_1 | GPIO_PIN_0);

ROM_GPIOPinTypeGPIOOutput (GPIO_PORta_base、GPIO_PIN_7); //使能引脚设置为输出

}

uint32_t TDC7200ReadReg24位(uint8_t addr){

uint32_t u32RxBuff1 = 0x0;
uint32_t u32RxBuff2 = 0x0;
uint32_t u32RxBuff3 = 0x0;

uint16_t u160xFF]

、[U32RxBuff2 = 0x0、UIDEN]、同时[8_t UARTID](非读/写/写/读/写/写)位[UIDEN8_[UCD]、[UIDEN8_UIDr](非读/写/写/位[UIDEN8]、[UCD/写/非 UCD] u32RxBuff3)){//清除 FIFO
}
while (ROM_SSIBusy (SSIBASENum)){
//
尝试#1输出:0 2 0
ROM_SSIDataPut (SSIBASENum、u16TxBuff);//发送前16位
ROM_SSIDataGet (SSIBASENum、&u32RxBuff1);//发送 SSIB2

位/SSIBIZuEN2
;/SSIBIZu2

(SSIBR2)/SSIBIZuEN2)/ SSIBIASuEN2 (SSIBR2)/SSIBIZuEN2 / SSIBIN/ SIDEN2
//发送前16位
ROM_SSIDataGet (SSIBASENum、&u32RxBuff1);//读取垃圾邮件!?

ROM_SSIDataPut (SSIBASENum、0x00);//发送第二个16位
ROM_SSIDataGet (SSIBASENum、&u32RxBuff2);//读取数据

ROM_SSIDataPut (SSIBASENum、0x00);//发送第二个16位 ROM_U32RxBuffer/
%32ux、%U32ux2、%U32ux 2、%U32uF (%UARTx2)



以下是设置后读取的寄存器:

CONFIG1_REG      (0x00)
CONFIG2_REG      (0x41)
INTRPT_STATUS_REG  (0x1F)
INTRPT_MASK_REG      (0x07)
粗糙_计数器_OVH_REG (0xFF)
粗糙_计数器_OVL_REG (0xFF)
Clock_counter_OVH_REG (0xFF)
Clock_counter_OVL_REG (0xFF)
Clock_counter_stop_MASKH_REG (0x00)
Clock_counter_stop_MASKL_REG (0x00)

谢谢!

如果看一下代码、我会很感激、让我知道我的错误在哪里!
谢谢!
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    我将检查此问题、并很快返回。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我在"SSIDataGetNonBlocking"之后添加了一个延迟、用于修复我的一些问题。 现在我能够读取一些值、但删除'UARTprintf'会改变接收到的值。

    例如、如果我在读取寄存器后使用'UARTprintf'、我会得到一些值、但当我删除'UARTprintf'时、该值会有所不同!
    这是因为使用'UARTprint'会延迟功能并给 SSI 控制器更多的读取时间吗?!

    另一个 TDC7200问题、我应该在两次测量之间等待多长时间。 我能否连续测量?

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

    我们无法帮助进行器件编码、我可以检查寄存器读数/设置是否存在任何问题、并告知您。
    通常在几个时钟周期后发布 INTB 引脚切换的最后一次读数、我们应该等待几个时钟周期、然后再开始新的测量周期。
    作为备份、请检查示波器中的 START 和 STOP 引脚、并查看您可以获得所需的 STOP 信号数量、如果您的代码能够获取相同的数据。