完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我目前正在尝试使用 timer0 capture 2 实现简单的占空比测量功能。
初始化/代码 我已经按如下方式初始化了计时器: //defines #define SMT_timer LPC_TIMER0 #define SMT_IRQ TIMER0_IRQn #define SMT_RGU RGU_TIMER0_RST #define SMT_timerNR 0 #define SMT_capNR 2 #define SMT_CLK_MX CLK_MX_TIMER0 #define TIMER0TICKRATEHZ 30000000 //try to be at least 2x7 kHz /* Enable timer clock and reset it */ Chip_TIMER_Init( SMT_timer ); Chip_RGU_TriggerReset(SMT_RGU); while (Chip_RGU_InReset(SMT_RGU)) {} /* Get timer 0 peripheral clock rate */ uint32_t timerFreq; timerFreq = Chip_Clock_GetRate(SMT_CLK_MX); /* Timer setup for match and interrupt at TIMER0TICKRATE_HZ */ Chip_TIMER_Reset(SMT_timer); Chip_TIMER_MatchEnableInt(SMT_timer, SMT_timerNR); Chip_TIMER_SetMatch(SMT_timer, SMT_timerNR, (timerFreq / TIMER0TICKRATEHZ));//SMT_timerNR could need to be 1 Chip_TIMER_ResetOnMatchEnable(SMT_timer, SMT_timerNR); // Chip_TIMER_Enable(LPC_TIMER0); //only done during measurement /* Set input capture */ // Chip_TIMER_Reset( SMT_timer ); Chip_TIMER_CaptureEnableInt(SMT_timer, SMT_capNR); //Capture on T0_CAP2 (BUSY_SMT) // LPC_GIMA->CAP0_IN[SMT_timerNR][SMT_capNR] = 3<<4 | 1<<2; //capture source T3_CAP2 LPC_GIMA->CAP0_IN[SMT_timerNR][SMT_capNR] = 0x20; //0x20 = the T0Cap2 pin in input selection /* Set interrupt priority */ NVIC_SetPriority(SMT_IRQ, 2); 只有当我想以这种方式测量占空比时,计时器才会启动: /* Enable Timer */ Chip_TIMER_Reset( SMT_timer ); Chip_TIMER_CaptureRisingEdgeDisable(SMT_timer, 2);//start looking for a falling edge Chip_TIMER_CaptureFallingEdgeEnable(SMT_timer, 2); Chip_TIMER_ClearCapture(SMT_timer, 2); Chip_TIMER_Enable( SMT_timer ); /* Enable interrupt */ NVIC_EnableIRQ(SMT_IRQ); NVIC_ClearPendingIRQ(SMT_IRQ); 从那时起,IRQ 将处理测量。 void SMT_IRQ_handler() { if (Chip_TIMER_CapturePending(SMT_timer, 2))//if something was captured { Chip_TIMER_ClearCapture(SMT_timer, 2); capvalue0_SMT = Chip_TIMER_ReadCapture(SMT_timer, 2); /* ........... */ } } 问题 上限值一直在寻找非常奇数的数字,这些数字没有按顺序排列。例如捕获值 1 = 5,则下一个捕获值是 1,等等。 捕获的边沿是正确的,因为我已经在示波器上检查过了,添加了一个外部触发(通道 1)引脚,该引脚在测量开始时设置为高电平,并在测量 8 个周期时拉低(该信号连接到通道 2) . 我可以数出我想要测量的 8 个周期。 我不认为保存时间的 unsigned int 在每次捕获之间翻转,因为即使在最高频率 (204MHz) 下,定时器仍然应该能够在翻转前跟踪 21s。但是我完全不知道这里可能是我的问题。 有没有办法以某种方式覆盖时间戳? 我希望我的问题有点清楚,我很感激我能得到的任何形式的提示和帮助! |
|
相关推荐
|
|
只有小组成员才能发言,加入小组>>
1903个成员聚集在这个小组
加入小组我的项目我做主,使用GN+Ninja来完成构建系统(VSCode开发RT106X)
36328 浏览 0 评论
NXP IMX8应用处理器快速入门必备:技巧、使用、设计指南
4391 浏览 0 评论
6038 浏览 1 评论
6757 浏览 0 评论
NXP i.MX6UL开发板(linux系统烧录+规格+硬件+模块移植)使用手册
4206 浏览 0 评论
613浏览 2评论
求助,S32G上Core M启动后如何让Core A在Flash指定位置加载uboot?
610浏览 2评论
ESP32-WROVER-IE + LAN8720以太网,GPIO0电压只有1.6v,无法正常进入spi flash boot模式如何解决?
599浏览 2评论
求分享适用于PN7160 Android的NFC工厂测试应用程序
690浏览 2评论
788浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-15 06:10 , Processed in 0.912228 second(s), Total 47, Slave 40 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号