Zigbee入门笔记(一) CC2530基本IO控制和外部中断(附带自己开发的开发板,成本在十元之内,兼容树莓派)

本文深入解析了TI公司的CC2530芯片的IO控制和中断配置方法,包括设置IO为普通模式、输出状态及读取状态,详细介绍了如何配置IO的输入模式、上下拉和三态状态,以及如何设置外部中断,涵盖了从初始化IO到配置中断的全过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

zigbee CC2530芯片概述

CC2530由TI公司生产的推出的支持协议栈的芯片;设备特点:

​ 蓝牙:功耗低。

​ WiFi:通讯速率大

​ zigbee:功率低,可组建大规模网络。但是通讯速率比较低。速度250kbps,功耗一般8mh。最低2微安

自制开发板

网上卖的开发板价格是在太高了,成本其实很低,自己做得每块板子的成本才不到十元,一口气做了三块开发板。下面展示一下兼容树莓派螺丝孔的我自己做的这块开发板,有需要的同学可以到github上面下载开发板原理图和PCB文件:https://github.com/tianxiaohuahua/Zigbee/tree/master/PCB

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

一、IO的基本控制

控制一个IO的输出:

首先需要令该IO设置未普通IO的模式,如:P0SEL,P1SEL,P2SEL,一共就只有这三个寄存器来设置

让该IO设置未输出状态,而非输出状态,如:P0DIR,P1DIR,P2DIR

最后直接设置该IO未输出高低电平,如:P1_0 = 0;

  P1SEL &= 0XFE; //普通IO寄存器,非外设模式定义寄存器 ,该寄存器处于1时是外设模式,0是普通IO模式
  P1DIR |= 0X01;  //设置IO处于输出状态,0是输出状态,1是输出状态
  P1_0  =  1; //设置IO的寄存器的值

设置一个IO的输入:

和设置输出模式相同都需要设置三个寄存器,还需要配置上下拉模式:
1、设置为普通IO模式,配置P0SEL,P1SEL,P2SEL;

2、设置输入输出模式,配置P0DIR,P1DIR,P2DIR;

3、设置IO的输入为上拉、下拉或者三态状态,需要配置P0INP、P1INP、P2INP;

​ 一般情况下,读取外部开关信号直接设置上下拉模式,读取AD信号一般使用三态状态模式

4、通过读取IO的寄存器读取IO的状态

特别需要注意的是PXINP寄存器,在输出模式下,该寄存器的每一位都对用了相对应的IO,0表示上下拉模式。1表示三态模式。但是由于设置为上下拉模式还要具体到设置为上拉模式或者下拉模式,因此,使用P2INP的高三为进行设置,把第五位设置为0就是上拉模式,1就是下拉模式:

P0SEL &= 0xBF;     //设置P0.1为普通IO口 1011111 
P0DIR &= 0xBF;     //按键接在P0.1口上,设P0.1为输入模式  101111
P0INP &= 0xBF;     //设置IO的模式为上下拉模式。 101111
P2INP &= 0xDF	   //设置IO 1101 1111

初始状态下的一些寄存器的值都是零,因此一些寄存器就不需要配置!!!

因此芯片在上电后吗,默认是所有的IO口都是上拉输出状态!!!

配置IO的外部中断:

注意:CC2530的每一个IO引脚都有中断功能;

1、初始化IO为普通IO模式;

2、配置IO的输入模式;

3、配置IO的上下拉;

4、配置上拉;

5、开启CPU中断,令EA = 1;

​ 相当于一个最高级别的开关,控制所有IO的中断信号,只有这一位寄存器设置为1的时候才会开启中断;

6、打卡IO口组中断;一共三组,分别是P0组、P1组和P2组。

​ 对应的寄存器为:P0IE、P1IE和P2IE;是一个只有1位的寄存器。相当于一个总开关下面的次级开关。分别控制了三组IO的中断信号。并且规定0是关断使能,1是开启使能;

7、打开组内的对应的某个IO的中断;相应为具体的某一个IO。

​ 一共有三组寄存器,每个寄存器的八位对应了8个IO,可以进行分别控制。这三个寄存器是P0IEM、P1IEM和P2IEM。规定0代表复位,1代表使能;

8、确定上升沿触发还是下降;

​ 只由单独的一个寄存器配置所有IO。0代表上升沿,1代表下降沿;

​ 每一位分别对应了不同组的IO:

76543210
IO驱动能力P2_0~P2_4P1_4~P1_7P1_0~P1_3P0_0~P0_7

具体到一个IO的设置如下:

//配置P0_5的外部中断为例
P0SEF &= 0XDF; //设置IO为普通IO  1101 1111
P0DIR &= 0XDF; //设置为输入模式   1101 1111
POINP &= 0XDF; //设置为上下拉模式 1101 1111
P2INP &= 0XDF; //设置为上拉模式   1101 1111

EA = 1; //开启中断总开关
P0IE = 1; //开启中断组开关
P0IEN |= 0X20; //开启中断IO开关 0010 0000

PICTL |= 0X01; //设置P0_0~P0_7为下降沿触发模式 0000 0001

设置中断函数,都是固定格式

#pragma optimze=none
#pragma vector=P0INT_VECTOR
__interrup void a_function()
{
    if(P0IFG & 0X20) //读取中断寄存器的值,八位宽分别对应了8个IO的的值;这里对应的是第五位:0010 0000
    {
        do_something(); //中断后实现的具体功能
    }
	P0IFG = 0; //让中断寄存器的值清除
    P0IF = 0; //组中断寄存器的值清除
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值