打印
[Zigbee]

CC2530流水灯

[复制链接]
646|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
gwsan|  楼主 | 2019-7-31 10:33 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
1 理论分析
1.1 CC2530 的 IO 端口介绍
CC2530 有 21 个数字输入/输出引脚,可以配置为通用数字 I/O 、外设 I/O 或者配置为连接到 ADC、定时器或 USART 外设。这些 I/O 口的用途可以通过一系列寄存器配置,由用户软件加以实现。I/O 端口具备如下重要特性:

        21 个数字 I/O 引脚
        可以配置为通用 I/O 或外部设备 I/O
        输入口具备上拉或下拉能力
        具有外部中断能力。

21 个 I/O 引脚都可以用作于外部中断源输入口。因此如果需要外部设备可以产生
中断。外部中断功能也可以从睡眠模式唤醒设备。图1是 CC2530 所有 IO 端口的功能图,在 CC2530 所有 IO 端口的功能中,我们用的最多就是:
        调试接口
        通用 IO
        通用 IO 中断
        外设 IO



其中,调试接口就是给我们烧程序的,我们并不用管它;通用 IO 就是我们今天的实验要讲解的;通用 IO 中断将会在按键的中断实验里讲解;外设 IO 将会在定时器、串口、ADC 里都会有讲解。

最后说明一下,就是 CC2530 的 IO 的使用,都是要通过配置相应的寄存器来实现相应功能的,故在附录里我们给出操作 IO 的所有寄存器的类型及其具体内容。


使用特权

评论回复

相关帖子

沙发
gwsan|  楼主 | 2019-7-31 10:33 | 只看该作者
1.2 CC2530 与 51 单片机比较
跟传统的 8051 单片机不一样,CC2530 虽然也是 8051 内核,但是其 IO 端口的输入输出,需要配置寄存器来实现,这个类似于 AVR、ARM 等单片机,而 51 单片机可以直接给某个 IO 端口赋值,或者直接读取某个 IO 端口的输入电平。下面给出 51 单片机与CC2530 管脚输入输出对比表。

表 1 51 单片机与 CC2530 管脚输入输出对比



使用特权

评论回复
板凳
gwsan|  楼主 | 2019-7-31 10:33 | 只看该作者
2 实验详解
2.1 实验目的
1)、通过实验掌握CC2530芯片GPIO的配置方法,带你一步步走进嵌入式大门;
2)、握Led驱动电路及开关Led的原理。

2.2实验设备
硬件:PC 机一台,ZB2530(底板、核心板、仿真器、USB 线)一套;
软件:win7 系统,IAR 8.20 集成开发环境。

2.3实验相关电路图



发光二极管是属于二极管的一种,具有二级管单向导电特性,即只有在正向电压(二极管的正极接正,负极接负)下才能导通发光。P1.0引脚接发光二极管(D1)的负极,所以P1.0引脚输出低电平D1亮,P1.0引脚输出高电平D1熄灭, D2, D3同理。

使用特权

评论回复
地板
gwsan|  楼主 | 2019-7-31 10:34 | 只看该作者
2.4实验分析
现在我们知道了CC2530 的IO端口的使用,是要配置寄存器的,那么接下来,我们编写代码前需要知道的就是:

有哪些类型的 IO 端口控制寄存器;怎么配置这些 IO 端口控制寄存器。
本实验用到的 通用 IO,只需要配置 PxSEL、PxDIR这三个寄存器,那么
接下来对其进行配置:
(1) 希望配置P0.4、P1.0、P1.1 端口为:通用 IO、输出;
(2) PxSEL、PxDIR这两个寄存作用和配置方法如表1、2、3所示(以P0口为例):

表2 端口0的功能选择


表3 端口0的方向


(3) 由于CC2530寄存器初始化时默认值为(参考《CC2530中文数据手册完全版.pdf》):
P1SEL = 0x00;
P1DIR |= 0xff;

按照表格寄存器的内容,对LED配置如下:
P1SEL &=~0x03; //配置P1.0为通用IO口,默认为0的,可以不设
P1DIR |= 0x03; //P1.0、P1.1定义为输出
P0DIR |= 0x10; // P1.4 定义为输出

注意:(1) 0x01=0000 0001; (2) “|=”是先执行按位或运算,再赋值; (3) P1DIR |= 0x01;
最终结果是:bit0 相或后得 1,其它位保持不变。


使用特权

