TA的每日心情 | 开心 2014-5-23 20:30 |
---|
签到天数: 7 天 连续签到: 1 天 [LV.3]偶尔看看II
|
本帖最后由 zww 于 2014-5-17 15:05 编辑
D21端口模块信息:
1. 有两组IO端口(PA和PB),每组高达32条IO线。为了提高访问速度CPU有一条专用总线(IOBUS)与端口模块连接,端口输入输出寄存器可以通过这条总线进行单周期访问。
2. 每个引脚可灵活配置为GPIO,复用外设功能,或者配置为模拟功能。如下图:
3. 作为GPIO时可通配置为输入/输出,如下图:
通过DIR方向寄存器,OUT输出寄存器和PINCFGy管脚寄存器的INEN 、PULLEN位可灵活的配置为多种模式,如下表:
4.DIR方向寄存器和OUT输出寄存器除了可以直接赋值外还可以通过DIRCLR/OUTCLR清零寄存器和DIRSET/OUTSET置位寄存器对某些为进行改变,例如如果想让OUT寄存器的某些为清零,只要在OUTCLR写入一个值,OUT寄存器想要清零的位就把这个值对应的为变为1,这样通过OUTCLR寄存器就可以把为1对应OUT寄存器中相应的位清零了,OUTCLR中为0的位将不会影响OUT寄存器中相应的位,也就是说写1有效。其实这个功能其它单片机也有,但D21独创的一点是加入了DIRTGL/OUTTGL翻转寄存器,只要向对应的位写1就可以翻转DIR/OUT中相应的位,避免了传统的"读-取反-写"操作,做LED闪烁相当方便,接下来的LED测试程序就要用到它.
5. 其它寄存器包括CTRL端口控制寄存器,用于配置输入各引脚的synchronizer同步器是否启用.WRCONFIG用于批量修改PINCFG和MUX多路选择器,当多个引脚配置一样时非常有用,它是一 个只写寄存器.PMUXn用于选择多路复用模块所连接的外设.
了解了以上这些基本就可以用端口控制LED灯了,从原理图可知,ATSAMD21 Xplained Pro开发板的LED与D21的PB30连接,LED的阳极通过R303电阻(330欧姆)与3.3V电源相连,只要将PB30拉低(输出为0)就可以发光了。通过延时和翻转PB30管脚(通过OUTTGL翻转寄存器)就可以让LED周期闪烁了。
我采用的是MDK4.74版本的开发环境,写了一个LED驱动(LED.c),然后在主程序中周期调用LED_Toggle()函数实现LED闪烁。
关键代码如下:
1. LED所用引脚初始化:
2. 主程序中每隔0.5秒调用LED_Toggle()翻转LED引脚,从而实现闪烁。
具体源码见附件:
|
|