公告

大中华汽车电子生态圈社区并入开发者社区- 更多资讯点击此

Tip / 登入 to post questions, reply, level up, and achieve exciting badges. Know more

cross mob
Translation_Bot
Community Manager
Community Manager
Community Manager

你好,

我正在查看示例代码,想知道为什么 XMC_CCU4_EnableShadowTransfer API 会被调用两次。

一旦在void CCU40_0_IRQHandler(void)中{

...

/* 为新的 PWM 值更新启用影子传输 */

XMC_CCU4_EnableShadowTransfer(MODULE_PTR, XMC_CCU4_SHADOW_TRANSFER_SLICE_0);

}

 

和一次在int main(void) {

...

/* 启用影子传输 */

XMC_CCU4_EnableShadowTransfer(MODULE_PTR, \)

(uint32_t)(XMC_CCU4_SHADOW_TRANSFER_SLICE_0|\)

xmc_ccu4_shadow_transfer_prescaler_slice_0));

...

}

 

最好的问候

smartconx_target@Q!w2e3r4t5y6u7i8o9p0||/t5/XMC/Reference-Application-Note-AP32287-Example-1-Periodically-Changing-the-PWM-Cycle/td-p/694146

0 点赞
1 解答
Translation_Bot
Community Manager
Community Manager
Community Manager

亲爱的普拉迪普

如何调用 CCU40_0_IRQHandler?

这是设备启动文件中定义的处理程序名称。 以 XMC1100 为例,启动文件为 "startup_XMCxx00.S":

/* XMC1100 外围设备服务请求 (SR) 的中断处理程序 */

...

条目 CCU40_0_IRQHandler /* SR CCU40_0 的处理程序名称 */

...

在文件 "XMCxx00.h "中 您会发现CCU40_0_IRQn= 21, /*!< CCU40 SR0 中断 */

您可以在 int main(void) 中使用的函数中找到这些函数,如下所示:

/* 设置 NVIC 优先级 */

NVIC_SetPriority(CCU40_0_IRQn, 3U);

 

/* 启用 IRQ */

NVIC_EnableIRQ(CCU40_0_IRQn);

 

最好的问候

Jousif

smartconx_target@Q!w2e3r4t5y6u7i8o9p0||/t5/XMC/Reference-Application-Note-AP32287-Example-1-Periodically-Changing-the-PWM-Cycle/m-p/695917

在原帖中查看解决方案

0 点赞
5 回复数
Translation_Bot
Community Manager
Community Manager
Community Manager

你好@Jedison

API XMC_CCU4_SLICE_SetTimerCompareMatch() 通过写入 CC4yCRS(比较寄存器的阴影寄存器)来编程定时器比较值。

通过调用带有适当掩码的 XMC_CCU4_EnableShadowTransfer(),显式启用周期/比较值的影子传输,将把值从影子寄存器传输到实际寄存器。

因此,这些寄存器(比较寄存器、周期寄存器)的更新只能通过向
相关的影子寄存器写入新值并等待影子传输发生来完成。

因此,在上述案例中,您在主函数中配置了分片,因此调用了影子传输 API,将比较值和周期值从影子寄存器写入实际寄存器。

之后,在 ISR 中,您需要改变 PWM 的占空比,这可以通过改变比较寄存器的值来实现,因此您需要再次调用影子传输,将新的比较值写入实际的比较寄存器。

希望对您有所帮助,如有任何疑问,请联系我们。

最好的问候
Pradeep。

smartconx_target@Q!w2e3r4t5y6u7i8o9p0||/t5/XMC/Reference-Application-Note-AP32287-Example-1-Periodically-Changing-the-PWM-Cycle/m-p/694301

0 点赞
Translation_Bot
Community Manager
Community Manager
Community Manager

亲爱的普拉迪普

非常感谢你的解释。

请您解释一下程序的流程:我假定首先是主程序,然后是 CCU40_0_IRQHandler,然后对 33.3 % 和 66.7 % 的值进行迭代?

如果是,如何调用 CCU40_0_IRQHandler? 主功能中没有提及。

最诚挚的问候,

Jousif

smartconx_target@Q!w2e3r4t5y6u7i8o9p0||/t5/XMC/Reference-Application-Note-AP32287-Example-1-Periodically-Changing-the-PWM-Cycle/m-p/694334

0 点赞
Translation_Bot
Community Manager
Community Manager
Community Manager

你好@Jedison

您指的是示例中的哪一部分? 请告诉我们该部分的内容。

最好的问候
Pradeep。

smartconx_target@Q!w2e3r4t5y6u7i8o9p0||/t5/XMC/Reference-Application-Note-AP32287-Example-1-Periodically-Changing-the-PWM-Cycle/m-p/694625

0 点赞
Translation_Bot
Community Manager
Community Manager
Community Manager

你好 Pradeep,

main.c 中有 2 个函数 例 1 的文件周期性地改变 PWM 周期。

我感兴趣的第一个函数是 void CCU40_0_IRQHandler(void)

我感兴趣的第二个函数是int main(void)

代码流程如何? 如何以及何时调用void CCU40_0_IRQHandler(void) int main(void)。 我想了解这个概念。 因为void CCU40_0_IRQHandler(void)不是在int main(void) 中调用的。

非常感谢。

最诚挚的问候,

Jousif

smartconx_target@Q!w2e3r4t5y6u7i8o9p0||/t5/XMC/Reference-Application-Note-AP32287-Example-1-Periodically-Changing-the-PWM-Cycle/m-p/695012

0 点赞
Translation_Bot
Community Manager
Community Manager
Community Manager

亲爱的普拉迪普

如何调用 CCU40_0_IRQHandler?

这是设备启动文件中定义的处理程序名称。 以 XMC1100 为例,启动文件为 "startup_XMCxx00.S":

/* XMC1100 外围设备服务请求 (SR) 的中断处理程序 */

...

条目 CCU40_0_IRQHandler /* SR CCU40_0 的处理程序名称 */

...

在文件 "XMCxx00.h "中 您会发现CCU40_0_IRQn= 21, /*!< CCU40 SR0 中断 */

您可以在 int main(void) 中使用的函数中找到这些函数,如下所示:

/* 设置 NVIC 优先级 */

NVIC_SetPriority(CCU40_0_IRQn, 3U);

 

/* 启用 IRQ */

NVIC_EnableIRQ(CCU40_0_IRQn);

 

最好的问候

Jousif

smartconx_target@Q!w2e3r4t5y6u7i8o9p0||/t5/XMC/Reference-Application-Note-AP32287-Example-1-Periodically-Changing-the-PWM-Cycle/m-p/695917

0 点赞