今天知道了,这个solution呢和其他的工作空间概念相似,是多个project的集合。因此今天就在上次的solution D21 test下开始,先打开solution。添加一个新的project,这个过程和上次的一样就不多说了,主要区别就是add to solution
然后set as start up,就应该是默认的项目了吧,没找到其他可能的选项。按照板子出来的呢,就还是这个按键控制LED。我们来熟悉一下文档结构。大概有库函数和源代码两部分。lib比较少,就一个math和libm,估计暂时用不到。
src里面有ASF、config和main.c组成。board.h是对各种板子的定义,而D21这个板子的各种资源在samd21_xplained_pro.h中定义,然后在board_init.c中实现板子的初始化。初始化代码很简单,就是设定LED为输出,button为输入。其中对IO操作时还调用port.h和port.c中的函数
下面尝试添加ADC的驱动。使用alt+W启动asf,按add添加的查询方式的adc api,
跳出警告,同意即可
添加完以后,字体会从斜体变成正常。添加后还可以继续选poll还是callback
可是怎么玩呢?进入asf explore,找到adc的quick start guide,可惜都是联网去网站上看的英文。
还好流程是比较清楚的,先按官方流程来copy吧(
http://asf.atmel.com/docs/3.17.0 ... basic_use_case.html)。基本是选用的默认配置,上电测量一次。入口是Positive input on ADC PIN 0。应该是AIN0吧,查了查,是ext3的PA02。
给PA02上VCC,应该出来12bit的最大值。然后debug,结果 optimized out,查了下,应该是编译优化的原因。改称O0就好了,出来4095咯。
然后把代码搬运到while里面,每次按键测一个adc,因为使用1v作为ref,所以1v以上全部是4095,测试了1v以下,默认的还是有些误差的。看图。当然可以根据测量的结果,从ad到实际电压做一个比例变化,比如不是乘以100,而已980,那么最后结果还是比较准的。
这么一遍流程下来,觉得as也算好用啊,哈哈。最后上一张连接的硬件图。
最后是代码包,为啥那么大呢??压缩前14M