[分享] Zigbee–IO口配置

Aguilera   2020-1-10 21:37 楼主

在学习Zigbee所用到的CC2530这块芯片,在一开始我就打算通过几个基础实验的例子来熟悉Zigbee的编程方式。然而对于没有接触过51之类的我来说还是有很大难度的,在第一个基础实验点亮第一个灯的时候就对于一些什么寄存器啊什么IO口一头雾水。在几经周折之后,看了一些前人的教程或是博客明白了许多。

CC2530(SoC)一共有21个通用IO口,分为三组:P0、P1、P2,(P0,P1各8个,P2组5个(P2_0~P2_4)),都可以作为普通IO或对应的片上外设控制。

而这些通用IO口是作为普通IO口还是片上外设是通过配置寄存器PxSEL(x=0,1,2 即P0SEL,P1SEL,P2SEL)来实现,PxSEL为一个字节,即8位,每一位对应具体的IO组中相应的一个IO,决定它是普通IO还是片上外设, 0表示普通IO, 1表示 片上外设 (复位默认为0)。

若将通用IO口配置成普通IO口,就有一个问题,是用于输入还是用于输出。 
配置输入或者输出由寄存器PxDIR(即P0DIR,P1DIR,P2DIR)来配置,每个寄存器也都是一个字节,即8位,每一位对应具体的IO组中相应的一个IO,决定它是输入还是输出,0表示输入,1表示输出 (复位默认为0)

当设置为输入时,输入还有三种情况,分别为上拉输入,下拉输入,三态, 
关于上拉和下拉 
上拉电阻:一般是一端接电源,一端接芯片管脚的电路中的电阻。一般用于时钟信号数据信号等,假如没有上拉,时钟和数据信号容易出错,毕竟,CPU的功率有限,带很多BUS线的时候,提供高电平信号有些吃力。而一旦这些信号被负载或者干扰拉下到某个电压下,CPU无法正确地接收信息和发出指令,只能不断地复位重启。 
下拉电阻:一般是指一端接芯片管脚一端接地的电阻。一般用于保护信号,假如没有上拉,时钟和数据信号容易出错,毕竟,CPU的功率有限,带很多BUS线的时候,提供高电平信号有些吃力。而一旦这些信号被负载或者干扰拉下到某个电压下,CPU无法正确地接收信息和发出指令,只能不断地复位重启。这是根据电路需要设计的,主要目的是为了防止干扰,增加电路的稳定性。

选择上拉,下拉,三态,通过配置寄存器PxINP(P0INP,P1INP,P2INP),0表示上拉下拉,1表示三态,由于P2组只有5个,所以P2INP后面三位是没有用来控制选择上下拉和三态的,于是将用做选择P0 P1 P2三组整组的上拉或者是下拉,0表示上拉,1表示下拉 

image.png
eg. 以P0_0作为输出为例, 
1. 让P0_0作为普通IO口,而不是片上外设 ,因此将P0SEL的第0位设置为0, 
位操作为P0SEL &=0xFE //0xFE为十六进制,即1111 1110 
2. 让P0_0作为输出口,而不是输入检测 P0DIR |=0x01 //0000 0001

eg.以P1_1作为输入为例

让P1_1作为普通IO口 P1SEL &=0xFD // 1111 1101
让P1_1作为输入用 P1DIR &=0xFD // 1111 1101
选择上拉,下拉,三态中的一种 P1INP &=0xFD //1111 1101

image.png

回复评论 (1)

楼主加油!非常感谢

点赞  2020-1-11 10:19
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复