(2)捕获控制寄存器B(CAPCONB),映射地址:7520h 。
CAPCONB与CAPCONA各位的意义相同。
2.捕获FIFO状态寄存器
CAPFlFOx中包括捕获单元的3个FlFO堆栈的状态位。如果CAPFlFOx的状态位正在更新的同时(因为一个捕获事件)向CAPFlFOx状态位写数据,写数据优先。
CAPFlFOx寄存器的写操作在编程中很有用。例如,如果
“01”写入CAPFlFOx位,则EV模块会认为FIFO有一个输入。随后,每次FIFO获得一个新值,则将产生一个捕获中断。
(1)捕获FlFO状态寄存器A(CAPFlFOA),
映射地址:7422h
捕获FlFO状态寄存器A(CAPFlFOA)各位的意义如下:
位15-14 保留位。
位13-12 CAP3FlFO 。捕获单元3的FlFO状态位
00 空
01 有一个输入
10 有两个输入
11 有两个输入并又捕获到一个,第一个输入已丢失。
位11-10 CAP2FlFO 。捕获单元2的FlFO状态位
00 空
01 有一个输入
10 有两个输入
11 有两个输入并又捕获到一个,第一个输入已丢失。
位9-8 CAP1FlFO 。捕获单元1的FlFO状态位
00 空
01 有一个输入
10 有两个输入
11 有两个输入并又捕获到一个,第一个输入已丢失。
位7-0 保留位
(2)捕获FlFO状态寄存器B(CAPFlFOB),
映射地址:7522h
与捕获FlFO状态寄存器A(CAPFlFOA)各位的意义相同。
6.8.4 捕获单元FIF0堆栈每个捕获单元有一个2级深度FlFO堆栈。任何一个
FlFO堆栈的2级寄存器都是只读寄存器,它保存着相应的捕获单元捕获的旧计数器值。因此,对FlFO堆栈的一个读访问总是读出捕获到堆栈中的旧计数器值。
当位于FlFO堆栈顶部寄存器中的计数器值被读出时,
FlFO堆栈底部寄存器的新计数器值(如果有的话)就会被压入项部寄存器。
如果读取了底层寄存器的值,那么捕获FlFO状态寄存器的相应位将发生变化。
如果读取前捕获FlFO状态寄存器的相应位为10或11,
则读取后变成为01,即堆栈中只有一个值。
如果读取前捕获FlFO状态寄存器的相应位为01,则读取后变成为00,即堆栈为空。
(1)第1次捕获当捕获单元的输入引脚出现一个指定的转换时,选定的GP定时器的计数器值就会被捕获,如果堆栈是空的,这个计数器值就会被写入到FlFO堆栈的项层寄存器。同时,相应的状态位被设置为0。
如果另外一个捕获发生之前对FlFO堆栈进行了读访问,
则FlFO状态位被复位为00。
(2)第2次捕获如果在以前的捕获的计数值被读取之前,又发生一次捕获,那么捕获的计数器值就会进入底部寄存器。同时,
寄存器中相应的FlFO状态位被置为10。当在另外一次捕获之的读FlFO堆栈时,顶部寄存器中的旧计数器值被读出,底部寄存器中的新计数器值被压入顶部寄存器,相应的状态位设置为01。
第2捕获会将寄存器相应的捕获中断标志位置1,如果中断没有被屏蔽,则会产生一个中断请求。
(3)第3次捕获当FlFO堆栈中已有两个计数器值,这时如果又有一个捕获发生,堆栈顶部寄存器中最旧的计数器值被推出并且丢失,然后堆栈底部寄存器的计数器值被向上一次压入到顶部寄存器,新捕获的计数器值被写入底部寄存器,并巳状态位设置为11,表明一个或更多的旧计数器值被丢失。
第3次捕获会将寄存器相应的捕获中断标志位置1,如果中断没有被屏蔽,则会产生一个中断请求。
6.8.5 捕获中断当一个捕获单元执行了一次捕获,且FlFO中至少有一个捕获到的计数值时(CAPFlFO位不为0),则相应的中断标志位置1。如果该中断没有被屏蔽,则会产生一个外设中断请求信号。
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/ruanjian/article-29489-33.html
@CYAdol小米电源正品没问题
感觉丢了面子
说别人幼稚的你真幼稚