每个捕获单元有一个专用的两级深的FIFO堆栈。顶部堆栈包括CAP1FIFO、CAP2FIFO和CAP3FIFO(EVA)或CAP4FIFO、CAP5FIFO和CAP6FIFO(EVB)。底部堆栈包括CAP1FBOT、CAP2FBOT和CAP3FBOT(EVA)或CAP4FBOT、CAP5FBOT和CAP6FBOT(EVB)。所有FIFO堆栈的顶部堆栈寄存器都是只读寄存器,它存放相应捕获单元捕获到的最早的计数值,因此读取捕获单元FIFO堆栈时总是返回堆栈中最早的计数值。当读取FIFO堆栈的顶部寄存器的数值时,堆栈底部寄存器的新计数值(如果有)将被压入到顶部寄存器。
如果需要,也可以读取FIFO堆栈的底部寄存器。读FIFO堆栈的底部寄存器可使FIFO的状态位变为01(如果先前是10或11)。如果原来FIFO状态位是01,则读取底部FIFO寄存器后,FIFO状态位变为00(即为空)。
(1)第一次捕获
当捕获单元的输入引脚出现跳变时,捕获单元将通用定时器的计数值写入到空的FIFO堆栈的顶部寄存器,同时相应的状态位设置为01。如果在下一次捕获操作之前读取了FIFO堆栈,则FIFO状态位被复位为00。
(2)第二次捕获
如果在第一次捕获计数值被读取之前产生了另一次捕获,则新捕获到的计数值被送至底部寄存器。同时相应的寄存器状态位设置为10,如果在下一次捕获操作之前对FIFO堆栈进行了读操作,那么底部寄存器中新的数值就会被压入到顶部寄存器,同时相应的状态位被设置成01。(www.xing528.com)
第二次捕获使相应的捕获中断标志位置位,如果中断未被屏蔽,则产生一个外设中断请求。
(3)第三次捕获
如果捕获发生时,FIFO堆栈已捕获到两个计数值,在顶部寄存器中最早的计数值将被弹出并被丢弃,而堆栈底部寄存器的值将被压入到顶部寄存器中,新捕获到的计数值将被压入到底部寄存器中,并且FIFO的状态位被设置为11,以表明一个或者更多个旧的捕获计数值被丢弃。
第三次捕获使相应的捕获中断标志位置位,如果中断未被屏蔽,则产生一个外设中断请求。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。