USER GUIDE / DATA MOVEMENT & TIMERS / TIMER / OPERATION
操作
TCU 模式的操作
通用模式(以 ch0 为例)
在通用模式下,当得到时钟或控制信号的上升沿或下降沿或双沿时,计数器会加 1
- 步骤 1:FULL(寄存器 0x40)应该大于 HALF(寄存器 0x44)
- 步骤 2:确保中断被打开(寄存器 0x38)
- 步骤 3:对计数器赋初始值(寄存器 0x48)
- 步骤 4:选择对应的时钟以及时钟触发沿(寄存器 0x4c)
- 步骤 5:使能 TCU 计数器(0x14)
具体示例:
- 步骤 1:0x40(full)写 2,0x44(half)写 1
- 步骤 2:0x38 bit0 和 bit16(mask_clr) 写 1
- 步骤 3:0x48(cnt_value) 写 0
- 步骤 4:0x4c bit2 写 1(exclk_en), bit[5:3] 写 0, bit16 写 1(采用 posedge edge)
- 步骤 5:0x14 bit0 写 1(cnt_en)

门控模式(以 ch0 为例)
在门控模式下,如果 gate_pola 是 0,计数器将会按照以下模式计数:
- 当门控制信号为 0 时,计数器每个时钟加 1
- 当门控制信号为 1 时,计数器保持不变
- 步骤 1:设置 FULL(0x40)和 HALF(0x44)的值
- 步骤 2:确保中断被打开(0x38)
- 步骤 3:对计数器赋初始值(寄存器 0x48)
- 步骤 4:选择对应的时钟以及时钟触发沿(寄存器 0x4c)
- 步骤 5:选择 GPIO0 作为门信号
- 步骤 6:使能 TCU 计数器(0x14)
具体示例:
- 步骤 1:0x40 写 2,0x44 不关注
- 步骤 2:0x38 bit0(mask_clr) 写 1
- 步骤 3:0x48(cnt_value) 写 0
- 步骤 4:0x4c bit[5:3] 写 1,bit2 写 1(使用 EXTALclk,分频 4.)
- 步骤 5:0x4c bit[12:11](使用 GPIO0 为门信号) 写 2, bit6(gpio0) 写 1, bit14(GATE_POLA) 写 0
- 步骤 6:0x14 bit0 写 1(cnt_en)

方向模式(以 ch0 为例)
在方向模式下,根据 direction pola 和 direction control signal,计数器会加 1 或减 1
如果 DIRECTION_PLOA 是 1:
- 当 direction control signal 是 0,计数器每个时钟加 1
- 当 direction control signal 是 1,计数器每个时钟减 1
- 步骤 1:设置 FULL(0x40)和 HALF(0x44)的值
- 步骤 2:确保中断被打开(0x38)
- 步骤 3:对计数器赋初始值(寄存器 0x48)
- 步骤 4:选择对应的时钟以及时钟触发沿(寄存器 0x4c)
- 步骤 5:选择 GPIO0 作为方向信号
- 步骤 6:使能 TCU 计数器(0x14)
具体示例:
- 步骤 1:0x40(full)写 4 and 0x44(half)不关注
- 步骤 2:0x38 bit0(mask_clr) 写 1
- 步骤 3:0x48(cnt_value) 写 0
- 步骤 4:0x4c bit[5:3] 写 1, bit2 写 1.(使用 EXTALclk,分频 4.)
- 步骤 5:0x4c bit6(gpio0_en) 写 1, bit[10:8](采用 gpio0 为方向信号) 写 2 ,bit13(DIRECTION_POLA) 写 0
- 步骤 6:0x14 bit0 写 1(cnt_en)

