完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
目前,我想使用IfxGtm_Cmu_Clk_1(可选 0~7)作为FXU时钟源,然后通过IfxGtm_Tom_Ch_ClkSrc_cmuFxclk1(1/16)分频器产生 pwm。FXU时钟源的选择,无论我选择哪个时钟源,输出 pwm 的时钟源依旧是主要问题就是,我无法选择除了全局时钟以外的时钟作为 FXU 模块的时钟输入。
我知道可以通过MODULE_GTM.CMU.FXCLK.CTRL.B.FXCLK_SEL = pwm_clk+1;配置输入时钟。 以下是我的代码: static uint32 __tom_pwm_get_clken_mask(IfxGtm_Cmu_Clk pwm_clk){ uint32 __addr = IFXGTM_CMU_CLKEN_CLK0 << pwm_clk * 2; return __addr;}static void __tom_pwm_clock_config_rrd(IfxGtm_Cmu_Clk pwm_clk,float32 pwm_clk_freq){ if (!IfxGtm_isEnabled( MODULE_GTM)) { IfxGtm_enable( MODULE_GTM); } uint32 clken_mask = __tom_pwm_get_clken_mask(pwm_clk); IfxGtm_Cmu_setClkFrequency( MODULE_GTM, pwm_clk, pwm_clk_freq); IfxGtm_Cmu_enableClocks( MODULE_GTM, clken_mask); // 选择FXU模块的输入时钟 MODULE_GTM.CMU.FXCLK.CTRL.B.FXCLK_SEL = pwm_clk+1; IfxGtm_Cmu_enableClocks( MODULE_GTM, IFXGTM_CMU_CLKEN_FXCLK);}static void __tom_pwm_config_rrd(IfxGtm_Tom_ToutMap *pwm_channel, uint32 pwm_count_period,IfxGtm_Tom_Ch_ClkSrc divider_clk){ IfxGtm_Tom_Pwm_Config tom_config; IfxGtm_Tom_Pwm_Driver tom_driver; IfxGtm_Tom_Pwm_initConfig( tom_config, MODULE_GTM); tom_config.clock = divider_clk; tom_config.tom = pwm_channel->tom; tom_config.period = pwm_count_period; tom_config.pin.outputPin = pwm_channel; tom_config.synchronousUpdateEnabled = TRUE; tom_config.tomChannel = pwm_channel->channel; IfxGtm_Tom_Pwm_init( tom_driver, tom_config); IfxGtm_Tom_Pwm_start( tom_driver, TRUE);} 当我通过串口打印module_gtm.cmu.fxclk.ctrl.b.fxclk_sel的时候,显示模块_gtm.cmu.fxclk.ctrl.b.fxclk_sel是有被配置的。是有被配置的。 uint8 FXCLK_SEL = MODULE_GTM.CMU.FXCLK.CTRL.B.FXCLK_SEL; printf("FXCLK_SEL:%drn",FXCLK_SEL); 调试代码: printf("===========================rn"); float freq = IfxGtm_Tom_Ch_getClockFrequency( MODULE_GTM, MODULE_GTM.TOM[IfxGtm_TOM1_15_TOUT7_P02_7_OUT.tom],IfxGtm_TOM1_15_TOUT7_P02_7_OUT.channel); printf("fxclk_freq:%frn",freq); float g_freq =IfxGtm_Cmu_getGclkFrequency( MODULE_GTM); printf("global_freq:%frn",g_freq); float clk_freq = IfxGtm_Cmu_getClkFrequency( MODULE_GTM,IfxGtm_Cmu_Clk_0,TRUE); printf("clk_freq:%frn",clk_freq); uint8 FXCLK_SEL = MODULE_GTM.CMU.FXCLK.CTRL.B.FXCLK_SEL; printf("FXCLK_SEL:%drn",FXCLK_SEL); uint8 clk = IfxGtm_Tom_Ch_getClockSource( MODULE_GTM.TOM[IfxGtm_TOM1_15_TOUT7_P02_7_OUT.tom],IfxGtm_TOM1_15_TOUT7_P02_7_OUT.channel); printf("FXCLK_divider_clk:%drn",clk); 调试信息: 手册资料: |
|
相关推荐
1个回答
|
|
根据您提供的代码,您可以通过以下步骤解决问题:
1. 确保IFXGTM_CMU.FXCLK域的配置寄存器被正确配置,并且设置为允许使用非全局时钟(FXCLK_SEL = 0)。 2. 确保正确选择IfxGtm_Cmu_Clk_1作为FXU时钟源,并将其传递给__tom_pwm_get_clken_mask函数。 3. 在__tom_pwm_get_clken_mask函数中,使用正确的寄存器地址和偏移量计算出FXU的时钟使能位域的掩码值。 4. 将计算出的掩码值写入到相关的寄存器中,以将FXU时钟源设置为IfxGtm_Cmu_Clk_1。 请注意,确保在设置输入时钟源之前,先使能并配置好相关的时钟模块和通道。另外,确保在进行时钟切换时,存在足够的延时以保证时钟切换成功。 最后,确认一下您使用的GTM版本和芯片型号是否支持选择除全局时钟以外的时钟作为FXU模块的时钟源。 |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
《DNESP32S3使用指南-IDF版_V1.6》 第十六章 WATCH_DOG实验
460 浏览 0 评论
【敏矽微ME32G070开发板免费体验】+ADC测试与LED点亮
418 浏览 0 评论
飞凌嵌入式-ELFBOARD ELF 2的硬件知识分享--核心板
352 浏览 0 评论
【敏矽微ME32G070开发板免费体验】\\+Lora通信终端产品开发项目
514 浏览 0 评论
1576 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11969 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-18 10:22 , Processed in 0.750033 second(s), Total 73, Slave 56 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号