事件管理器捕获单元FIFO堆栈的使用
发布时间:2009/1/8 0:00:00 访问次数:1634
每个捕获单元有一个专用的2级深的fifo堆栈,顶部堆栈包括capififo、cap2fifo和cap3fifo(eva)或 cap4fifo、capsfifo和 capgfifo(evb)。 底部堆栈包括caplfbot、capzfbot和cap3fbot(eva)或cap4fbot、cap5fbot和capgfbot(evb)。所有fifo堆栈的顶层堆栈寄存器是只读寄存器,它存放相应捕获单元捕获到的最早的计数值,因此读取捕获单元fifo堆栈时总是返回堆栈中最早的计数值。当读取fifo堆栈的顶层寄存器的计数值时,堆栈底层寄存器的新计数值(如果有)将被压人顶层寄存器。
如果需要,也可以读取fifo堆栈的底层寄存器。读访问可使fifo的状态位变为01(如果先前是1o或11)。如杲原来fifo状态位是01,读取底层fifo寄存器时,fifo的状态位变为00(即为空)。
(1)第一次捕获
当捕获单元的输入引脚出现跳变时,捕获单元将使用的通用定时器的计数值写入到空的fifo堆栈的顶层寄存器,同时相应的状态位置为01。如果在下一次捕获操作之前,读取了fifo堆栈,则fifo状态位被复位为00。
(2)第二次捕获
如果在前一次捕获计数值被读取之前产生了另一次捕获,新捕获到的计数值送至底层的寄存器,同时相应的寄存器状态位置为1o。如果在下一次捕获操作之前对fifo堆栈进行了读操作,底层寄存器中新的计数值就会被压人到顶层寄存器,同时相应的状态位被设置为01。第二次捕获使相应的捕获中断标志位置位,如果中断未被屏蔽,则产生一个外设中断请求。
(3)第三次捕获
如果捕获发生时,fifo堆栈已有捕获到的2个计数值,则在顶层寄存器中最早的计数值将被弹出并丢弃,而堆栈底层寄存器的值将被压入到顶层寄存器中,新捕获到的计数值将被压入到底层寄存器中,并且fifo的状态位被设置为ii以表明1个或更多旧的捕获计数值已被丢弃。第三次捕获使相应的捕获中断标志位置位。如果中断未被屏蔽,则产生一个外设中断请求。
3.捕获中断
当捕获单元完成一个捕获时,在fifo中至少有一个有效的值(cap=fifo位显示不等于0),如果中断未被屏蔽,中断标志位置位,产生一个外设中断请求。因此,如果使用了中断,则可用中断服务子程序读取到一对捕获的计数值。如果不希望使用中断,则可通过查询中断标志位或堆栈状态位来确定是否发生了2次捕获事件,若已发生,则捕获到的计数值可以被读出。
欢迎转载,信息来源维库电子市场网(www.dzsc.com)
每个捕获单元有一个专用的2级深的fifo堆栈,顶部堆栈包括capififo、cap2fifo和cap3fifo(eva)或 cap4fifo、capsfifo和 capgfifo(evb)。 底部堆栈包括caplfbot、capzfbot和cap3fbot(eva)或cap4fbot、cap5fbot和capgfbot(evb)。所有fifo堆栈的顶层堆栈寄存器是只读寄存器,它存放相应捕获单元捕获到的最早的计数值,因此读取捕获单元fifo堆栈时总是返回堆栈中最早的计数值。当读取fifo堆栈的顶层寄存器的计数值时,堆栈底层寄存器的新计数值(如果有)将被压人顶层寄存器。
如果需要,也可以读取fifo堆栈的底层寄存器。读访问可使fifo的状态位变为01(如果先前是1o或11)。如杲原来fifo状态位是01,读取底层fifo寄存器时,fifo的状态位变为00(即为空)。
(1)第一次捕获
当捕获单元的输入引脚出现跳变时,捕获单元将使用的通用定时器的计数值写入到空的fifo堆栈的顶层寄存器,同时相应的状态位置为01。如果在下一次捕获操作之前,读取了fifo堆栈,则fifo状态位被复位为00。
(2)第二次捕获
如果在前一次捕获计数值被读取之前产生了另一次捕获,新捕获到的计数值送至底层的寄存器,同时相应的寄存器状态位置为1o。如果在下一次捕获操作之前对fifo堆栈进行了读操作,底层寄存器中新的计数值就会被压人到顶层寄存器,同时相应的状态位被设置为01。第二次捕获使相应的捕获中断标志位置位,如果中断未被屏蔽,则产生一个外设中断请求。
(3)第三次捕获
如果捕获发生时,fifo堆栈已有捕获到的2个计数值,则在顶层寄存器中最早的计数值将被弹出并丢弃,而堆栈底层寄存器的值将被压入到顶层寄存器中,新捕获到的计数值将被压入到底层寄存器中,并且fifo的状态位被设置为ii以表明1个或更多旧的捕获计数值已被丢弃。第三次捕获使相应的捕获中断标志位置位。如果中断未被屏蔽,则产生一个外设中断请求。
3.捕获中断
当捕获单元完成一个捕获时,在fifo中至少有一个有效的值(cap=fifo位显示不等于0),如果中断未被屏蔽,中断标志位置位,产生一个外设中断请求。因此,如果使用了中断,则可用中断服务子程序读取到一对捕获的计数值。如果不希望使用中断,则可通过查询中断标志位或堆栈状态位来确定是否发生了2次捕获事件,若已发生,则捕获到的计数值可以被读出。
欢迎转载,信息来源维库电子市场网(www.dzsc.com)
上一篇:EV扩展控制寄存器
上一篇:事件管理器捕获单元时钟基准的选择