打印
[PIC®/AVR®/dsPIC®产品]

【8月晒板卡】定时器测试

[复制链接]
905|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wgtwgtwgt|  楼主 | 2019-10-27 15:33 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 wgtwgtwgt 于 2019-10-27 19:33 编辑

感谢网友@huahuagg的提醒,今天在microchip官网输入“ATmega4809”搜索:
点击上图红方框中的链接,进入到ATmega4809的资源页面:

在该资源页面的“Documents”区域,有很多非常棒的资源,其中的一个是专门讲解定时器TCA的文档(当然其它外设文档也在该页面中):

下载该文档,翻到第6页,有定时器的详细使用方法介绍,还有基于AS7的例程(托管在github上):


点击上图的github链接,可以跳转的github页面,下载例程:

解压下载好的例程后,会发现有一个.atsIn格式的工程文件:

这时,用AS7打开该工程,如下图所示:

在打开工程过程中,会弹出如下对话框:

若点击上图中的“Download and install”,因国内网络不太给力,又不支持断点续传,即使点击Retry也总是下载失败:

不妨事,直接Close上面两个对话框,不影响源码查阅。工程导入完毕后,会看到有三个可供学习的例程:

这里就拿第三个例程,即定时器的周期性中断来学习。点开该例程下面的main.c文件:


如上图代码所示,首先是一个宏定义,此宏定义指明了定时器的超时时间,时间到,定时器产生溢出中断。它是怎么计算得到的呢?看文档第7页:

由此可见,每250ms,定时器中断一次。
继续看源码,接着是两个函数TCA0_init()和PORT_init():

这两个函数的英文注释非常详细,就不多说了。接着是定时器的中断服务函数和main()函数:

此例程是针对PA0的,每隔250ms在中断服务函数中翻转一次PA0引脚上的电平。注意,在main()函数中sei()是必须的,没有此开总中断函数,是不会有定时器溢出中断响应的,即不会进入到溢出中断服务函数。
好了,编译一下,出现错误。现在就将它移植到Atmel Start工程里。创建Atmel Start工程的方法见帖子。用下述代码代替自动生成的main.c中的代码,其余的文件不用动:

编译无错误,下载到Nano小板上,用户LED灯每250ms闪烁一次:

修改PERIOD_EXAMPLE_VALUE宏的值可以修改定时器溢出时间,怎样修改呢?如下图所示:

若要1秒钟的延时,则将上图中的250改为1000,经过计算得到值0x32D8,将此值赋给PERIOD_EXAMPLE_VALUE宏,则LED0每1秒闪烁一次:


注意,上述定时器时钟使用默认配置,修改时钟频率会影响定时长短。

给microchip/atmel详细的使用文档与参考例程点赞!这些入门教程真不错:

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

45

主题

191

帖子

3

粉丝