cc2530的I/O中断

通用I/O的中断

cc2530的CPU有18个中断源,每个中断都可以分别使能和控制。

18个中断源的优先级

18个中断源分为6个组,每一组有3个中断源,中断优先级可以通过配置相应寄存器来实现

中断源的分组
编号 中断

  • IPG0 REFRR RF DMA
  • IPG1 ADC T1 P2INT
  • IPG2 URX0 T2 UTX0
  • IPG3 URX1 T3 UTX1
  • IPG4 ENC T4 P1INT
  • IPG5 ST P0INT WDT

中断优先级是由寄存器IP0和IP1来实现的,IP1_X IP0_x表示的数字约大,优先级越高

  • IP1_X IP0_X 优先级
  • 0 0 0(优先级别最低)
  • 0 1 1
  • 1 0 2
  • 1 1 3(优先级别最高)

IP1_X与IP0_X中的X代表了中断优先级组的组名,即IPG0~IPG5,设置优先级时3的优先级最高,0的优先级最低
例:

//设置IPG3的优先级别最高
IP1_IPG3=1;
IP0_IPG3=1;
//设置IPG0的优先级别最低
IP1_IPG1=0;
IP1_IPG0=0

如果在同一个组中的优先级同时发生,会有一个先后,决定这个先后顺序的就是中断轮流探测顺序。(书中有一个表,先不放了,在书上的P.59)

I/O中断

通用I/O设置为输入后,可以用于产生中断,并且通用I/O中断还可以设置其触发方式,在设置中断时需要将发生中断引脚的使能位置置为1,端口使能位设置寄存器:

  • P0端口中断使能位——IEN1.P0IE
  • P1端口中断使能位——IEN2.P1IE
  • p2端口中断使能位——IEN2.P2IE
这里一定要注意,IENx寄存器中断使能是对整个端口进行使能,不是对某一个引脚。

中断使能寄存器IEN1控制P0端口,定时器1~4和DMA中断的使能和禁止,如果需要某一位中断使能,只需将IEN1中对应的位设置为1即可。

  • 中断使能寄存器IEN1
  • 位 名称 复位 描述
  • 7:6 --- 00 保留
  • 5 P0IE 0 端口0中断使能
  • 4 T4IE 0 定时器4中断使能
  • 3 T3IE 0 定时器3中断使能
  • 2 T2IE 0 定时器2中断使能
  • 1 T1IE 0 定时器1中断使能
  • 0 DMAIE 0 DMA中断使能

IEN1中断设置

//设置P0端口中断使能
IEN1 |= 0x20;
  • 中断使能寄存器IEN2
  • 位 名称 复位 描述
  • 7:6 --- 00 保留
  • 5 WDTIE 0 看门狗定时器中断使能
  • 4 P1IE 0 端口1中断使能
  • 3 UTX1IE 0 USART1 TX中断使能
  • 2 UTX0IE 0 USART2 TX中断使能
  • 1 P2IE 0 端口2中断使能
  • 0 RFIE 0 RF一般中断使能

IEN2中断设置

//设置P1和P2端口中断使能
IEN2|=0x12;

IEN1使能寄存器可以控制P0端口中断使能,IEN2中断寄存器可以控制P1端口和P2端口中断使能。

控制某一引脚的中断使能PxIEN(x=0,1,2)
//设置P0_5中断使能
P0IEN |= 0x20;

//设置P0端口中断使能
IEN1 |= 0x20;
控制中断是由上升沿触发还是由下降沿触发PICTL
  • 中断触发方式寄存器PICTL
  • 位 名称 复位 描述
  • 7 PADSC 00 控制I/O引脚在输出模式下的驱动能力
  • 6:4 --- 000 保留
  • 3 P2ICON 0 端口2的P2.4~P2.0输入模式下的中断配置,该为位所有端口2的输入P2.4~P2.0选择中断请求条件 0为上升沿
  • 2 P1ICONH 0 端口1的P1.7~P1.4输入模式下的中断配置,该位为所有端口1的输入P1.7~P1.4选择中断请求条件 0为上升沿
  • 1 P0ECONL 0 端口1的P1.4~P1.0输入模式下的中断配置,该位为所有端口1的输入P1.4~P0.0选择中断请求条件 0为上升沿
  • 0 P0ICON 0 端口0的P0.7~P0.0输入模式下的中断配置,该位为所有端口0的输入P0.7~P0.0选择中断请求条件 0为上升沿
//设置P0_5下降沿触发中断
PICTL |= 0x01;

总中断EA

//打开总中断
EA=1;

中断标志寄存器 PxIFG(x=0,1,2)

I/O中断发生后,中断标志寄存器相应位会自动置为1

//判断端口P0是否发生中断
if(P0IFG>0)
{

}
//判断P0_5是否发生中断
if(P0IFG&0x20)
{
;

}

设置中断要从小的向大的方向设置,先从引脚,再到端口,再到总中断

CC2530中断处理函数的编写方法

#pragma vector=<中断向量>
__interrupt void <函数名称>(void)       //这里的开头是两个下划线
{

    //函数体

}

原文地址:https://www.cnblogs.com/longbaoshushu/p/12072532.html

时间: 2024-10-08 08:33:51

cc2530的I/O中断的相关文章

TI CC2530基础实验(GPIO通用I/O中断操作——一个中断处理程序处理一个端口的多个中断)

