事件管理器捕获单元FIFO堆栈的使用

时间:2009-01-07

  每个捕获单元有一个专用的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



  
上一篇:事件管理器捕获单元时钟基准的选择
下一篇:光电编码器原理

免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。

相关技术资料