本篇文章仅限于TDC-gp22测量时间部分。
首先TDC-gp22芯片有两个测量的时间范围:范围1:3.5ns-2.5us;范围2:500ns-4ms。该芯片通过SPI接口进行寄存器的配置和读取。该芯片包括7个32bit写寄存器和7个读寄存器(仅时间测量配置),接下来分别介绍每个寄存器的功能和具体配置,结合芯片手册寄存器部分阅览。
写寄存器
寄存器0:
首先高24bit是进行功能上的配置,低8bit为ID号没啥用,可以写上后续可以通过读取ID号来检验寄存器是否配置正确,[21:20]DIV_CLKHS为高速参考时钟的分频因子,该配置决定了芯片内部基准时钟(Tref)的大小,要根据我们所要测量的时间范围进行配置,需要保证待测量时间范围<2*Tref<2.4us,比如在测量范围1的情况下,采用4MHz的高速时钟,即周期为250ns,分频因子可设为1、2、4,在设置为2的情况下,即为待测时间<2*250*2<2.4us。[19:18]START_CLKHS设置为1:晶振持续开启。[13]ALU自动校准:开启自动校准返回32bit结果数据,高16bit整数部分,低16bit小数部分,关闭自动校准仅返回16bit数据。[12]NO_CAL_AUTO:自动校准一个时钟和两个时钟的差值,一般设为0,自动校准,这个校准值设计到ALU开启校准计算的结果,详细计算公式后续会提到。[11]MESSB2:设置0测量范围1,1测量范围2,根据个人需求,本篇文章选择测量范围1。[10:8]功能是:选择stop1,2和start通道是否反相。未提及的配置不涉及时间测量均设为0。配置结果为:0000_0000_00_00_01_00_0_0_1_0_0_0_0_0。
寄存器1: 回到最初目的测量时间,gp22有三个管脚分别是start,stop1,stop2三个引脚,每个stop管脚能够接收4个信号,理论上来说可以测量这三个管脚上的每个信号的任何时间差,但由于start引脚与stop引脚之间存在一个最小的时间差,一般选择给start信号让芯片进入计时状态,再让stop2-stop1,这种情况下可以让时间差理论上减小为0,在测量范围1的条件下,芯片最后的测量结果是HIT1-HIT2,通过配置[31:28]HIT2,[27:24]HIT1来选择哪两个信号的时间差,比如stop2的第一个信号减去stop1的第一个信号,即配置为0001_1001。[23]快速初始化:每次芯片完成测量后都要进行初始化来准备下一次接收start和stop信号,可通过SPI发送初始化指令或者此处设置为自动初始化,本程序设置为自动初始化后状态寄存器和结果寄存器数据不更新,目前未找到原因,因此选择每次测量完SPI发送初始化指令。[21:16]HTIN2,HTIN1配置两个stop管脚测量几个脉冲信号,最高可测4个脉冲。[15]CURR32K低频晶振功率选项,一般设为0。寄存器1配置为:0001_1001_01_001_001_00_000_000_10101010。
寄存器2:
寄存器2只需要考虑[31:29]EN_INT:中断引脚的配置,INT引脚低电平有效,该配置选择INT的中断原因,[31]测量时间溢出,[30]测量信号次数完成,[29]结果计算完成,INT拉低,[28:27]选择通道1和2上升沿或下降沿有效,该寄存器配置为:1110_0000000000000000000000000000。
寄存器3:32'h000000ff,寄存器4:32'b0010_00000000000000000000_11111111,
寄存器5:32'b0000_1000_0000000000000000_11111111,寄存器6不配置,默认即可。
读寄存器
仅说明0,4,5读寄存器。
读寄存器0(结果寄存器):
时间测量结果存储在该寄存器内,若寄存器0配置ALU校准,则返回来32bit数据,高16bit整数,低16bit小数,若不校准,返回16bit数据,返回的数据均为2的补码形式,计算方程在后续章节中会提到。
读寄存器4(状态寄存器):
16bit每位代表意义在表中有详细叙述,时间测量仅需关注[9:0],[9]若测量溢出,即待测时间超出2*Tref,该位为1,[8:6][5:3]代表每个通道接收的脉冲数,通过读取状态寄存器可判断测量过程是否正常完成。
读寄存器5:
此寄存器用于SPI的通信测试,通过读取该寄存器,可将写寄存器1的高8bit返回来,来检查是否正常写入寄存器。
用于时间测量的TDC-gp22了解以上寄存器配置便可进行程序编写和具体的应用。