pos 模式(以 ch0 为例)
在 pos 模式下,计数器从 0 开始计数,当控制信号上升沿或下降沿时清零
- 步骤 1:设置 FULL(0x40)和 HALF(0x44)的值
- 步骤 2:确保中断被打开(0x38)
- 步骤 3:对计数器赋初始值(寄存器 0x48)
- 步骤 4:选择对应的时钟以及时钟触发沿(寄存器 0x4c)
- 步骤 5:选择 GPIO0 作为门信号
- 步骤 6:选择 CAPTURE_SEL 为 2(寄存器 0xc0)
- 步骤 7:使能 TCU 计数器(0x14)
具体示例:
- 步骤 1:0x40 写 4 ,0x44 不关注
- 步骤 2:0x38 bit0(mask_clr) 写 1
- 步骤 3:0x48(cnt_value) 写 0
- 步骤 4:0x4c bit[5:3] 写 0,bit2 写 1
- 步骤 5:0x4c bit6(gpio0_en) 写 1,bit16(clk_pos) 写 1
- 步骤 6:0xc0 bit[16:18](gpio0_pos) 写 1
- 步骤 7:0x14 bit0 写 1(cnt_en)

捕获模式(以 ch0 为例)
- 步骤 1:设置 FULL(0x40)和 HALF(0x44)的值
- 步骤 2:确保中断被打开(0x38)
- 步骤 3:对计数器赋初始值(寄存器 0x48)
- 步骤 4:选择对应的时钟以及时钟触发沿(寄存器 0x4c)
- 步骤 5:选择 GPIO0 作为门信号
- 步骤 6:选择 CAPTURE_SEL 为 1,输入捕捉次数(寄存器 0xc0,当捕捉次数大于 0x80 时,捕捉模式永久开启)
- 步骤 7:使能 TCU 计数器(0x14)
具体示例:
- 步骤 1:0x38 bit0、bit16 (mask_clr) 写 1
- 步骤 2:0x40 写 0xffff,0x44 写 0xffff,0x48(cnt_value) 写 0
- 步骤 3:0x4c bit16(clk_pos)写 1,bit6(gpio0_en) 写 1
- 步骤 4:0x4c bit[5:3] 写 0, bit2 写 1
- 步骤 5:0xc0 bit[16:18](gpio0_pos) 写 1,bit[7:0]写 4
- 步骤 6:0x14 bit0 写 1(cnt_en)

滤波器功能(以 ch0 为例)
在滤波器功能中,它会去除我们不想要的信号,或者滤掉高低电平持续时间较短的信号。
- 步骤 1:写 0x6 进 FIRVR0.FIL_A(0x1a0)
- 步骤 2:将 TCR0(0x4C)的 bit6 写 1 去使能 GPIO0
- 步骤 3:将 TCR0(0x4C)的 bit18 写 1 去采用 GPIO0 的上升沿计数
- 步骤 4:使能 TCU 计数器(0x14)

ADC 模式操作
同时触发(ch0)
这个模式下,触发信号(full_en0 and half_en0)会同时触发双 ADC
- 步骤 1:FULL(寄存器 0x40)和 HALF(寄存器 0x44)的数值需要相等
- 步骤 2:确保中断被打开(0x38)
- 步骤 3:对计数器赋初始值(寄存器 0x48)
- 步骤 4:选择对应的时钟以及时钟触发沿,计数模式选择 00(寄存器 0x4c)
- 步骤 5:使能 TCU 计数器(0x14)
具体示例:
- 步骤 1:0x40(full) 写 2,0x44(half) 写 2
- 步骤 2:0x38 bit0 、bit16(mask_clr) 写 1
- 步骤 3:0x48(cnt_value) 写 0
- 步骤 4:0x4c bit2 写 1(exclk_en), bit[5:3]写 0, bit16 写 1(采用上升沿)
- 步骤 5:0x14 bit0 写 1(cnt_en)

