CC2530 的 18 个中断源

寄存器

大致了解有哪些中断后,话不多说,我们来看看有关外部中断的使能寄存器:

IEN0 中断使能寄存器 0(可位寻址)

位名称 复位值 操作 描述
7 EA 0 R0 中断系统使能控制位,即:总中断0:禁止所有中断。 1:允许所有中断。
6 00 R0 未使用,读为 0
5 STIE 0 R/W 睡眠定时器中断使能。 0:中断禁止                        1:中断使能
4 ENCIE 0 R/W AES 加密/解密中断使能。 0:中断禁止                        1:中断使能
3 URX1IE 0 R/W USART1 接收中断使能。 0:中断禁止                        1:中断使能
2 URX0IE 0 R/W USART0 接收中断使能。 0:中断禁止                        1:中断使能
1 ADCIE 0 R/W ADC 中断使能。 0:中断禁止                        1:中断使能
0 RFERRIE 0 R/W RF 发送/接收 FIFO 中断使能。 0:中断禁止                        1:中断使能

IEN1 中断使能寄存器 1(可位寻址)

位名称 复位值 操作 描述
7:6 00 R0 不使用,读为 0
5 P0IE 0 R/W 端口 0 中断使能。 0:中断禁止                        1:中断使能
4 T4IE 0 R/W 定时器 4 中断使能。 0:中断禁止                        1:中断使能
3 T3IE 0 R/W 定时器 3 中断使能。 0:中断禁止                        1:中断使能
2 T2IE 0 R/W 定时器 2 中断使能 0:中断禁止                        1:中断使能
1 T1IE 0 R/W 定时器 1 中断使能。 0:中断禁止                        1:中断使能
0 DMAIE 0 R/W DMA 中断使能 0:中断禁止                        1:中断使能

IEN2 中断使能寄存器 2(在 ioCC2530.h 头文件中没做位定义,故不能位寻址)

位名称 复位值 操作 描述
7:6 00 R0 不使用,读为 0。
5 WDTIE 0 R/W 看门狗定时器中断使能。 0:中断禁止                        1:中断使能
4 P1IE 0 R/W 端口 1 中断使能。 0:中断禁止                        1:中断使能
3 UTX1IE 0 R/W USART1 发送中断使能 0:中断禁止                        1:中断使能
2 UTX0IE 0 R/W USART0 发送中断使能。 0:中断禁止                        1:中断使能
1 P2IE 0 R/W USART0 发送中断使能。 0:中断禁止                        1:中断使能
0 RFIE 0 R/W RF 一般中断使能。 0:中断禁止                        1:中断使能

位寻址:可以通过位名称来修改其值,如IEN0 中断使能寄存器 0中有个位名称为EA,直接

EA=1;

就行了,

上面三个是关于中断的使能位寄存器,涵盖了18个中断源,再来看看端口使能的中断寄存器,上面的寄存器是具体到某个端口,而下面的寄存器则是具体到某个引脚。

P0IEN P0 端口中断使能寄存器

位名称 复位值 操作 描述
7:0 P0_[7:0]IEN 0x00 R/W 端口 P0_7 到 P0_0 中断使能。 0:中断禁止        1:中断使能

P1IEN P1 端口中断使能寄存器

位名称 复位值 操作 描述
7:0 P1_[7:0]IEN 0x00 R/W 端口 P1_7 到 P1_0 中断使能。 0:中断禁止        1:中断使能

P2IEN P2 端口中断使能寄存器

位名称 复位值 操作 描述
7:6 00 R0 不使用,读为 0
5 DPIEN 0 R/W USB D+中断使能
4:0 P2_[4:0]IEN 0x00 R/W 端口 P2_4 到 P2_0 中断使能。 0:中断禁止        1:中断使能

PICTL 端口输入信号控制寄存器

