完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
本例演示的是使用SAM4L68脚PC04作为波形输出,
然后使用66脚PC02作为波形捕获输入通道, 对该PIN捕获的脉冲数、周期、脉宽进行计数。 先来看看实验的现象,烧录程序后,默认的方波设置是 频率178Hz,占空比30% 逻辑分析仪捕获到的波形如下 特别需要注意的是,SAM4L-EK开发板的排座和跳线帽比较多,此例需要即将PC02与PC04 两个PIN进行短接,即下图中的PIN3与PIN7 再次将频率和占空比分别设置为1000Hz80% 逻辑分析仪测试到的波形如下,可以看到产生的波形还是很精准的 其中占空比也有可以用上图计数到的RA和RB的真实时间来计算,如下 以(178HZ,30%)为例, 4212-2948/4212 = 0.30009 我们将J4 PIN3与PIN7连接的杜邦线给断开, 测试的结果如下,可以看到,捕获通道此时并没有捕获到任何脉冲 波形捕获的中断函数如下,图中指示的变量使用来计数捕获到的脉冲数的 波形产生于捕获的相关初始化函数: static void tc_waveform_initialize(void) { uint32_t ra, rc; /* Configure the PMC to enable the TC module. */ sysclk_enable_peripheral_clock(ID_TC_WAVEFORM); #if SAMG55 /* Enable PCK output */ pmc_disable_pck(PMC_PCK_3); pmc_switch_pck_to_mck(PMC_PCK_3, PMC_PCK_PRES_CLK_1); pmc_enable_pck(PMC_PCK_3); #endif /* Init TC to waveform mode. */ tc_init(TC, TC_CHANNEL_WAVEFORM, /* Waveform Clock Selection */ gc_waveconfig[gs_uc_configuration].ul_intclock | TC_CMR_WAVE /* Waveform mode is enabled */ | TC_CMR_ACPA_SET /* RA Compare Effect: set */ | TC_CMR_ACPC_CLEAR /* RC Compare Effect: clear */ | TC_CMR_CPCTRG /* UP mode with automatic trigger on RC Compare */ ); /* Configure waveform frequency and duty cycle. */ rc = (sysclk_get_peripheral_bus_hz(TC) / divisors[gc_waveconfig[gs_uc_configuration].ul_intclock]) / gc_waveconfig[gs_uc_configuration].us_frequency; tc_write_rc(TC, TC_CHANNEL_WAVEFORM, rc); ra = (100 - gc_waveconfig[gs_uc_configuration].us_dutycycle) * rc / 100; tc_write_ra(TC, TC_CHANNEL_WAVEFORM, ra); /* Enable TC TC_CHANNEL_WAVEFORM. */ tc_start(TC, TC_CHANNEL_WAVEFORM); printf("Start waveform: Frequency = %d Hz,Duty Cycle = %2d%%nr", gc_waveconfig[gs_uc_configuration].us_frequency, gc_waveconfig[gs_uc_configuration].us_dutycycle); } /** * brief Configure TC TC_CHANNEL_CAPTURE in capture operating mode. */ //! [tc_capture_init] static void tc_capture_initialize(void) { /* Configure the PMC to enable the TC module */ sysclk_enable_peripheral_clock(ID_TC_CAPTURE); #if SAMG55 /* Enable PCK output */ pmc_disable_pck(PMC_PCK_3); pmc_switch_pck_to_mck(PMC_PCK_3, PMC_PCK_PRES_CLK_1); pmc_enable_pck(PMC_PCK_3); #endif /* Init TC to capture mode. */ tc_init(TC, TC_CHANNEL_CAPTURE, TC_CAPTURE_TIMER_SELECTION /* Clock Selection */ | TC_CMR_LDRA_RISING /* RA Loading: rising edge of TIOA */ | TC_CMR_LDRB_FALLING /* RB Loading: falling edge of TIOA */ | TC_CMR_ABETRG /* External Trigger: TIOA */ | TC_CMR_ETRGEDG_FALLING /* External Trigger Edge: Falling edge */ ); } //! [tc_capture_init] 限于篇幅 ,此篇就不就数据结构和程序流程进行详细分析了。 |
|
相关推荐
|
|
205 浏览 0 评论
求助一下关于51系列单片机的Timer0的计时问题,TH0、TL0+1的时间是怎么算的?
1253 浏览 1 评论
【RA-Eco-RA4E2-64PIN-V1.0开发板试用】开箱+Keil环境搭建+点灯+点亮OLED
848 浏览 0 评论
【敏矽微ME32G070开发板免费体验】使用coremark测试敏矽微ME32G070 跑分
853 浏览 0 评论
【敏矽微ME32G070开发板免费体验】开箱+点灯+点亮OLED
1073 浏览 2 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
12012 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 23:55 , Processed in 0.504934 second(s), Total 61, Slave 44 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号