This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] AM2632:SysTick 中断停止。

Guru**** 2379050 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1500198/am2632-systick-interrupt-stops

器件型号:AM2632

工具/软件:

我运行的是 FreeRTOS、使用 SDK 10.01.00.31。  我配置了不少外设、包括 ADC 和3个 UART。  但没有太多代码用于该测试。  我提到 ADC 是因为以前的 SDK 在启用 ADC 并让 SysTick 正确启动方面存在问题。  在执行期间的某个时刻、除了与日志记录端口进行串行通信和与 TI BQ79361进行通信外没有其他任何其他情况。 BQ 以1Mbit 的速率串行运行、因此这里会产生一些"快速"中断。  我提到了串行端口、因为我可以让 SysTick 中断随着更多串行通信的发生而更快地停止。

运行后、通常在一分钟或2分钟内、SysTick 中断只是停止(中断84)。  当我说停止时、HwiP_IRQ_HANDLER_c ()函数永远不会为 SysTick 中断再次调用。  如果 ADC 被配置为连续运行、则会调用 HwiP_IRQ_HANDLER_c ()来实现 ADC 中断。

下面是 RTI0寄存器处于此状态时的快照。  我可以看出、计时器仍在运行:RTIFRC0、RTIUC0和 RTICOMP0仍在更新。  其他寄存器设置在我看来应该会生成中断、但没有发生中断。  我可以在其他地方寻找掩码位吗、看看它是否在其他地方被屏蔽?

如果 RTI0寄存器中的屏蔽位或其他设置不正确、可能是什么原因导致的?  同样、发生了很多串行中断-是否有问题?

感谢您的帮助。

RTI0_RTI0       MSS_GPIO    
   RTI0_RTIGCTRL   0x00000001   存储器已映射    
   RTI0_RTITBCTRL   0x00000000   存储器已映射    
   RTI0_RTICAPCTRL   0x00000000   存储器已映射    
   RTI0_RTICOMPCTRL   0x00000000   存储器已映射    
   RTI0_RTIFRC0   0x000589EB   存储器已映射    
   RTI0_RTIUC0   0x00004239   已映射存储器    
   RTI0_RTICPUC0   0x000061A7   已映射存储器    
   RTI0_RTICAFRC0   0x00000000   存储器已映射    
   RTI0_RTICAUC0   0x00000000   存储器已映射    
   RTI0_RTIFRC1   0x0000875D   已映射存储器    
   RTI0_RTIUC1   0x00000034   已映射存储器    
   RTI0_RTICPUC1   0x00000000   已映射存储器    
   RTI0_RTICAFRC1   0x00000000   已映射存储器    
   RTI0_RTICAUC1   0x00000000   存储器已映射    
   RTI0_RTICOMP0   0x000589F8   映射了存储器    
   RTI0_RTIUDCP0   0x00000001   存储器已映射    
   RTI0_RTICOMP1   0x00000000   存储器已映射    
   RTI0_RTIUDCP1   0x00000000   存储器已映射    
   RTI0_RTICOMP2   0x00000000   存储器已映射    
   RTI0_RTIUDCP2   0x00000000   已映射存储器    
   RTI0_RTICOMP3   0x00000000   已映射内存    
   RTI0_RTIUDCP3   0x00000000   存储器已映射    
   RTI0_RTITBLCOMP   0x00000000   存储器已映射    
   RTI0_RTITBHCOMP   0x00000000   存储器已映射    
   RTI0_RTISETINT   0x00000003   存储器已映射    
   RTI0_RTICLEARINT   0x00000003   已映射存储器    
   RTI0_RTIINTFLAG   0x0000000F   存储器已映射    
   RTI0_RTIDWDCTRL   0x5312ACED   存储器已映射    
   RTI0_RTIDWDPRLD   0x00000FFF   存储器已映射    
   RTI0_RTIWDSITUS   0x00000000   存储器已映射    
   RTI0_RTIWDKEY   0x0000A35C   存储器已映射    
   RTI0_RTIDWDCNTR   0x002DFFFF   存储器已映射    
   RTI0_RTIWWDRXNCTRL   0x00000005   已映射存储器    
   RTI0_RTIWWDSIZECTRL   0x00000005   已映射存储器    
   RTI0_RTIINTCLRENABLE   0x05050505   映射了存储器    
   RTI0_RTICOMP0CLR   0x00000000   存储器已映射    
   RTI0_RTICOMP1CLR   0x00000000   存储器已映射    
   RTI0_RTICOMP2CLR   0x00000000   存储器已映射    
   RTI0_RTICOMP3CLR   0x00000000   存储器已映射    

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    对响应延迟深表歉意、
    我目前不知道任何 RTI 掩码会导致  HwiP_IRQ_HANDLER_c()函数停止被调用。  
    为了澄清:你是否能够看到 HwiP_IRQ_HANDLER_c ()是否一直处于中断状态? 或者、中断是否被清除、然后再也不会被再次触发? 可能会设置中断标志、但从不清除中断标志、因此不再触发中断。

    使用 MCU SDK 优化应用 时、我们更详细地介绍了中断处理。

    此致、

    Susan

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    HwiP_IRQ_HANDLER_c()永远不会为中断84再次调用。  据我所知并查看已粘贴的 RTI 寄存器、中断被清除、但它永远不会再次发生。  我们确实会继续看到配置的2个 ADC 中断。

    我粘贴的 RTI 寄存器来自系统处于此状态的情况:即无 SysTick (无中断84)。  对我来说、它们看起来是正确的、允许计时器运行和生成中断。  您能验证一下吗?  我应该查看其他哪些特定的寄存器和屏蔽位、看看它们是否确实被屏蔽了?  

    我已经通读了您发布的有关优化应用程序的链接、但所有这些配置和初始化都是使用 SYSCFG 完成的、不是吗?  如果我们可以确定什么设置可以防止中断发生、他们也许我们可以弄清楚它为什么会进入该状态。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    很抱歉这里没有回复、

    我将深入研究今天的中断控制器以及 RTI 寄存器、以确保没有我错过的掩码、并联系我们的软件团队以了解它们是否知道导致该问题的原因。  
    我将在今天结束时发布我的任何更新。

    感谢您的耐心、

    Susan

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好:

    我再次查看了这里的寄存器、根据  RTI0_RTIINTFLAG、有4个中断待处理。 您似乎并未启用自动清除功能、因此您是在 ISR 中清除中断标志以及清除中断吗?

    您还可以检查 VIM (矢量中断管理器)寄存器、以检查正在触发哪些中断。 VIM 寄存器位于寄存器附录的 R5SS 部分中。

    此致、

    Susan Moore