位名称 复位值 操作 描述
7 PADSC 0 R/W 控制 I/O 引脚输出模式下的驱动能力。
6:4 000 R0 未使用。
3 P2ICON 0 R/W 端口 P2_4 到 P2_0 中断触发方式选择。 0:上升沿触发。 1:下降沿触发
2 P1ICONH 0 R/W 端口 P1_7 到 P1_4 中断触发方式选择。 0:上升沿触发。 1:下降沿触发
1 P1ICONL 0 R/W 端口 P1_3 到 P1_0 中断触发方式选择。 0:上升沿触发。 1:下降沿触发
0 P0ICON 0 R/W 端口 P0_7 到 P0_0 中断触发方式选择。 0:上升沿触发。 1:下降沿触发。

接下来,来看看对于端口外部中断来说很重要的三个标志位

P0IFG P0 端口中断状态标志寄存器

(该标志必须在清除端口中断标志 P0IF 之前清除)

位名称 复位值 操作 描述
7:0 P0IF_[7:0] 0x00 R/W0 端口 P0_7 到 P0_0 的中断状态标志。 当输入端口有未响应的中断请求时,相应标志位硬件自动置 1, 需要通过软件人工清 0。 0:无中断请求。         1:有中断请求。

P1IFG P1 端口中断状态标志寄存器

(该标志必须在清除端口中断标志 P1IF 之前清除)

位名称 复位值 操作 描述
7:0 P1IF_[7:0] 0x00 R/W0 端口 P1_7 到 P1_0 的中断状态标志。 当输入端口有未响应的中断请求时,相应标志位硬件自动置 1, 需要通过软件人工清 0。 0:无中断请求。         1:有中断请求。

P2IFG P2 端口中断状态标志寄存器

(该标志必须在清除端口中断标志 P2IF 之前清除)

位名称 复位值 操作 描述
7:6 00 R0 未使用,读为 0。
5 DPIF 0 R/W0 USB D+中断标志位
4:0 P2IF_[4:0] 0x00 R/W0 端口 P2_4 到 P2_0 的中断状态标志。 当输入端口有未响应的中断请求时,相应标志位硬件自动置 1, 需要通过软件人工清 0。 0:无中断请求。         1:有中断请求。

呼~是不是感觉这一章的寄存器有点多呢?其实除了中断的使能寄存器,后面的端口触发的寄存器中断比赛的时候很少很少涉及得到,平常开发项目可能就经常用得到,所以,还是得学了解了解。

了解了概念、原理和寄存器,接下来看代码的了。

来完成这两道题加深对其的理解(PS:题目是欧老师的题库):

3.1完整代码:

#include "ioCC2530.h"

#define D3 P1_0   // 定义 LED 灯的引脚号
#define D4 P1_1
#define D5 P1_3
#define D6 P1_4

#define SW1 P0_1   // 定义按键的引脚号
#define SW2 P1_2

void Init_port()   // 初始化端口
{
  P1SEL &= ~0x1b;   // 配置 P1_0、P1_1、P1_3、P1_4 为数字 IO 口
  P1DIR |= 0x1b;    // 配置 P1_0、P1_1、P1_3、P1_4 为输出口
  P1 &= ~0x1b;      // 初始化 P1_0、P1_1、P1_3、P1_4 为低电平状态
  
  P1SEL &= ~0x04;   // 配置 P1_2 为数字 IO 口
  P1DIR &= ~0x04;   // 配置 P1_2 为输入口
  P1INP &= ~0x04;   // 配置 P1_2 的输入缓冲区范围
  P2INP &= ~0x40;   // 配置 P1_2 所在的管脚的输入缓冲区范围
  
  P0SEL &= ~0x02;   // 配置 P0_1 为数字 IO 口
  P0DIR &= ~0x02;   // 配置 P0_1 为输入口
  P0INP &= ~0x02;   // 配置 P0_1 的输入缓冲区范围
  P2INP &= ~0x20;   // 配置 P0_1 所在的管脚的输入缓冲区范围
  
  P1IEN |= 0x04;    // 配置 P1_2 为外部中断口
  PICTL |= 0x02;    // 配置外部中断的边缘触发方式(上升沿触发)
  IEN2 |= 0x10;     // 开启外部中断
  EA=1;             // 开启总中断允许位
}

void Delay(unsigned int t)   // 实现简单的延时函数
{
  while(t--);
}

