【Atmel SAM R21创意大赛周计划】 02 自己添加asf实现delay和方波输出

johnrey   2015-1-14 13:28 楼主
今天从例程过渡到自己建project,首先选
00 new project.png
然后按照板子,输入R21就找到了
01 by board.png
ok以后会在solution里面出现新的project,为了编译,需要设为startup
02 startup.png
这个自己建的就很简单的样子,结构也很清晰,有main,哈哈
03 clear.png
代码很简单,就是有按键按下,灯就亮,抬起呢,灯就灭了。
04 main.png
当然默认里面是没有delay的,那delay去哪里弄呢?这就要用到asf了。alt+W走起。可以看到右边是已经有的asf,而左边则是还能添加的asf。顺利找到delay,居然还分systick和cycle的,想来应该前者用systick实现的,后者用for或者while循环的吧。我们还是选systick。add一下,apply就好了
05 delay asf.png
这时候可以在右边看到多了一个common2,里面就有delay。太神奇的,一个common还要分2个目录。。。。
05 delay asf 02.png
至于这里面的delay怎么用,看过例程的应该很熟悉了。当然也可以去看在线的API,在asf explore中点API 文档,就可以链接过去了。不过有点慢是真的!!
05 delay asf 03.png 05 delay aPI.png
实际在执行的时候,我们调用的是一个宏定义,当然如果我们再看下去,会发现下面还是一个宏定义。真不明白为啥要这样呢,好晕。
05 delay.h.png 05 delay asf 04.png
然后我们开始自己添加代码了,delay_init();敲了前面几个进去,会有自动提示出来的,挺好用的(这个效果不好截图,大家自己试试,可能对微软编译环境熟悉的都碰到过)。可以看到这里没有例程中用的delay_cycle,但是可以试试delay_us,看看精度如何。每次都翻转LED状态。相当于500K的方波。
06 new code.png
实际测试就没有这么理想了,这个一个周期有7.2us。当然按照上面的写法,还要加上pin翻转的时间。于是对不同us_cnt做了测试,实际情况记录如下:
us_cnt=1,高或低电平时间=7.2us
us_cnt=5,高或低电平时间=18us
us_cnt=10,高或低电平时间=33.2us
估算一个pin翻转大概要5us,而这里的us延时大概要3us(2.87)
至于ms级的延时,从1ms开始大概就是1%的误差。考虑到一般用这种延时是粗略性的,ms延时精度足够,但是us级的延时,还是有点不靠谱的。

回复评论 (1)

过来看看~~~~~~~~~~~~~~~~
点赞  2015-1-14 15:34
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复