分时触发(ch0)
这个模式下,触发信号(full_en0 and half_en0)会分时触发双 ADC
- 步骤 1:FULL(寄存器 0x40)和 HALF(寄存器 0x44)的数值需要不相等
- 步骤 2:确保中断被打开(0x38)
- 步骤 3:对计数器赋初始值(寄存器 0x48)
- 步骤 4:选择对应的时钟以及时钟触发沿,计数模式选择 00(寄存器 0x4c)
- 步骤 5:使能 TCU 计数器(0x14)
具体示例:
- 步骤 1:0x40(full) 写 2,0x44(half) 写 1
- 步骤 2:0x38 bit0 、bit16(mask_clr) 写 1
- 步骤 3:0x48(cnt_value) 写 0
- 步骤 4:0x4c bit2 写 1(exclk_en), bit[5:3]写 0, bit16 写 1(采用上升沿)
- 步骤 5:0x14 bit0 写 1(cnt_en)

霍尔模式操作
- 步骤 1:确保中断被打开(0x38)
- 步骤 2:对计数器赋初始值(寄存器 0x58)
- 步骤 3:选择 GPIO0_EN(寄存器 0x5c)
- 步骤 4:选择 CAPTURE_SEL 为 1,输入捕捉次数(寄存器 0xc0,当捕捉次数大于 0x80 时,捕捉模式永久开启)
- 步骤 5:使能 TCU 计数器(0x14)
具体示例:
- 步骤 1:0x38 bit1 (mask_clr) 写 1
- 步骤 2:0x50 写 0xffff, 0x54 写 0xffff,0x58(cnt_value) 写 0
- 步骤 3:0x5c bit16(clk_pos) 写 1,bit6(gpio0_en) 写 1
- 步骤 4:0x5c bit[5:3]写 0,bit2 写 1
- 步骤 5:0xc4 bit[16:18](gpio0_pos)写 1 and bit[7:0]写 0x80
- 步骤 6:0x14 bit1 写 1(cnt1_en

正交编码模式操作
(以 ch1、ch2、ch3 为例)
- 步骤 1:确保中断被打开(0x38)
- 步骤 2:对计数器赋初始值(寄存器 0x58、0x68、0x78)
- 步骤 3:ch1 选择 GPIO0 和 GPIO1,DIRECTION_SEL 选择 4,选择 GPIO0 和 GPIO1 的双沿计数,计数模式选择 3,打开 STORE_EN 和 STORE_POS_EN(寄存器 0x5c)
- 步骤 4:ch2 选择 CLK_POS_EN,计数模式选择 2(寄存器 0x6c)
- 步骤 5:ch3 选择 GPIO0_EN、GPIO0_POS_EN,计数模式选择 2,打开 STORE_EN 和 STORE_POS_EN.(寄存器 0x7c)
- 步骤 6:对计数器赋初始值(寄存器 0x58、0x68、0x78)
- 步骤 7:设置 FULL(0x50、0x60、0x70)和 HALF(0x54、0x64、0x74)的值
具体示例:
- 步骤 1:0x38 (mask_clr) 写 0x006c_0000
- 步骤 2:0x50 写 0xffff, 0x54 写 0xffff, 0x58(cnt_value) 写 0x8000
- 步骤 3:0x60 写 0xffff, 0x64 写 150, 0x68(cnt_value) 写 0
- 步骤 4:0x70 写 0xffff, 0x74 写 30, 0x78(cnt_value) 写 0
- 步骤 5:0x5c 写 0x03fc_04c4
- 步骤 6:0x6c 写 0x0081_0004
- 步骤 7:0x7c 写 0x0384_0044
- 步骤 6:0x14(cnt1_en) write 0x7e

OST 计数器功能
- 步骤 1:选择分频系数,选择输入时钟并使能(寄存器 0x110)
- 步骤 2:设置 OST_FULL(寄存器 0x100)
- 步骤 3:设置 OST_CNT 的初始值(寄存器 0x104)
- 步骤 4:打开中断(寄存器 0x38)
- 步骤 5:使能 OST 计数器(0x14)
状态寄存器功能
- 步骤 1:配置 TCU 寄存器使其计数启动
- 步骤 2:配置状态设置寄存器(寄存器 0x154):此时产生中断,计数暂停
- 步骤 3:想要恢复计数时,配置状态清除寄存器(寄存器 0x158),计数恢复