#pragma vector=P1INT_VECTOR   // 定义中断服务程序函数
__interrupt void SW_1()      // 当按键被按下引起外部中断时,执行该函数
{
  D5 = ~D5;                 // 翻转 LED D5 的状态
  P1IFG &= ~0x04;           // 清除中断标志位
  P1IF=0;
}

void main()
{
  Init_port();   // 调用初始化函数
  while(1)
  {
    D4=1;       // 点亮 LED D4
    Delay(0xffff);   // 延时一段时间
    D4=0;           // 关闭 LED D4
    Delay(0xffff);   // 延时一段时间
  }
}

3.2完整代码:

#include "ioCC2530.h"

#define D3 P1_0   // 定义 LED 灯的引脚号
#define D4 P1_1
#define D5 P1_3
#define D6 P1_4

#define SW1 P0_1   // 定义按键的引脚号
#define SW2 P1_2

unsigned int keys=0;   // 定义按键状态变量

void Init_port()   // 初始化端口
{
  P1SEL &= ~0x1b;   // 配置 P1_0、P1_1、P1_3、P1_4 为数字 IO 口
  P1DIR |= 0x1b;    // 配置 P1_0、P1_1、P1_3、P1_4 为输出口
  P1 &= ~0x1b;      // 初始化 P1_0、P1_1、P1_3、P1_4 为低电平状态
  
  P1SEL &= ~0x04;   // 配置 P1_2 为数字 IO 口
  P1DIR &= ~0x04;   // 配置 P1_2 为输入口
  P1INP &= ~0x04;   // 配置 P1_2 的输入缓冲区范围
  P2INP &= ~0x40;   // 配置 P1_2 所在的管脚的输入缓冲区范围
  
  P0SEL &= ~0x02;   // 配置 P0_1 为数字 IO 口
  P0DIR &= ~0x02;   // 配置 P0_1 为输入口
  P0INP &= ~0x02;   // 配置 P0_1 的输入缓冲区范围
  P2INP &= ~0x20;   // 配置 P0_1 所在的管脚的输入缓冲区范围
  
  P0IE = 1;         // 允许 P0_1 的中断功能
  P0IEN |= 0x02;    // 配置 P0_1 为外部中断口
  PICTL |= 0x01;    // 配置外部中断的边缘触发方式(下降沿触发)
  
  P0IFG &= ~0x02;   // 清除中断标志位
  P0IF=0;           // 清除中断标志位
  EA=1;             // 开启总中断允许位
}

void Delay(unsigned int t)   // 实现简单的延时函数
{
  while(t--)
## 最后

**自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。**

**深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。**

**因此收集整理了一份《2024年嵌入式&物联网开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。**

![img](https://img-blog.csdnimg.cn/img_convert/340afdacbb878ad9090320ff255e7e10.png)

![img](https://img-blog.csdnimg.cn/img_convert/c07e6af3db97afe2fd4bf491c79860e7.jpeg)

![img](https://img-blog.csdnimg.cn/img_convert/6a8a636fea74a3866fde7ce33ad53a18.png)

 ![img](https://img-blog.csdnimg.cn/img_convert/05871e996212300f95f5d4550dae66ec.png)

![img](https://img-blog.csdnimg.cn/img_convert/e57d55e82057e834438faee0c10313fe.png)

![img](https://img-blog.csdnimg.cn/img_convert/78e627b87e61d6ccc3fc71556eb9af9c.png)

![](https://img-blog.csdnimg.cn/img_convert/f16e2b3565deac89ca29929613034b61.png)

 

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上嵌入式&物联网开发知识点,真正体系化!**

[**如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!**](https://bbs.csdn.net/topics/618654289)

**由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**!!



[外链图片转存中...(img-JAu75uh3-1715629698312)]

[外链图片转存中...(img-xAtLd9bQ-1715629698312)]

 

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上嵌入式&物联网开发知识点,真正体系化!**

[**如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!**](https://bbs.csdn.net/topics/618654289)

**由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**!!


Logo

欢迎加入 MCP 技术社区!与志同道合者携手前行,一同解锁 MCP 技术的无限可能!

更多推荐