评论回复
5
gwsan|  楼主 | 2019-7-31 10:35 | 只看该作者
2.5参考代码
/**Includes*********************************************************************/
#include <ioCC2530.h>

/**宏定义***********************************************************************/
//定义数据类型
#define uint unsigned int
#define uchar unsigned char

//定义控制灯的端口
#define LED1 P1_0 //定义 LED1 为 P10 口控制
#define LED2 P1_1 //定义 LED2 为 P11 口控制
#define LED3 P0_4 //定义 LED3 为 P04 口控制

/**函数声明*********************************************************************/
void Delay(uint);  //延时函数
void InitIO(void); //初始化 LED 控制 IO 口函数

/**
  * @brief     主函数
  * @param     None
  * @retval    None
  */
void main(void)
{
  InitIO();           //初始化 LED 灯控制 IO 口
  while(1)           //死循环
  {
    LED1 = !LED1;    // LED1 灯闪一次
    Delay(1000);
    LED2 = !LED2;    // LED2 灯闪一次
    Delay(1000);
    LED3 = !LED3;    // LED3 灯闪一次
    Delay(1000);
  }
}

/**
  * @brief     普通延时函数
  * @param     xms 延时长度
  * @retval    None
  */
void Delay(uint xms)
{
   uint i,j;
    for(i=xms;i>0;i--)
     for(j=587;j>0;j--);   
}

/**
  * @brief     初始化IO口
  * @param     None
  * @retval    None
  */
void InitIO(void)
{
  P1DIR |= 0x03;  //P10、 P11 定义为输出
  P0DIR |= 0x10;  //P04定义为输出
  LED1 = 1;
  LED2 = 1;
  LED3 = 1;       //LED 灯初始化为关
}


使用特权

评论回复
6
gwsan|  楼主 | 2019-7-31 10:35 | 只看该作者
2.6实验现象
LED1、LED2、LED3依次闪烁。

使用特权

评论回复
7
gwsan|  楼主 | 2019-7-31 10:35 | 只看该作者
2.7 实验总结
通过本实验,大家需要掌握以下 3 点:
        CC2530 通用 IO 使用需要配置相关寄存器;
        CC2530 通用 IO 寄存器的类型以及每个类型如何配置。
        I/O 端口具备如下重要特性:

(1) 21 个数字 I/O 引脚
(2) 可以配置为通用 I/O 或外部设备 I/O
(3) 输入口具备上拉或下拉能力
(4) 具有外部中断能力。

使用特权

评论回复
8
gwsan|  楼主 | 2019-7-31 10:36 | 只看该作者
附:管理 IO 端口的寄存器类型
●IEN0(0xA8) — 中断使能 0
●IEN1(0xB8) — 中断使能 1
●IEN2(0x9A) — 中断使能 2
●P0 — 端口 0
●P1 — 端口 1
●P2 — 端口 2
●PERCFG — 外设控制寄存器
●APCFG — 模拟外设 IO 配置
●P0SEL — 端口 0 功能选择寄存器
●P1SEL — 端口 1 功能选择寄存器
●P2SEL — 端口 2 功能选择寄存器
●P0DIR — 端口 0 方向寄存器
●P1DIR — 端口 1 方向寄存器
●P2DIR — 端口 2 方向寄存器
●P0INP — 端口 0 输入模式寄存器
●P1INP — 端口 1 输入模式寄存器
●P2INP — 端口 2 输入模式寄存器
●P0IFG — 端口 0 中断状态标志寄存器
●P1IFG — 端口 1 中断状态标志寄存器
●P2IFG — 端口 2 中断状态标志寄存器
●PICTL — 中断边缘寄存器
●P0IEN — 端口 0 中断掩码寄存器
●P1IEN — 端口 1 中断掩码寄存器
●P2IEN — 端口 2 中断掩码寄存器
●PMUX — 掉电信号 MUX 寄存器
●OBSSEL0 — 观察输出寄存器 0
●OBSSEL1 — 观察输出寄存器 1
●OBSSEL2 — 观察输出寄存器 2
●OBSSEL3 — 观察输出寄存器 3
●OBSSEL4 — 观察输出寄存器 4
●OBSSEL5 — 观察输出寄存器 5

使用特权

评论回复
9
conjunction| | 2019-7-31 14:09 | 只看该作者
感谢楼主分享!很不错的经验

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

68

主题

3426

帖子

1

粉丝