完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我使用的是 AURIX TC39,想使用 TOM 的三个通道 CH0、CH4 和 CH5 来产生中断。 我的目标是不使用 IfxGtm_Tom_Pwm.h 中的默认结构。 图书馆 过去,我曾使用过一种触发 TOM 通道中断的方法,其配置如下:
GTM_TOM0_CH0_IRQ_EN.B.CCU0TC_IRQ_EN=1; GTM_TOM0_CH0_IRQ_MODE.B.IRQ_MODE=0; /* 电平模式中断 */ volatile Ifx_SRC_SRCR *src1; src1 = IfxGtm_Tom_Ch_getSrcPointer(NULL_PTR, IfxGtm_Cluster_0, IfxGtm_Tom_Ch_0); IfxSrc_init(src1, IfxSrc_Tos_cpu0,(uint16) WHATCHDOG_PRIO); IfxSrc_enable(src1); 一切似乎都运转正常。 在我目前正在开发的应用程序中,我希望使用 TOM 的 3 个通道来处理三个不同的中断。 首先,我还启用了 TOM 通道 CH4,以便通过以下配置产生中断: GTM_TOM0_CH0_IRQ_EN.B.CCU0TC_IRQ_EN=1; GTM_TOM0_CH0_IRQ_MODE.B. IRQ_MODE=0; /* 电平模式中断 */ volatile Ifx_SRC_SRCR *src1; rc1 = IfxGtm_Tom_CH0_IRQ_MODE.B.IRQ_MODE=0; /* 电平模式中断 */IRQ_MODE=0; /* 电平模式中断 */ volatile Ifx_SRC_SRCR *src1; src1= IfxGtm_Tom_Ch_getSrcPointer(NULL_PTR, IfxGtm_Cluster_0, IfxGtm_Tom_Ch_0); IfxSrc_init(src1, IfxSrc_Tos_cpu0,(uint16) WHATCHDOG_PRIO); IfxSrc_enable(src1); /* CH4 中断配置 */ GTM_TOM0_CH4_IRQ_EN.B.CCU0TC_IRQ_EN=1; GTM_TOM0_CH4_IRQ_MODE.B.IRQ_MODE=0; /* 电平模式中断 */ volatile Ifx_SRC_SRCR *src3; src3 = IfxGtm_Tom_Ch_getSrcPointer(NULL_PTR, IfxGtm_Cluster_0, IfxGtm_Tom_Ch_4); IfxSrc_init(src3, IfxSrc_Tos_cpu1,(uint16) ENABLE_TRIGGER); IfxSrc_enable(src3); 接下来,通过添加 TOM CH5 来产生中断,我发现即使设置 GTM_TOM0_CH5_IRQ_EN.B.CCU0TC_IRQ_EN=0,程序也会停止运行;我想问一下这种中断配置方法是否正确。 如果对您有帮助,我在下面留下三个通道的最终配置: GTM_TOM0_CH0_IRQ_EN.B.CCU0TC_IRQ_EN=1; GTM_TOM0_CH0_IRQ_MODE.B.IRQ_MODE=0; /* 电平模式中断 */ volatile Ifx_SRC_SRCR *src1; src1 = IfxGtm_Tom_Ch_getSrcPointer(NULL_PTR, IfxGtm_Cluster_0, IfxGtm_Tom_Ch_0); IfxSrc_init(src1, IfxSrc_Tos_cpu0,(uint16) WHATCHDOG_PRIO); IfxSrc_enable(src1); /* CH4 中断配置 */ GTM_TOM0_CH4_IRQ_EN.B.CCU0TC_IRQ_EN=1; GTM_TOM0_CH4_IRQ_MODE.B.IRQ_MODE=0; /* 电平模式中断 */ volatile Ifx_SRC_SRCR *src3; src3 = IfxGtm_Tom_Ch_getSrcPointer(NULL_PTR, IfxGtm_Cluster_0, IfxGtm_Tom_Ch_4); IfxSrc_init(src3, IfxSrc_Tos_cpu1,(uint16) ENABLE_TRIGGER); IfxSrc_enable(src3); /* CH5 中断配置 */ GTM_TOM0_CH5_IRQ_EN.B.CCU0TC_IRQ_EN=1; gtm_tom0_ch5_irq_mode.b.irq_mode=0; volatile Ifx_SRC_SRCR *src4; src4 = IfxGtm_Tom_Ch_getSrcPointer(NULL_PTR, IfxGtm_Cluster_0, IfxGtm_Tom_Ch_5); IfxSrc_init(src4, IfxSrc_Tos_cpu3,(uint16) CONTROL); IfxSrc_enable(src4); |
|
相关推荐
1个回答
|
|
在这个问题中,您想要使用AURIX TC39的TOM(Timer Output Module)的三个通道CH0、CH4和CH5来产生中断,而不使用IfxGtm_Tom_Pwm.h中的默认结构。您已经提供了一种触发TOM通道中断的方法,但是您可能需要对代码进行一些调整以满足您的需求。以下是一些建议和步骤,以帮助您实现目标:
1. 首先,确保您已经正确配置了TOM模块。这包括设置时钟、预分频器、计数器模式等。您可以查阅AURIX TC39的参考手册以获取更多详细信息。 2. 对于每个通道(CH0、CH4和CH5),您需要配置相应的寄存器以启用中断。以下是一些示例代码: ```c // 配置CH0 GTM_TOM0_CH0_IRQ_EN.B.CCU0TC_IRQ_EN = 1; GTM_TOM0_CH0_IRQ_MODE.B.IRQ_MODE = 0; // 电平模式中断 // 配置CH4 GTM_TOM0_CH4_IRQ_EN.B.CCU0TC_IRQ_EN = 1; GTM_TOM0_CH4_IRQ_MODE.B.IRQ_MODE = 0; // 电平模式中断 // 配置CH5 GTM_TOM0_CH5_IRQ_EN.B.CCU0TC_IRQ_EN = 1; GTM_TOM0_CH5_IRQ_MODE.B.IRQ_MODE = 0; // 电平模式中断 ``` 3. 接下来,为每个通道创建并初始化中断源(SRC)。以下是一些示例代码: ```c volatile Ifx_SRC_SRCR *src1, *src2, *src3; // CH0中断源 src1 = IfxGtm_Tom_Ch_getSrcPointer(NULL_PTR, IfxGtm_Cluster_0, IfxGtm_Tom_Ch_0); IfxSrc_init(src1, IfxSrc_Tos_cpu0, (uint16)WHATCHDOG_PRIO); IfxSrc_enable(src1); // CH4中断源 src2 = IfxGtm_Tom_Ch_getSrcPointer(NULL_PTR, IfxGtm_Cluster_0, IfxGtm_Tom_Ch_4); IfxSrc_init(src2, IfxSrc_Tos_cpu0, (uint16)WHATCHDOG_PRIO); IfxSrc_enable(src2); // CH5中断源 src3 = IfxGtm_Tom_Ch_getSrcPointer(NULL_PTR, IfxGtm_Cluster_0, IfxGtm_Tom_Ch_5); IfxSrc_init(src3, IfxSrc_Tos_cpu0, (uint16)WHATCHDOG_PRIO); IfxSrc_enable(src3); ``` 4. 最后,为每个通道编写中断服务例程(ISR)。在ISR中,您可以执行所需的任务,例如更新PWM值、处理传感器数据等。以下是一些示例代码: ```c void CH0_ISR(void) { // 在这里编写CH0中断服务例程 } void CH4_ISR(void) { // 在这里编写CH4中断服务例程 } void CH5_ISR(void) { // 在这里编写CH5中断服务例程 } ``` 5. 确保在您的项目中正确连接中断服务例程与中断源。这通常在启动代码中完成。 通过遵循上述步骤,您应该能够成功地使用AURIX TC39的TOM的三个通道CH0、CH4和CH5来产生中断。如果您在实现过程中遇到任何问题,请随时提问,我会尽力帮助您。 |
|
|
|
只有小组成员才能发言,加入小组>>
请教个XMC1404调试串口接收时为什么一直无法接收数据的问题
364 浏览 0 评论
TLE9879_BLDC电机启动需要用手拨一下才能转动,怎么解决?
6296 浏览 2 评论
4108 浏览 9 评论
请问TLE5012B_E1000 启动后为什么位置不能正确获取
3634 浏览 9 评论
1232 浏览 8 评论
459浏览 2评论
272浏览 2评论
378浏览 2评论
TLE9879_BLDC电机启动需要用手拨一下才能转动,怎么解决?
6320浏览 2评论
如果是打开已有的dave工程,怎么查看这个工程选择的mcu型号?
459浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-25 03:25 , Processed in 1.205084 second(s), Total 45, Slave 40 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号