小蜜蜂笔记
嵌入式开发与物联网应用教育践行者

【CC2530应用开发08】CC2530的中断系统与外部中断配置

教学内容与重难点

【内容01】中断相关的基础概念与执行过程。
【内容02】CC2530中断系统的结构与工作机理。
【内容03】CC2530中断服务函数的编写格式。
【内容04】外部中断的工作机理及相关寄存器定义。
【内容05】外部中断的初始化和中断服务函数设计。
【内容06】专创融合专题。

【重点】CC2530中断系统的结构与工作机理。
【重点】CC2530中断服务函数的编写格式。
【重点】外部中断的工作机理及相关寄存器定义。
【难点】外部中断的工作机理、初始化函数设计、中断服务函数设计。

教学单元核心内容与学习资源

中断相关的基础概念

【1】内核与外设之间的主要交互方式有两种:轮询中断。轮询的方式貌似公平,但实际工作效率很低,且不能及时响应紧急事件;中断系统使得内核具备了应对突发事件的能力。
【2】在执行CPU当前程序时,由于系统中出现了某种急需处理的情况,CPU暂停正在执行的程序,转而去执行另外一段特殊程序来处理出现的紧急事务,处理结束后,CPU自动返回到原来暂停的程序中去继续执行。 这种程序在执行过程中由于外界的原因而被中间打断的情况,称为中断
【3】每个中断源都对应一个固定的入口地址。当内核响应中断请求时,就会暂停当前的程序执行,然后跳转到该入口地址执行相关的代码,即中断服务函数
【4】中断相关的重要概念:中断源、中断向量/中断入口地址、中断服务函数、中断使能控制位、中断标志位。

【视频教程】: 中断的基本概念与执行过程

CC2530的中断系统的结构与工作机理

CC2530具有18个中断源,每个中断源都由各自的一系列特殊功能寄存器来进行控制。可以编程设置相关特殊功能寄存器,设置18个中断源的优先级以及使能中断申请响应等。

三个中断使能控制寄存器:IEN0、IEN1、IEN2。
详见:【工作手册】《CC2530微控制器应用开发速查宝典》【22】【23】【24】。

CC2530中断服务函数的格式

#pragma vector = <中断向量>
__interrupt void 函数名称()
{
    中断服务函数的具体逻辑实现。
}

【1】在每一个中断服务函数之前,都要加上一句起始语句:#pragma vetcor = <中断向量>
<中断向量>表示接下来要写的中断服务函数是为那个中断源服务的,该语句有两种写法:
#pragma vector = 0x7B #pragma vector = P1INT_VECTOR
前者是中断向量的入口地址,后者是头文件“ioCC2530.h”中的宏定义。

【2】_ _interrupt关键字表示该函数是一个中断服务函数,<函数名称>可以自定义,函数体不能带有参数,也不能有返回值。

【视频教程】: CC2530的中断系统与工作机理

外部中断理论知识

【1】CC2530的P0、P1和P2端口中的每个引脚都具有外部中断输入功能,要使某些引脚具有外部中断功能,需要对IENx寄存器、PxIEN寄存器和PICTL寄存器进行适当的设置。
【2】P0、P1和P2端口分别使用P0IFP1IFP2IF作为中断标志位,任何一个端口组上的引脚产生外部中断时,都会将对应端口组的中断标志自动置位。注意,外部中断标志必须在中断服务函数中手工清除,否则CPU会反复进入中断。
【3】端口状态标志寄存器P0IFGP1IGFP2IFG,分别对应3个端口中各引脚的中断触发状态,当某引脚发生外部中断触发时,对应的标志位会自动置位,该标志同样需要手工清除。
【特别注意】:在中断服务函数中,清除完PxIFG清除PxIF

外部中断工作原理
详见:【工作手册】《CC2530微控制器应用开发速查宝典》【17】。

外部中断使能寄存器INE1和IEN2。
详见:【工作手册】《CC2530微控制器应用开发速查宝典》【15】【16】。

端口输入寄存器PxIEN。
详见:【工作手册】《CC2530微控制器应用开发速查宝典》【18】【19】【20】。

端口输入信号控制寄存器PICTL。
详见:【工作手册】《CC2530微控制器应用开发速查宝典》【21】。

端口中断状态标志寄存器PxIFG。
详见:【工作手册】《CC2530微控制器应用开发速查宝典》【22】【23】【24】。

【视频教程】: CC2530外部中断及相关寄存器

外部中断初始化函数与中断服务函数设计举例

【例】:设计外部中断初始化函数,将P1_2设置成外部中断输入,下降沿触发。
void Init_Exit()
{
  P1IFG = 0x00;        //清除P1端口中断状态标志
  PICTL |= 0x02;       //设置P1_2输入信号下降沿触发
  P1IEN |= 0x04;       //设置P1_2 引脚为外部中断输入
  IEN2 |= 0x10;        //使能P1端口外部中断
  EA = 1;              //打开总中断
}
【例】:设计外部中断服务函数,当P1_2有下降沿触发时,将D4灯的开关状态翻转。
#pragma vector = P1INT_VECTOR
__interrupt void IRQ_EXIT1()
{
  if((P1IFG & 0x04) == 0x04)        //判断是否为P1_2引脚产生外部中断请求
  {
    D4 = ~D4;         //翻转D4灯的开关状态
  }
  P1IFG = 0x00;        //清除P1端口中断状态标志
  P1IF = 0;            //情除P1端口中断标志
}

本课习题

【1】CC2530芯片有____个中断源。
【2】使能总中断的C语言代码是______________。
【3】设置外部中断触发信号类型的寄存器是__________。
【4】P1_2和P1_5引脚产生设定的外部中断触发信号,P1IFG寄存器的值为________。
【5】P1IEN寄存器的值为0x23,当P0_2和P0_5引脚产生设定的外部中断触发信号,P1IFG寄存器的值为______,P1IF标志位的值为____。
【6】P1IEN寄存器的值为0x23,当P1_3和P1_4引脚产生设定的外部中断触发信号,P1IFG寄存器的值为______,P1IF标志位的值为____。

【选择题专辑】CC2530中断系统与外部中断-链接跳转

赞(20)
未经允许不得转载:小蜜蜂笔记 » 【CC2530应用开发08】CC2530的中断系统与外部中断配置

小蜜蜂笔记 更专业 更方便 更高效

联系我们精品小店