Other Parts Discussed in Thread: TDC7200
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
部件号: TDC7200
您好:
我一直在尝试让 TDC7200 在需要测量模式 2 下两个脉冲上升沿之间的时间的应用中工作。 我按如下方式配置了 TDC7200:
// TDC_WRITE(地址,值)
// TDC_READ(地址,字节)
TDC_WRITE (0x00、0x82);
TDC_WRITE (0x01、0xC0);
TDC_WRITE (0x03、0x07);
TDC_WRITE (0x04、0xFF);
TDC_WRITE (0x05、0xFF);
TDC_WRITE (0x06、0xFF);
TDC_WRITE (0x07、0xFF);
TDC_WRITE (0x08、0x00);
TDC_WRITE (0x09、0x00);
然后、在连续循环中读取 TDC7200:
TDC_WRITE (0x00、0x83);
TDC_WRITE (0x01、0xC0);
if (reading_ready)
{
Reading_ready = false;
uint32_t time_1 = TDC_READ (0x10、3);
uint32_t time_2 = TDC_READ (0x12、3);
uint32_t CLOCK_1 = TDC_READ (0x11、3);
uint32_t calibration_1 = TDC_READ (0x1B、3);
uint32_t calibration_2 = TDC_READ (0x1C、3);
Double CLOCK_PERIOD = 62.5E-9;// 16MHz 时钟-> 62.5ns 周期
Double calibration_count =(double)((double)(calibration_2 - calibration_1)/ 39.0);
Double NORMAL_lsb =(clock_period / calibration_count);
双倍时间=(NORMAL_lsb *(time_2 - time_1))+(clock_1 * clock_period);
TDC_WRITE (0x02、0x00);
printf(“Time1:%x、Time2:%x、CLOCK1:%x、CALIBRATION1:%x、CALIBRATION2:%x、 校准计数:%e、标准 LSB:%E、时间:%E\n“、time_1、time_2、 CLOCK_1、CALIBRATION_1、CALIBRATION_2、CALIBRATION_COUNTS、NORMAL_lsb、 时间);
}
输出如下:
Time1:1、Time2:2、CLOCK1:0、CALIBRATION1:4、CALIBRATION2:AC、 校准计数:4.307692e+00、标准 LSB:1.450893E-08、时间:1.450893E-08
我使用的是 16MHz 时钟、并且我提供的测试脉冲在 START 和 STOP 信号的上升沿之间具有 4.8us 的间距。 使用这些值、假设 LSB 大小为 55ps、我预计校准 1 值约为 1000、校准 2 约为 40000(40 个周期)。 但是、从 TDC7200 读回的值要低得多(分别为 4 和 172)。 时间 1 和时间 2 寄存器的值也过低。 我已经在示波器上检查了 SPI 事务;打印的值与传输的值和接收的值相匹配。
以下是触发器、START、STOP 和中断引脚的示波器截图。

可能是我错误地配置了芯片了吗?
此致、
Vivekanand