16回答

0收藏

[评测分享] 【SAMV71精讲精练系列】2、通用IO实操

 

#板卡评测 #板卡评测 13042 人阅读 | 16 人回复 | 2015-11-14

本帖最后由 _烟酒僧_ 于 2015-11-14 12:02 编辑

前一篇帖子算是开了一个好头。

另外,需要补充说明的一点是,上一篇验证了,SAMV71的CPU时钟是可以
高达300MHZ的,但是你千万别指望外设的时钟也能达到300MHZ。
这就好比我们的大脑与四肢,大脑(CPU)的反应速度总是要快于你的手脚
(外设),否则岂不是违背科学了?
有兴趣的可以编程验证一下,当外设时钟设置过高时,CPU会启用一个自保护
程序,阻止程序的烧录,此时,你需要将芯片擦除一次,并且将外设时钟设置
到一个合理的范围,可以继续烧录。

另外,一边读(写)程序,一边学习的方法,是不是比单纯阅读数据手册和
应用文档,更有效率和更有趣一些?
论坛发帖毕竟是一种简单的学习方式,督促自己也方便他人,如果你也是一个
技术狂热者,还可以加群交流 - 单片机嵌入式技术群 162388414,广告或者
素质不佳者免入



这里有两个概念首先需要了解一下,通用GPIO和外设PIO。
这个并不是什么新鲜词,也不是爱特梅尔公司独创。我们都知道,从最基础的
8051单片机开始,IO复用就普遍存在。这涉及到芯片设计的范畴,试想一下,
若非如此,MCU的每一个功能我们都为它单独设计一个PIN,甭说ARM了,就算
8051恐怕也会臃肿成一个“多足虫”。然后焊接、布线、PCBA面积、产品体积等
一系列的问题都出来了……

了解到这些,就足够了。学习一定是要有的放矢,才不至于眉毛胡子一把抓而不得其法。
我记得念书的时候,不少同学非常刻苦却成绩平平,反倒有些该玩玩的那种很拔尖。
你说他聪明吧,肯定是聪明,当然最主要的还是方法,此类人擅长把握事物的核心和本质。
就好像第一次我听说电路板这个词的时候,我们都管它叫PCB,后来工作了发现也
有叫PCBA的。当然这些都不是重点,我们也没必要纠结它到底该叫PCB还是PCBA?

我们只需要了解,GPIO、PIO这二者在写程序的时候是互斥的、有你无我就行。
以下是本篇的正题 - 使用GPIO模式点亮LED0,LED1


需要注意的几点
1、定义一个PIN
#define LED0_PIN PIO_PA23_IDX#define LED1_PIN PIO_PC9_IDX

2、GPIO使用之前需要初始化,调用如下函数
static inline void ioport_init(void)
{
        arch_ioport_init();
}

函数体如下
__always_inline static void arch_ioport_init(void)
{
#ifdef ID_PIOA
        sysclk_enable_peripheral_clock(ID_PIOA);
#endif
#ifdef ID_PIOB
        sysclk_enable_peripheral_clock(ID_PIOB);
#endif
#ifdef ID_PIOC
        sysclk_enable_peripheral_clock(ID_PIOC);
#endif
#ifdef ID_PIOD
        sysclk_enable_peripheral_clock(ID_PIOD);
#endif
#ifdef ID_PIOE
        sysclk_enable_peripheral_clock(ID_PIOE);
#endif
#ifdef ID_PIOF
        sysclk_enable_peripheral_clock(ID_PIOF);
#endif
}

如果我们只使用PA和PC,可以提取出来单独调用如下两个函数
        sysclk_enable_peripheral_clock(ID_PIOA);
        sysclk_enable_peripheral_clock(ID_PIOC);

3、系统时钟初始化void sysclk_init(void)
如果初始化不调用该函数,将默认使用片内4MRC振荡器

以下贴出全部测试代码
游客,如果您要查看本帖隐藏内容请回复






















(End)

-认真做事的人最可爱-
-想学习和交流技术的同行可以进我的群-
-单片机嵌入式技术群 162388414-
分享到:
回复

使用道具 举报

回答|共 16 个

倒序浏览

沙发

ALTIUM2

发表于 2015-11-14 17:06:11 | 只看该作者

  赞一个哇
板凳

_烟酒僧_

发表于 2015-11-14 21:18:05 | 只看该作者

ALTIUM2 发表于 2015-11-14 17:06
赞一个哇

老朋友好久不见了

-认真做事的人最可爱-
-想学习和交流技术的同行可以进我的群-
-单片机嵌入式技术群 162388414-
地板

ALTIUM2

发表于 2015-11-16 23:17:09 | 只看该作者

_烟酒僧_ 发表于 2015-11-14 21:18
老朋友好久不见了

我天天都上来看看的,都潜水的
5#

wangbw2015

发表于 2015-11-17 18:09:07 | 只看该作者

通用GPIO和外设PIO
6#

_LX_

发表于 2016-5-12 13:20:38 | 只看该作者

我也在学习这个芯片,谢谢分享
7#

hellome11

发表于 2016-5-21 20:50:07 | 只看该作者

非常棒 !thanks!非常棒 !
8#

bigbig

发表于 2016-7-31 15:57:58 | 只看该作者

楼主你好,我最近在学习Atmel SAME70开发板,写了一个程序发现延时函数不好用,显示错误       
recipe for target 'src/ASF/common/services/delay/sam/cycle_counter.o' failed
。开始以为是自己的错误,但是打开一个ASF例子还是会出现这个错误,可以帮我看一下么
9#

bigbig

发表于 2016-7-31 16:03:56 | 只看该作者

ALTIUM2 发表于 2015-11-14 17:06
赞一个哇

层主你好,我最近在学习Atmel SAME70开发板,写了一个程序发现延时函数不好用,显示错误       
recipe for target 'src/ASF/common/services/delay/sam/cycle_counter.o' failed
。开始以为是自己的错误,但是打开一个ASF例子还是会出现这个错误,可以帮我看一下么
10#

bigbig

发表于 2016-7-31 16:04:50 | 只看该作者

_烟酒僧_ 发表于 2015-11-14 21:18
老朋友好久不见了

楼主你好,我最近在学习Atmel SAME70开发板,写了一个程序发现延时函数不好用,显示错误       
recipe for target 'src/ASF/common/services/delay/sam/cycle_counter.o' failed
。开始以为是自己的错误,但是打开一个ASF例子还是会出现这个错误,可以帮我看一下么
您需要登录后才可以回帖 注册/登录

本版积分规则

开发工程师
997 积分
39 主题
+ 关注
热门推荐
关闭

站长推荐上一条 /3 下一条