当前位置:首页 > > 充电吧
[导读]  CC2530的中断系统是为了让CPU对内部或外部的突发事件及时地做出响应,并执行相应的终端程序。中断由中断源引起,中断源由相应的寄存器来控制。当需要使用中断时,需配置相应的中断寄存器来开启中断,当

  CC2530的中断系统是为了让CPU对内部或外部的突发事件及时地做出响应,并执行相应的终端程序。中断由中断源引起,中断源由相应的寄存器来控制。当需要使用中断时,需配置相应的中断寄存器来开启中断,当终端发生时将跳入中断服务函数中来执行此中断所需处理的事件。

1.终端源和中断向量

  CC2530有18个中断源,每个中断源都可以产生中断请求,中断请求可以通过设置中断使能SFR寄存器的中断使能位IEN0、IEN1或IEN2使能或禁止中断。

中断号码 描述 中断名称 中断向量 中断屏蔽 中断标志 0 RF TX RFIO下溢 或
RX FIFO溢出
RFERR 03H IEN0.RFERRIE TCON.RFERRIF 1 ADC转换结束 ADC 0BH IEN0.ADCIE TCON.ADCIF 2 USART0 RX完成 URX0 13H IEN0.URX0IE TCON.URX0IF 3 USART1 RX 完成 URX1 1BH IEN0.URX1IE TCON.URX1IF 4 AES加密解密完成 ENC 23H IEN0.ENCIE S0CON.ENCIF 5 睡眠定时器完成 ST 2BH IEN0.STIE IRCON.STIF 6 端口2中断 P2INT 33H IEN2.P2IE IRCON2.P2IF 7 USART0 TX完成 UTX0 3BH IEN2.UTX0IE IRCON2.UTX0IF 8 DMA传输完成 DMA 43H IEN1.DMAIE IRCON.DMAIF 9 Timer1(16位)捕获/比较/溢出 T1 4BH IEN1.T1IE IRCON.T1IF 10 Timer2(MAC Timer) T2 53H IEN1.T2IE IRCON.T2IF 11 Timer3(8位)捕获/比较/溢出 T3 5BH IEN1.T3IE IRCON.T3IF 12 Timer4(8位)捕获/比较/溢出 T4 63H IEN1.T4IE IRCON.T4IF 13 端口0中断 P0INT 6BH IEN1.P0IE IRCON.P0IF 14 USART1 TX 完成 UTX1 73H IEN2.UTXIE IRCON2.UTX1IF 15 端口1中断 P1INT 7BH IEN2.P1IE IRCON2.P1IF 16 RF通用中断 RF 83H IEN2.RFIE S1CON.RFIF 17 看门狗计时溢出 WDT 8BH IEN2.WDTIE IRCON.WDTIF   当相应的中断源使能并发生时,中断标志位将自动置1,然后程序跳往中断服务程序的入口地址执行中断服务程序。待中断服务程序处理完毕后,由硬件清除中断标志位。

  中断服务程序的入口地址即中断向量,CC2530的18个中断源对应了18个中断向量,中断向量定义在头文件"ioCC2530.h"中,定义如下:


/* ------------------------------------------------------------------------------------------------
 *                                        Interrupt Vectors
 * ------------------------------------------------------------------------------------------------
 */
//RF内核错误中断(RF TX RFIO下溢或RF FIFO溢出)
#define  RFERR_VECTOR   VECT(  0, 0x03 )   /*  RF TX FIFO Underflow and RX FIFO Overflow   */

//ADC转换结束
#define  ADC_VECTOR     VECT(  1, 0x0B )   /*  ADC End of Conversion                       */

//USART0 RX完成
#define  URX0_VECTOR    VECT(  2, 0x13 )   /*  USART0 RX Complete                          */

//USART1 RX 完成
#define  URX1_VECTOR    VECT(  3, 0x1B )   /*  USART1 RX Complete                          */

//AES加密解密完成
#define  ENC_VECTOR     VECT(  4, 0x23 )   /*  AES Encryption/Decryption Complete          */

//睡眠定时器完成
#define  ST_VECTOR      VECT(  5, 0x2B )   /*  Sleep Timer Compare                         */

//端口2中断
#define  P2INT_VECTOR   VECT(  6, 0x33 )   /*  Port 2 Inputs                               */

//USART0 TX完成
#define  UTX0_VECTOR    VECT(  7, 0x3B )   /*  USART0 TX Complete                          */

