(一)TSTMR是什么
RISC-V里面,没有滴答定时器,取而代之的是一个叫TSTMR的功能。我们从数据手册2095页可以看到这么一段话:
The TSTMR module is a free running incrementing counter that starts running after
system reset de-assertion and can be read at any time by the software for determining the
software ticks. However, the software must follow the read sequence as mentioned in the
TSTMR register descriptions for correctly reading the TSTMR value. The TSTMR is a
56-bit counter and hence requires two 32-bit reads to read the full value. The TSTMR
runs off the 1 MHz clock and resets on every system reset. The counter only stops when
the clock to the TSTMR is disabled.
用金山翻译一下:
TSTMR模块是一个自由运行递增计数器,在运行后开始运行系统复位解除置位,并且可以在任何时候被软件读取以用于确定软件滴答。但是,软件必须遵循中所述的读取顺序。TSTMR寄存器说明,用于正确读取TSTMR值。TSTMR是A56位计数器,因此需要两个32位读取来读取全部值。TSTMR运行1MHz时钟,并在每个系统复位上复位。计数器仅在何时停止TSTMR的时钟被禁用。
里面提到, TSTMR给软件提供系统滴答计时。因此它就是滴答定时器的作用。
(二)TSTMR有什么
TSTMR这个功能相当凶残,直接给了两个32位寄存器,其中56个位用于计数,有1HZ和8HZ两种模式。
按照1HZ模式来算,要运行2000多年才会产生溢出,到时候这块电路板估计已经被大自然腐蚀掉了。况且一旦系统复位,它也会复位,重新计数。而且它还有两个这样的定时器,也就是可以通过对照的方式,轻松地越过这个“千年虫”bug。哪怕你真的能运行两千多年不复位,也照样能不出bug。
(三)TSTMR怎么用
1、TSTMR一次过需要先读高位再读低位,必须两个位都读完,否则会出错。
2、TSTMR使能是由FTFE_FOPT寄存器的24位使能,可以参考数据手册P748。实际上只需要Slow-Speed IRC(内部低频时钟)使能后就会自动置位,不需要额外使能。