资源描述
7.8 捕获单元
捕获单元可以记录捕获输入引脚上的转换,事件管理器总共有6个捕获单元,每个事件管理器有3个捕获单元。事件管理器A(EVA)的捕获单元为CAP1、CAP2和CAP3,事件管理器B(EVB)的捕获单元为CAP4、CAP5和CAP6,每一个捕获单元都有一个相应的捕获输入引脚。
每个EVA捕获单元均可选择GP定时器2或1作为其时间基准,CAP1和CAP2不能选择不同的事实上时器作为它们的时基。每个EVB捕获单元均为选择GP定时器4或3作为其时间基准,CAP4和CAP5不能选择不同的定时器作为它们的时基。
当在捕获输入引脚CAPx上检测到一个设定的转换时,GP定时器的值被捕获并存储在相应的2级深度FIFO堆栈中。图7-18是一个EVA的捕获单元原理框图,EVB的捕获单元原理框图与EVA的一样,仅仅是相应的寄存器发生了改变。
7.8.1 捕获单元特性
捕获单元包括下列特性:
l 1个16位的捕获控制寄存器CAPCONx(可读/写)。
l 1个16位的捕获FIFO状态寄存器CAPFIFOx。
l 可选择通用定时器1/2(EVA)或者3/4(EVB)作为时基。
l 6个16位2级深的FIFO栈(CAPxFIFO),每项个
l 3个施密特触发器输入引脚(对于EVA,CAP1/2/3;对于EVB,CAP4/5/6),每个捕获单元一个输入引脚(所有的输入和内部CPU时钟同步,为了使跳变被捕获,输入必须在当前电平保持两个CPU时钟周期。输入引脚CAP1/2和CAP4/5也可用作正交编码器脉冲电路的正交编码器脉冲输入)。
l 用户可定义跳变检测方式(上升沿,下降沿,或二者均检测)。
l 6个可屏蔽的中断标志位,每个标志位对应一个捕获单元。
7.8.2 捕获单元的操作
捕获单元使能后,相应输入引脚上的指定转换会将所选的通用定时器的计数值装入到相应的FIOP堆栈。同时,如果有一个或更多有效的捕获值保存在FIFO堆栈(CAPxFIFO位不等于0)中,则相应的中断标志位被置位。如果该中断标志没有被屏蔽,产生一个外设中断请求。每当将捕获到的新计数值存入到FIFO堆栈时,CAPFIFOx的相应状态位被调整以反映FIFO堆栈的新状态。从捕获单元输入引脚处发生转换到所选通用定时器的计数值被锁存之间的延时需要2个CPU时钟周期。
7.8.2.1 捕获单元基准的选择
对于EVA模块,与CAP1和CAP2不同,捕获单元CAP3有自己独立的时基选择位,这就允许同时使用2个通用定时器,CAP1和CAP2共用一个,而CAP3单独使用一个。在EVB模块,CAP6有自己独立的时基准选择位。
捕获操作不影响与任何GP定时器对应的任何GP定时器的操作或比较/PWM操作。
图7-18 EVA捕获单元原理框图
7.8.2.2 捕获单元的设置
为是捕获单元能正常工作,需对寄存器进行一下设置:
● 初始化捕获FIFO状态寄存器(CAPFIFOx),清楚专用状态位。
● 设置选定的GP定时器为一种操作模式。
● 如果需要,设置相应的GP定时器比较寄存器或GP定时器周期寄存器。
● 设置相应的CAPCONA或CAPCONB。
7.8.3 捕获控制寄存器
捕获单元的操作有4个16位的控制寄存器CAPCONA/B和CAPFIFOA/B控制。因为捕获电路的时间基准是有GP定时器1/2或3/4提供的,所以TxCON(x=1,2,3,或4) 寄存器用于控制捕获单元的操作。另外,寄存器CMCONA/B也可用于正交编码器脉冲电路的操作。表7-7和表7-8显示的是这些寄存器的地址。
7.8.3.1 捕获控制寄存器A
捕获控制寄存器A(CAPCONA)映射地址:7420h,各位的意义详细描述如下:
15 14~13 12 11 10 9 8
CAPRES
CAP12PN
CAP3EN
保留位
CAP3TSEL
CAP12TSEL
CAP3TOADC
RW-0 RW-0 RW-0 RW-0 RW-0 RW-0 RW-0
7~ 6 5~ 4 3~2 1~0
CAP1EDGE
CAP1EDGE
CAP1EDGE
保留位
RW-0 RW-0 RW-0 RW-0
注:R=可读,W=可写,-0=复位后的值
位15 CAPRES,捕获复位,该位只能进行写访问,任何读访问的结果均为0。向位15写0将清楚所有的捕获。写1无影响。
0 所有捕获单元和正交编码脉冲电路的寄存器清0
1 无动作
位14~13 CAP12PN,捕获单元1和2的控制位。
00 禁止捕获单元1和2,其FIFO堆栈保持原内容
01 使能捕获单元1和2
10 保留
11 保留
位12 CAP3EN,捕获单元3控制位。
0 禁止捕获单元3,其FIFO堆栈保持原有内容
1 使能捕获单元3
位11 保留位
位10 CAP3TSEL,捕获单元3的通用定时选择器选择位。
0 选择通用定时器2
1 选择通用寄存器1
位9 CAP12TSEL,捕获单元1和2的通用定时器选择位。
0选择通用定时器2
1选择通用定时器1
位8 CAP3TOADC,捕获单元3事件启动ADC(模数转换)位。
0 无操作
1 当CAP3INT标志位被置位是,启动ADC(模数转换)。
位7 ~6 CAP1EDGE,捕获单元1的边沿检测控制位。
00 无检测
01 检测上升沿
10 检测下降沿
11 上升沿、下降沿均检测
位5~4 CAP2EDGE,捕获单元2的边沿检测控制位。
00 无检测
01 检测上升沿
10 检测下降沿
11 上升沿、下降沿均检测
位3~2 CAP3EDGE,捕获单元3的边沿检测控制位。
00 无检测
01 检测上升沿
10 检测下降沿
11 上升沿、下降沿均检测
位1~0 保留位。
7.8.3.2 捕获控制寄存器B
捕获控制寄存器B(CAPCONB)映射地址:7520h,各位的意义与捕获控制寄存器A(CAPCONA)的相应位一样。
15 14~13 12 11 10 9 8
CAPRES
CAP45PN
CAP6EN
保留位
CAP6TSEL
CAP5TSEL
CAP6TOADC
RW-0 RW-0 RW-0 RW-0 RW-0 RW-0 RW-0
7~ 6 5~ 4 3~2 1~0
CAP4EDGE
CAP5EDGE
CAP6EDGE
保留位
RW-0 RW-0 RW-0 RW-0
注:R=可读,W=可写, -0=复位后的值。
位15 CAPRES,捕获复位,该位只能进行写访问,任何读访问的结果均为0。向位15写0将清楚所有的捕获。写1无影响。
位14~13 捕获单元4和5的控制位。
位12 CAP6EN,捕获单元6控制位。
0 禁止捕获单元6,其FIFO堆栈保持原内容
1 使能捕获单元6
位11 保留位。
位10 CAP6TSEL,捕获单元6的通用定时选择器选择位。
0 选择通用定时器4
1 选择通用寄存器3
位9 CAP45TSEL,捕获单元4和5的通用定时选择器选择位。
0 选择通用定时器4
1 选择通用寄存器3
位8 CAP6TOADC,捕获单元6事件启动ADC(模数转换)位。
0 无操作
1 当CAP6INT标志位被置位时启动ADC(模数转换)
位7~6 CAP4EDGE,捕获单元4的边沿检测控制位。
00 无检测
01 检测上升沿
10 检测下降沿
11 上升沿、下降沿均检测
位5~4 CAP5EDGE,捕获单元5的边沿检测控制位。
00 无检测
01 检测上升沿
10 检测下降沿
11 上升沿、下降沿均检测
位3~2 CAP6EDGE,捕获单元6的边沿检测控制位。
00 无检测
01 检测上升沿
10 检测下降沿
11 上升沿、下降沿均检测
位1~0 保留位
7.8.3.3 捕获FIFO状态寄存器A
CAPFIFOx中包括捕获单元的3个FIFO堆栈的状态位。如果CAPnFIFOx的状态位正在更新的同时(因为一个捕获事件)向CAPnFIFOx的状态位写数据,写数据优先。
CAPFIFOx寄存器的写操作在编程过程中很有用。例如,如果“01”写入CAPnFIFOx位,则EV模块会认为FIFO有一个输入。随后,每次FIFO获得一个新值,则将产生一个中断。
捕获FIFO状态寄存器A(CAPFIFOA)映射地址:7422h,各位的意义详细描述如下:
15~14 13~12 11~10 9~8
保留位
CAP3FIFO
CAP2FIFO
CAP1FIFO
R-0 RW-0 RW-0 RW-0
7~0
保留位
R-0
注:R=可读,W=可写, -0=复位后的值。
位15~14 保留位
位13~12 CAP3FIFO,捕获单元3的FIFO状态位。
00 空
01 有一个输入
10 有两个输入
11 有两个输入并有捕获到一个,第一个输入已丢失。
位11~10 CAP2FIFO,捕获单元2的FIFO状态位。
00 空
01 有一个输入
10 有两个输入
11 有两个输入并又捕获到一个,第一个输入已丢失
位9~8 CAP1FIFO,捕获单元1的FIFO状态位。
00 空
01 有一个输入
10 有两个输入
11 有两个输入并又捕获到一个,第一个输入已丢失。
位7~0 保留位。
7.8.3.4 捕获FIFO状态寄存器B
捕获FIFO状态寄存器B(CAPFIFOB)映射地址:7522h,各位的意义详细描述如下:
15~14 13~12 11~10 9~8
保留位
CAP6FIFO
CAP5FIFO
CAP4FIFO
R-0 RW-0 RW-0 RW-0
7~0
保留位
R-0
注:R=可读,W=可写, -0=复位后的值。
位15~14 保留位。
位13~12 CAP6FIFO,捕获单元6的FIFO状态位。
00 空
01 有一个输入
10 有两个输入
11 有两个输入并又捕获到一个,第一个输入已丢失
位11~10 CAP5FIFO,捕获单元5的FIFO状态位。
00 空
01 有一个输入
10 有两个输入
11 有两个输入并又捕获到一个,第一个输入已丢失
位9~8 CAP4FIFO,捕获单元4的FIFO状态位。
00 空
01 有一个输入
10 有两个输入
11 有两个输入并又捕获到一个,第一个输入已丢失。
位7~0 保留位。
7.8.4 捕获单元FIFO堆栈
每个捕获单元有一个对应的2级深度FIFO堆栈。堆栈顶层包括CAP1FIFO、CAP2FIFO和CAP3FIFO(EVA),或者CAP4FIFO、CAP5FIFO和CAP6FIFO(EVB)。堆栈底层包括CAP1FBOT、CAP2FBOT和CAP3FBOT(EVA),或CAP4FBOT、CAP5FBOT和CAP6FBOT(EVB)。任何一个FIFO堆栈的2级寄存器都是只读的寄存器,它保存着相应的捕获单元捕获的旧计数器值。因此,对FIFO堆栈的一个读访问总是读出捕获到堆栈中的旧计数器值。当位于FIFO堆栈顶部寄存器中的计数器值被读出时,FIFO堆栈底部寄存器的新计数器值(如果有的话)就会被压入顶部寄存器。
如果读取了底层寄存器的值,那么捕获FIFO状态寄存器的相应位将发生变化。如果读取前捕获FIFO状态寄存器的相应位为10或11,则读取后变成为01,即堆栈中只有一个值。如果读取前捕获FIFO张台寄存器的相应位为01,则读取后边车工为00即堆栈为空。
(1)第1次捕获
当捕获单元的输入引脚出现一个指定的转换时,选定的GP定时器的计数器值就会被捕获单元捕获,如果堆栈是空的,这个计数器值就会被写入到FIFO堆栈的顶层寄存器。同时,相应的状态位被设置为0。如果另外一个捕获发生之前对FIFO堆栈进行了读访问,则FIFO状态位被复位为00。
(2)第2次捕获
如果在以前的捕获的计数值被读取之前,又发生一次捕获,那么捕获的计数器值就会进入底部寄存器。同时,寄存器中相应的FIFO状态位被置为10。当在另外一次捕获之前读FIFO堆栈时,顶部寄存器中的旧计数器值被读出,底部寄存器中的新计数器值被压入顶部寄存器,相应的状态位设置为01。
第2次捕获会将寄存器相应的捕获中断标志位置1,如果中断没有被屏蔽,则会产生一个中断请求。
(3)第3次捕获
当FIFO堆栈中已有两个计数器值,这时如果又有一个捕获发生,堆栈顶部寄存器中最旧的计数器值被推出并且丢失,然后堆栈底部寄存器的计数器值被向上一次压入到顶部寄存器,新捕获的计数器值被写入底部寄存器,并且状态位设置为11,表明一个或更多的旧计数器值被丢失。
第3次捕获谁将寄存器相应的捕获中断标志位置1,如果中断没有被屏蔽,则会产生一个中断请求。
7.8.5 捕获中断
当一个捕获单元执行了一次捕获,并且FIFO中至少有一个捕获到的计数值(CAPxFIFO
位不为0)则响应的中断标志被置1。如果该中断没有被屏蔽,则会产生一个外设中断请求信号。如果使用了捕获中断,则可以从中断服务程序中读取捕获到的一对计数值。如果没有使用中断,也可以通过查询中断标志位和FIFO堆栈的状态位来确定是否发生捕事件,如果已发生捕获事件则可以从相应捕获单元的FIFO堆栈中读取捕获到的计数值。
展开阅读全文