完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
个系统,有了时钟模块,定时器一般是少不了,比如实现实时任务系统,必须需要定时器。定时器模块功能很多,我这种只介绍作为定时器功能的使用,其他模块大家用到的时候,再去看用户手册,慢慢琢磨。 Xmega有一个16位定时、计数模块,主要功能有: 16位定时/计数; 双缓冲定时周期设置; 高达4个组合的比较捕获(CC)通道; 所以比较捕获通道都是双缓冲区; 波形生成器; 输入捕获功能; 定时器溢出或定时器发送错误中断或事件; 每个通道的比较匹配或捕获中断或事件; 提供DMA操作; 针对上述功能,我主要介绍一下定时器溢出功能。 一样的流程,现在Atmel Studio 6.2工程中添加定时器模块驱动,我们在分析代码的基础上来了解定时器功能。具体细节参数数据手册。 |
|
相关推荐
|
|
比如我们需要实现一个1ms的定时器中断功能:
void TC1_Init(void) { // Unmask clock for TCC1 tc_enable(&TCC1); // Enable overflow interrupt tc_set_overflow_interrupt_level(&TCC1, TC_INT_LVL_LO); // Configure TC in normal mode tc_set_wgm(&TCC1, TC_WG_NORMAL); // Configure call back interrupt tc_set_overflow_interrupt_callback(&TCC1, ceb_ovf_interrupt_callback); // Configure TC period and and resolution tc_write_period(&TCC1, sysclk_get_main_hz()/1000); tc_set_resolution(&TCC1, sysclk_get_main_hz()); } 上述就是初始化定时器的过程,tc_enable使能定时器模块,这里使用定时器的TCC1模块;tc_set_overflow_interrupt_level使能定时器溢出中断,和设置定时器溢出中断优先级;tc_set_wgm设置定时器为正常模式,由于定时器有多种操作模式;简单理解就是从0计数到设置的周期值,发生溢出中断,在下一个时钟周期计数器变为0;tc_set_overflow_interrupt_callback设置溢出中断回调函数,当溢出中断时,系统会调用ceb_ovf_interrupt_callback这个回调函数;tc_write_period设置定时器周期;tc_set_resolution设置定时器时钟分频; |
|
|
|
|
|
中断处理函数: ISR(TCC1_OVF_vect) { if (tc_tcc1_ovf_callback) { tc_tcc1_ovf_callback(); } } 中断处理函数驱动中已经添加,所以我们需要处理就是注册回调函数,然后处理回调函数。 回调函数处理: void ceb_ovf_interrupt_callback(void) { RelayDTCnt++; } 根据这个时间计数变量RelayDTCnt就可以完成很多与时间相关的处理了。 |
|
|
|
|
|
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-LCD显示图片编程示例之介绍mmap
238 浏览 0 评论
《DNESP32S3使用指南-IDF版_V1.6》第二章 常用的C语言知识点
629 浏览 0 评论
【RA-Eco-RA2E1-48PIN-V1.0开发板试用】(第三篇)ADC采集+PWM输出
552 浏览 0 评论
《DNK210使用指南 -CanMV版 V1.0》第四十五章 人脸识别实验
552 浏览 0 评论
1074 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11765 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-23 09:31 , Processed in 0.653165 second(s), Total 73, Slave 55 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号