//DMA传输完成
#define  DMA_VECTOR     VECT(  8, 0x43 )   /*  DMA Transfer Complete                       */

//Timer1(16位)捕获/比较/溢出
#define  T1_VECTOR      VECT(  9, 0x4B )   /*  Timer 1 (16-bit) Capture/Compare/Overflow   */

//Timer2(MAC Timer)
#define  T2_VECTOR      VECT( 10, 0x53 )   /*  Timer 2 (MAC Timer)                         */

//Timer3(8位)捕获/比较/溢出
#define  T3_VECTOR      VECT( 11, 0x5B )   /*  Timer 3 (8-bit) Capture/Compare/Overflow    */

//Timer4(8位)捕获/比较/溢出
#define  T4_VECTOR      VECT( 12, 0x63 )   /*  Timer 4 (8-bit) Capture/Compare/Overflow    */

//端口0中断
#define  P0INT_VECTOR   VECT( 13, 0x6B )   /*  Port 0 Inputs                               */

//USART1 TX 完成
#define  UTX1_VECTOR    VECT( 14, 0x73 )   /*  USART1 TX Complete                          */

//端口1中断
#define  P1INT_VECTOR   VECT( 15, 0x7B )   /*  Port 1 Inputs                               */

//RF通用中断
#define  RF_VECTOR      VECT( 16, 0x83 )   /*  RF General Interrupts                       */

//看门狗计时溢出
#define  WDT_VECTOR     VECT( 17, 0x8B )   /*  Watchdog Overflow in Timer Mode             */


2.中断优先级


  中断优先级将决定中断响应的先后顺序,在CC2530中分为6个中断优先组,即IPG0~IPG5,每一组中断优先组中有三个中断源:


组 中断 中断 中断 IPG0 RFERR RF DMA IPG1 ADC T1 P2INT IPG2 URX0 T2 UTX0 IPG3 URX1 T3 UTX1 IPG4 ENC T4 P1INT IPG5 ST P0INT WDT
  中断优先组的优先级设定由寄存器IP0和IP1来设置。CC2530的优先级有4级,即0~3级,其中0级的优先级最低,3级的优先级最高。IP1_X IP0-X 优先级 0 0 0(优先级别最低) 0 1 1 1 0 2 1 1 3(优先级别最高)   其中IP1_X和IP0_X的X取值为优先组IPG0~IPG5中的任意一个。例如设置优先组IPG0为最高优先组:


//设置IPG0优先级组为最高优先级别

IP1_IPG0 = 1;

IP0_IPG0 = 1;

  如果同时收到相同优先级或同一优先级组中的中断请求时,将采用轮流检测顺序来判断中断优先级别的响应。


中断向量编号 中断名称 优先级排序 0 RFERR 高 16 RF   8 DMA   1 ADC   9 T1   2 URX0   10 T2   3 URX1   11 T3   4 ENC   12 T4   5 ST   13 P0INT   6 P2INT   7 UTX0   14 UTX1   15 P1INT   17 WDT 低   例如在中断优先级组IPG0中的终端RFERR、RF和DMA的中断优先级相同,如果同时使用这三个中断,就需要使用轮流探测顺序来判断哪一个优先级最高。由轮流探测顺序表查得RFERR中断优先级最高,RF中断次之,DMA中断与其他两个中断相比中断优先级最低。


3.中断处理过程


  中断发生时,CC2530硬件自动完成以下处理:

中断申请:中断源向CPU发出中断请求信号(中断申请一般需要在程序初始化中配置相应的终端寄存器开启中断);中断响应:CPU检测中断申请,把中断的地址保存到堆栈,转入中断向量入口地址;中断处理:按照中断向量中设定好的地址,转入相应的中断服务程序;中断返回:中断服务程序执行完毕后,CPU执行中断返回指令,把堆栈中保存的数据从堆栈中弹出,返回原来程序。


4.中断编程


  中断编程的一般过程如下:

中断设置:根据外设的不同,具体的设置是不同的,一般至少包含启用中断。中断函数编写:这是中断编程的主要工作,需要注意的是,中断函数应尽可能地减少耗时或不进行耗时操作。

  CC2530所使用的编译器为IAR,在IAR编译器中用关键词_interrupt来定义一个中断函数。使用#progma vector来提供中断函数的入口地址,并且中断函数没有返回值,没有函数参数。中断函数的一般格式如下:


