单发模式下的全局定时器可生成两个计数末中断请求,而不是一个。这可通过使用自动增量模式避免。 软件可在比较器寄存器值增量后,通过清空全局定时器标记来解决这个问题。
影响: | 很小。该问题会在系统中创建假中断请求。 |
解决方法:: | 在中断服务例程中使用自动增量,不要使用单发模式或执行特殊序列。更多详情,敬请参见以下应急措施细节。 |
受影响的配置: | 在单发模式中使用 PS 全局定时器 (GT) 的系统 |
受影响的器件修订版本: | 参考 (Xilinx Answer 47916) - Zynq-7000 SoC 芯片版本差异。 |
全局定时器 (GT) 可通过编程,在其达到给定编程值时对处理器生成中断请求。由于这个问题,全局定时器通过编程不使用自动增量特性时,它可能会生成两个中断请求,而不是一个。
全局定时器控制寄存器可使用以下设置编程:
Bit 3 = | 1b0 | 可在单发模式下对 GT 进行编程 |
Bit 2 = | 1b1 | GT IRQ 生成启用 |
Bit 1 = | 1b1 | GT 值与比较器寄存器的比较启用 |
Bit 0 = | 1b1 | GT 计数启用 |
在上述设置情况下,针对处理器的 IRQ 在全局定时器值达到比较器寄存器编程值时生成。中断处理程序,随后执行以下序列:
在这些情况下,全局定时器会在中断处理程序序列结束时针对处理器生成第二个(假)中断请求。
解决方法详情
由于该问题只有当全局定时器在单发模式下编程时(也就是不使用自动增量特性)才出现,因此第一个合理应急措施就是通过编程全局定时器来使用自动增量特性。
如果该解决方案不可行,第二种应急措施是修改中断处理程序,避免故障序列。在比较器寄存器值增量后,清空全局定时器标记可实现这一目的。中断处理程序的正确代码序列应类似于以下序列:
Answer Number | 问答标题 | 问题版本 | 已解决问题的版本 |
---|---|---|---|
47916 | Zynq-7000 AP SoC 器件:芯片修订差异 | N/A | N/A |
AR# 47545 | |
---|---|
日期 | 06/13/2018 |
状态 | Active |
Type | 设计咨询 |
器件 |