完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我目前使用的开发板和SDK是HPM6200_EVK和HPM_SDKv1.1
我希望使用HPM6280的GPTMR的CH0与CH1输出互补的PWM波形,通过以下代码,我成功在两个通道上输出了频率为100khz,占空比为50%的PWM波形。当然由于两个通道开始计数的时间有差别,CH1的波形有一定的延迟。 int main(void) { board_init(); HPM_IOC->PAD[IOC_PAD_PC08].FUNC_CTL = IOC_PC08_FUNC_CTL_GPTMR2_COMP_0; HPM_IOC->PAD[IOC_PAD_PC09].FUNC_CTL = IOC_PC09_FUNC_CTL_GPTMR2_COMP_1; uint32_t reload = 1000; // set the channel 0 gptmr_channel_config_t config_ch0; gptmr_channel_get_default_config(HPM_GPTMR2, &config_ch0); config_ch0.reload = reload; config_ch0.cmp[0] = reload/2; config_ch0.cmp[1] = reload; config_ch0.enable_software_sync = true; config_ch0.cmp_initial_polarity_high = false; gptmr_channel_config(HPM_GPTMR2, 0, &config_ch0, false); gptmr_channel_reset_count(HPM_GPTMR2, 0); // set the channel 1 gptmr_channel_config_t config_ch1; gptmr_channel_get_default_config(HPM_GPTMR2, &config_ch1); config_ch1.reload = reload; config_ch1.cmp[0] = reload/2; config_ch1.cmp[1] = reload; config_ch1.enable_software_sync = true; config_ch1.cmp_initial_polarity_high = true; gptmr_channel_config(HPM_GPTMR2, 1, &config_ch1, false); gptmr_channel_reset_count(HPM_GPTMR2, 1); //start counting gptmr_start_counter(HPM_GPTMR2, 0); gptmr_start_counter(HPM_GPTMR2, 1); while(1) { } } 我准备使用GPTMR的软件同步机制使两个通道的输出同步。如上面代码所示,我已经在配置CH0和CH1的时候使能了软件同步。不过,我对以下这个函数的用法不太确定。 /** * @brief gptmr trigger channel software sync * * @param [in] ptr GPTMR base address * @param [in] ch_index_mask channel index mask */ static inline void gptmr_trigger_channel_software_sync(GPTMR_Type *ptr, uint32_t ch_index_mask) { ptr->GCR = ch_index_mask; } 第一个参数很明确,但是第二个参数我不太确定应该填什么。结合手册对GCR寄存器的描述,我猜测想要触发CH0和CH1就需要向GCR寄存器写入“3”,即32‘b11,因此我将上述代码的最后一部分改为了以下的样子。 //start counting gptmr_trigger_channel_software_sync(HPM_GPTMR2, 3); //gptmr_start_counter(HPM_GPTMR2, 0); //gptmr_start_counter(HPM_GPTMR2, 1); while(1) { } } 很遗憾的是我失败了,定时器不再输出pwm波形。希望hpm可以介绍一下软件同步的具体用法。 |
|
相关推荐
1个回答
|
|
应当先开始计数,再使用软件触发同步
//start counting gptmr_start_counter(HPM_GPTMR2, 0); gptmr_start_counter(HPM_GPTMR2, 1); gptmr_trigger_channel_software_sync(HPM_GPTMR2, 3); |
|
|
|
只有小组成员才能发言,加入小组>>
383个成员聚集在这个小组
加入小组507 浏览 0 评论
529 浏览 1 评论
634 浏览 0 评论
先楫HPM6E00技术日 | 百人研讨共话工业应用创新及发展趋势
865 浏览 0 评论
884 浏览 0 评论
【盖楼抢好礼】欢迎先楫半导体HPMicro入驻电子发烧友社区!
22489浏览 532评论
2175浏览 22评论
USBX范例中启用 double FPU , 运行异常,卡死在tx_risc_v_trap_handler函数
2827浏览 5评论
1631浏览 5评论
请问Segger Embedded Studio这个窗口不小心拉出来悬浮后怎么塞回去?
2744浏览 5评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-18 11:23 , Processed in 0.901600 second(s), Total 77, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号