最近刚接触Zigbee,以前在我印象中Zigbee就是一种类似于蓝牙,wifi的无线传输技术。就在我刚翻开一本有关Zigbee的书,迎面就是Zigbee,协议,协议栈,TI,IAR,CC2530等等这些名词,搞得我一头雾水。在一一查询之后才理清了思路。
主角:Zigbee一种无线传输技术,Zigbee协议是它传输过程的规则,像以太网有以太网协议。而Zigbee协议栈则是Zigbee协议的具体实现。要想具体实现Zigbee不仅需要Zigbee协议栈这个软件上的支持还要有一个支持这一协议栈的硬件才行。
TI:一家超有名的半导体公司,它不仅开发了一个协议栈ZSTACK而且还开发了一款支持Zigbee底层协议的芯片,当然型号有好多,我用的是CC2530。
IAR的话就是一款集成开发环境,也是由TI公司开发的。
初学这个,所以在淘宝上买了一套网蜂的开发套件。计划开始先找着实验手册做起来,每做一个实验完成后把过程写下来。一来作为以后复习的笔记,二来在写笔记是可以再理一遍思路,第三也可以自己检测自己到底有没有弄懂手册上讲的东西。下面就记录一下第一次实验:对IO口的操作。
手册上前面的基础实验都不涉及到无线部分,只是在一个开发套件上做实验,为了是熟悉CC2530的操作方式,手册上讲到由于是不带协议的程序所以在工程里需要进行一些配置,照着手册做就可以了,感觉类似于Keil里的一些设置:仿真器、库、设备类型这些。
CC2530有21个IO口,共分成3组,P0,P1,P2。其中P0和P1口有8个引脚,P2口只有5个。对每个IO的控制涉及到三种寄存器PxSEL、PxDIR、PxINP。举例说明:如果我想把P0_0口设为普通输出,由于CC2530的IO既可以作为普通IO也可以作为片上外设IO,所以在配置IO口的时候首先要选择它是作为普通IO还是片上外设IO,然后再是设置这个IO口是输出还是输入。三种寄存器的解释见下表。
PxSEL | Px[7:0]功能设置寄存器,默认设置为普通I/O口 |
PxINP | Px[7:0]作输入口时的电路模式寄存器 |
PxDIR | Px口输入输出设置寄存器,0:输入,1:输出 |
Px | Px[7:0]可位寻址的I/O寄存器 |
#include <ioCC2530.h>
#define LED1 P1_0
void main(void)
{
P1SEL &= ~0x01;
P1DIR |= 0x01;
P1INP &= ~0x01;//可写可不写
while(1)
{
P1_0 = 0;
}
}
在网蜂的手册里讲到各寄存器的初始值都为0,所以P1SEL&=~0x01可以省略。但我自己不是很喜欢。通过查看CC2530 datasheet可以看到有关IO口的更加详细的内容。下面讲两点。
这21个IO中其中P1_0和P1_1有20mA的驱动能力,但同时也没有上/下拉功能而其他IO口只有4mA的驱动能力。如果某个IO口被设置成了输入功能,PxINP为0时表示为上/下拉模式,1为三态。那么这个IO口到底是上拉还是下拉呢,通过CC2530 datasheet手册可以知道,P2INP寄存器它的第5位控制了P2的5个端口,但是这个8位寄存器还有3位空下来了,这3位就是用来控制P0,P1,P2这三个端口上/下拉模式的默认值,0表示上拉,1表示下拉。
手册上涉及的数据还有很多,一一列举出来就没意思了,还是等具体用到的时候再详细分析吧。