#progma vector = 中断向量

_interrupt void 函数名(void)
{

    //中断函数代码

}

  在中断函数的编写中,当程序进入中断服务程序之后,需要执行以下四个步骤: 将对应的中断关掉(不是必须的,需要根据具体情况来处理);其次如果需要判断具体的中断源,则根据中断标志位进行判断(所有I/O中断共用1个中断向量,需要通过中断标志区分是哪个引脚引起的中断);清中断标志(不是必须的,CC2530中中断发生后由硬件自动清中断标志位);处理中断事件,此过程要尽可能地减少耗时;最后,如果在第一步中关闭了相应的中断源,则需要在退出中断服务程序之前打开相应的中断。

  一般情况下,中断函数的编写是根据实际项目中的需求来定的。以CC2530端口0的P0_4、P0_5外部中断为例,中断程序编写如下所示:


//中断函数入口地址
#pragma vector = POINT_VECTOR

//定义一个终端函数
_interrupt void P0_ISR(void)
{
  //关端口P0_4、P0_5中断
  P0IEN &= ~0x30;

  //判断中断发生
  if(P0IFG > 0)
  {
    
    //清中断标志
    P0IFG = 0;

    /***中断事件的处理***/
  }

}



本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

在我们家,WTW已经运行了14年了。它是一种非连接(不在线)的通风机,从房子外面吸收新鲜空气,经过过滤后空运到房子里。新鲜的环境空气是用从房子里大多数房间取出的空气预热的。再加热的能量是通过热交换器从流出的“脏”空气中获...

关键字: Zigbee LED 传感器

在智能家居系统中,无线传感器、控制器等设备对电源的稳定性与能效提出严苛要求。尤其在采用Zigbee协议的场景中,低功耗待机与智能唤醒机制成为延长设备续航、保障网络可靠性的核心设计要素。本文从电源架构设计、Zigbee模块...

关键字: Zigbee 低功耗

在物联网(IoT)技术生态中,低功耗广域网络(LPWAN)凭借其长距离、低功耗的特性,成为机器对机器(M2M)通信的核心支撑技术。LoRaWAN、NB-IoT与Zigbee作为三大主流技术,在能效管理、覆盖范围及应用适配...

关键字: LoRaWAN NB-IoT Zigbee

ZigBee是短距离通信的一种新兴双向无线通信技术。它具有近距离、低复杂度、低功耗、低数据速率、低成本的优点,使用2.4GHz波段。

关键字: Zigbee

为增进大家对智能家居的认识,本文将对智能家居技术ZigBee予以介绍。通过本文,您将了解到ZigBee技术的特点以及ZigBee和WiFi的区别。

关键字: 智能家居 指数 Zigbee

半导体技术持续向纳米尺度推进的过程,晶体管结构的创新成为突破物理极限的关键。从FinFET到GAA(全环绕栅极)晶体管的技术迭代,本质上是对量子隧穿效应、短沟道效应等微观物理现象的主动应对。GAA晶体管通过纳米片或纳米线...

关键字: LoRa Zigbee

Zigbee是智能家居生态系统中最流行的无线通信协议之一,以其可靠性、低功耗和强大的网状网络功能而闻名。在本教程中,我们将探讨如何利用Zigbee在强大而紧凑的DFRobot Beetle ESP32-C6微控制器上创建...

关键字: 智能照明 Zigbee Beetle ESP32-C6

如果您希望涉足Zigbee开发领域,那么这个项目非常适合您。在本教程中,我们将指导您使用Omnimo nRF52840开发板与Temp&Hum 24 Click (HDC3021传感器)配对构建无线温湿度传感器。...

关键字: Zigbee 传感器 HDC3021 Omnimo nRF52840

传感网作为物联网技术的核心支柱,其发展历程映射了从短距离通信到广域覆盖的技术跃迁。自2003年ZigBee协议问世以来,传感网技术经历了从局域网到广域网的范式转变,而LoRa等低功耗广域网(LPWAN)技术的崛起,更推动...

关键字: Zigbee LoRa

我想集成一个继电器与HomeAssistant来轻松控制我的LED条。最近,我一直在深入研究ESP32C6的Zigbee功能,我发现它的低功耗和易于连接非常适合我的需求。使用Zigbee可以让我无缝地将继电器集成到Hom...

关键字: LED EP32C6 Zigbee 继电器
关闭