CC2530 外部中断实验

实验内容

  • 以IAR编写代码实现:LED1到LED4依次轮流闪烁,按键S1按下的时候,四个LED整体闪烁一次,然后再从按键按下前的状态继续闪烁。

实验目的

  • 复习LED和按键的原理;
  • 了解中断的概念和编程方法;
  • 熟练运用外部中断。

实验环境

实验所需硬件

序号 名称 数量 备注
1 电脑 1台 系统Windows7及以上
2 CC2530底座模块 1个 ·
3 LED模块 1个 ·
4 CC Debugger 仿真器和连接线 1套 ·
5 USB线 1根 ·
6 外部中断实验代码 1份 ·

实验所需软件

CC2530底座 & LED模块 & CC Debugger 仿真器和连接线

实验硬件

USB线

实验硬件

实验要求

  • 掌握P1IEN、PICTL、P1IFG、IEN2四个寄存器的功能以及配置方法;
  • 掌握中断服务函数的编写方法。

实验原理

外部中断

CC2530外部中断需要配置四个寄存器 PxIENPICTLPxIFGIENx

寄存器功能表

硬件设计

连接原理图

连接原理图

实验步骤

① CC2530底座模块安装LED模块,用CC Debugger连接底座与计算机:

模块组装

② 轻按CCDebugger复位按键,指示灯变绿,表示连接正常。如下图:

模块组装

③ 访问github,进入github界面后点击Code,Clone HTTPS安全链接,如下图所示:

操作步骤

④ 打开电脑终端,进入工作目录workspace (workspace 为工程文件夹所在目录):

cd workspace

⑤ 运行clone命令:

git clone https://github.com/aiotcom/eps.git

下载目录至指定文件夹下。
如果提示“command not found”表示电脑没有安装Git,请至Git官网下载。
如果电脑没有安装 Git 软件,也可以进入Github,点击 Code -> DownLoad ZIP 下载所有工程代码。如下图所示:
下载代码
如果电脑没有公网,可以进:D盘\实验教程与代码选择相应的代码。

⑥ 打开 IAR Embedded Workbench 工程软件,点击工具栏: File -> Open -> Workspace,选择工程文件:CC2530基础实验\4.外部中断\EXTI.eww 并打开。

打开工程

选择文件

⑦ 点击Make按钮,重新编译文件,显示没有错误。

文件编译

⑧ 点击Download and Debug按钮,将程序下载到模块中。

下载程序

代码下载成功

⑨ 点击X退出仿真模式。

退出仿真

⑩ 移除CC Debugger仿真器,采用USB线供电。

采用USB线供电

⑪ 每次按下按键S1,改变LED模块四个LED灯的亮灭状态(四个LED灯同时亮或者同时灭)。

代码讲解

① 程序目录结构,如下图。主要的工程文件是delay.c、EXTI.c、LED.c、main.c。

代码目录结构

② main.c:主函数main(),完成硬件的初始化,及整个代码逻辑控制, P1_ISR ()为外部中断服务函数,外部中断服务函数响应外部中断。

void main(void)
{
    Hal_Init_32M();//初始化32M时钟
    LED_Init();//LED模块的LED灯控制接口
    EXTI_Init();//外部中断初始化 P1_5,对应按键S1。
    while(1);
}
#pragma vector = P1INT_VECTOR    
__interrupt void P1_ISR(void)
{  
P1IFG &= ~ 0x20;//软件清除P1_5引脚的标志位
P1IF = 0;//软件清除P1端口组的标志位
        
    state = 1 - state;//切换state的值
        
    if(state){
        LED_ON();//灯全亮
    }
    else{
        LED_OFF();//灯全灭
    }
}

③ LED.c为LED驱动代码,代码实现对LED灯控制的IO进行初始化设置IO口输出模式。

void LED_Init(void)
{
    P0DIR |= 0x0C;//P0.2、P0.3定义为输出
    P1DIR |= 0xC0;//P1.6、P1.7定义为输出
    LED_OFF();//初始化关闭LED灯
}

常见问题

  1. 弹出警告窗口,不能下载程序。

    • 请确认CCDebugger驱动否安装。
    • 轻按CCDebugger仿真器的按键,指示灯不是绿色连接有问题。
    • CCDebugger仿真器是否正常接入到底座,参考实验步骤第一步。
  2. 下载代码后程序没观察到实验现象。

    • 请重新上电,或者按下底座上的复位按键。
    • 模块没有安装稳妥。

实验思考

  1. 利用外部中断的方式实现按键S1按下后,改变LED1的状态。

  2. 实现按键S2按下两次LED2亮,按S2一次LED2灭。