emiOS GPT 中断未触发(EDGE COUNTER + GPT 配置) 您好, 我正在使用 RTD 6.0.0 处理 S32K344。 我的要求是测量输入 PWM 频率(0 Hz 至 ~10 kHz),以便计算速度。 为此,我在 EDGE COUNTER 模式下使用 eMIOS ICU,以避免每个边沿中断并减少 CPU 负载,并将 eMIOS GPT 作为周期性定时器(100 毫秒或 1 秒),在 GPT 回调中读取边沿计数并计算频率,目的是只使用一个中断(GPT)。 但是,尽管 GPT 计时器似乎配置正确,但中断并未触发 —— emios0_0_irqHandler () 从未被调用,也没有执行 gpt_emiosNotification () 回调。 我附上我的配置以供参考。 能否请您帮忙找出可能遗漏或不正确的地方? 此外,如果能就如何在 S32K3 上精确测量 0-10 kHz 范围内的 PWM 频率(尤其是包括极低频)的最佳方法提出建议,我将不胜感激。 我已经尝试过其他模式,如 ICU_MODE_SIGNAL_MEASUREMENT、ICU_MODE_SIGNAL_EDGE_DETECT 和时间戳模式,但仍面临计数器溢出(16 位限制 ~65535)和极低频率下读数不准确等问题。 预先致谢 Re: eMIOS GPT interrupt not triggering (EDGE COUNTER + GPT configuration) 你好@kapidlitap
关于您的配置,我有几点看法:
您正在将 eMIOS0 通道 0 配置为 GPT。但是,在中断控制器 (intCtrl_IP) 中,你启用了 emios0_0_IRQN 并分配了处理程序 emios0_0_IRQHandler。这与配置通道相关的中断不一致。
根据 S32K344_COMMON.h 中定义的 Interrupt_vector_numbers,映射如下:
EMIOS0_0_IRQn = 61, /**< Interrupt request 23,22,21,20 */
EMIOS0_1_IRQn = 62, /**< Interrupt request 19,18,17,16 */
EMIOS0_2_IRQn = 63, /**< Interrupt request 15,14,13,12 */
EMIOS0_3_IRQn = 64, /**< Interrupt request 11,10,9,8 */
EMIOS0_4_IRQn = 65, /**< Interrupt request 7,6,5,4 */
EMIOS0_5_IRQn = 66, /**< Interrupt request 3,2,1,0 */
根据这一映射,eMIOS0 通道 0 属于中断组 EMIOS0_5_IRQn,而不是 EMIOS0_0_IRQn。因此,应使用正确的中断配置:
IRQn:EMIOS0_5_IRQn
处理程序:EMIOS0_5_IRQHandler(请参阅 Emios_Mcl_Ip_Irq.c)。
关于输入捕获,有几个可用的示例。请查看并选择最符合您预期功能的选项。
使用 EMIOS DS3.5 RTD300 的 IP S32K312 PWM ICU 示例
示例:S32K312 EMIO PWM 生成及使用中断捕获占空比 (DS3.5 RTD300)
示例 IP S32K312 EMIO PWM Generation & 使用轮询进行占空捕获 DS3.5 RTD300
带 DMA S32DS 3.6.2 的 S32K344 eMIOS Icu 示例RTD 6.0.0
BR、VaneB
記事全体を表示