有关CC2530的GPIO基本知识.普通GPIO操作有关寄存器的介绍.IAR Embedded Workbench IDE软件使用:TI CC2530基础实验(普通GPIO操作--点亮led灯) 有关CC2530通用I/O中断操作的基础知识.相关寄存器介绍:TI CC2530基础实验(GPIO通用I/O中断操作--按键控制灯的亮灭) 电路原理图: 程序: /************************************** * 基础实验只需要添加以下这个头文件即可 **********

【CC2530入门教程-03】CC2530的中断系统及外部中断应用

第3课  CC2530的中断系统及外部中断应用 广东职业技术学院  欧浩源 一.中断相关的基础概念  内核与外设之间的主要交互方式有两种:轮询和中断. 轮询的方式貌似公平,但实际工作效率很低,且不能及时响应紧急事件:中断系统使得内核具备了应对突发事件的能力. 在执行CPU当前程序时,由于系统中出现了某种急需处理的情况,CPU暂停正在执行的程序,转而去执行另外一段特殊程序来处理出现的紧急事务,处理结束后,CPU自动返回到原来暂停的程序中去继续执行. 这种程序在执行过程中由于外界的原因而被中间打断的

TI CC2530基础实验(定时器3中断方式——自由运行模式)

本实验实现通过CC2530的定时器3(8位)查询方式控制LED1以1S的周期性闪烁,此实验使用有关定时器3的2个寄存器T3CTL(定时器3控制寄存器),IEN1(中断使能1寄存器). 有关CC2530的GPIO基本知识.普通GPIO操作有关寄存器的介绍.IAR Embedded Workbench IDE软件使用:TI CC2530基础实验(普通GPIO操作--点亮led灯) 原理图: 寄存器分析: 程序: #include <ioCC2530.h> /********************

CC2530的外部中断

中断介绍 什么是中断? 在C语言中是没有中断的,一个标准的C语言程序,是从main函数开始执行的,main函数退出或者标准库中定义的一些退出函数被调用,程序也就结束了.对于单片机系统,如果硬件发生了一些事件需要应用程序立即来处理,这就需要用到中断了.要CPU立即暂停执行即将执行的指令,去执行一些特定的指令,执行完成之后再回到暂停的位置继续执行,这种机制就叫中断. 中断的优势 让硬件可以把事件通知到软件,提高了响应的实时性. 实现异常处理,提高了系统的稳定性. 提高CPU的效率.注意:如果中断太频

掌握所有IO口的外部中断

外部中断配置流程 1.初始化IO口工作在普通IO.上拉输入状态. 2.首先开IO口组中断(P0IE=1.P1IE=1.P2IE=1): 3.开组内对应的具体某IO口中断(P0IEM.P1IEM.P2IEM该寄存器里面的对应位对应相应的IO口): 4.上升沿还是下降沿触发(PICTL寄存器): 5.开CPU总中断EA=1; #include <cc2530.h> void main() { //步骤1 P0SEL &=0xDF;//P05口表示为普通IO口 P0DIR &=0xD

【CC2530入门教程-增强版】基础技能综合实训案例(基础版)-终端源码

[CC2530入门教程-增强版]基础技能综合实训案例(基础版)-终端源码 广东职业技术学院 欧浩源 一.关于硬件电路 关于这个综合实训案例,具体需求详见<[CC2530入门教程-增强版]基础技能综合实训案例(基础版)-题目需求>. 我自己实在"全国职业院校技能大赛--物联网技术应用赛项"的Zigbee模块上实现的.该模块的电路应该和TI公司官方评估板的推荐电路差不多,我想现在市面上很多开发板也是参考这样的电路设计,只要您使用的开发板上有LED灯.按键输入.串口输出和一路A/

CC2530定时器使用

?? 定时器学习   文件夹 说明...1 协议栈函数使用...2 设置初始化定时器...2 回调函数(中断服务函数)3 启动定时器...3 停止定时器...4 寄存器操作...4 查询方式...4 中断方式(使用定时器3)7 说明 依据数据手冊可知CC2530总共同拥有4个定时器,可是定时器2被系统占用,可用的仅仅有三个,分别为定时器1/3/4 Timer在协议栈的代码位置为hal_timer.c,hal_timer.h,4个定时器的ID分别为 /* Timer ID definitions

[ZigBee] 4、ZigBee基础实验——中断

前言 上一篇介绍了CC2530的IO的基础知识,并用LED的控制来展示如何配置并控制GPIO的输出,用KEY状态的读取实验来展示如何读取GPIO的状态.从上一节的KEY状态读取的代码看出是采用轮训方式的,这种方式是很浪费资源,本节将介绍一种中断方式来替换轮训的方案. 一.中断 电路依然没变,若要使用CC2530的外部中断需要使用P0IEN.PICTL.P0IFG.INE1寄存器. 按键中断初始设置为: 1 /********************************************

cc2530 timer 3 PWM &lt;可调占空比&gt;

前提: 开始用的是 cc2530 timer 1来做PWM的,已经可调占空比了,但是由于硬件的改动,需要用timer 3 和 timer 4 代替.由于调试过程中出了些小问题,于是自己把这个贴出来.关键点注释出来. 说说  硬件吧: timer 1    P1_0 口 timer 3   P1_6   P1_7口. 注意: P1_6 对应着timer 3的通道 0 ,也就是对应着 t3cc0 这类寄存器,而非t3cc1; P1_7对应着timer 3的通道1,也就是对应着t3cc1 这类寄存器.