CC2530 外部中断配置步骤 世界观速讯

2023-07-06 15:26:14来源:DS小龙哥-嵌入式技术


(资料图)

第一章 硬件原理图分析第二章 配置按键中断步骤第三章 按键中断代码配置示例
#include < ioCC2530.h > ​ //定义LED灯的端口#define LED1 P1_2 #define LED2 P1_3 ​ //定义KEY按键的端口 #define KEY1 P1_0       //定义按键为P1_0口控制 #define KEY2 P1_1       //定义按键为P1_1口控制 ​ /* 函数功能:LED灯IO口初始化 硬件连接:LED1-- >P1_2 , LED2-- >P1_3 */ void LED_Init(void) {     P1DIR |=0x3< <2;  //配置P1_2、P1_3为输出模式     LED1 = 1;     LED2 = 1; } ​ /* 函数功能:初始化按键为中断模式 硬件连接:KEY1-- >P1_0  KEY2-- >P1_1   */ void KEY_InterruptInit(void) {     P1DIR&=~(0x3< <0); //配置P1_0、P1_1为输入模式     P1INP|= 0x3< <0;   //上拉     P1IEN|= 0x3< <0;   //中断使能     PICTL|= 0x1< <1;   //下降沿触发(P1口所有端口都共用一个配置)     IEN2 |= 0x1< <4;   //端口P1中断使能     P1IFG&= ~(0x3< <0);//清除中断标志位     EA = 1;           //使能总中断 } ​ ​ void delay10ms(void)   //误差 0us {     unsigned char a,b,c;     for(c=193;c >0;c--)         for(b=118;b >0;b--)             for(a=2;a >0;a--); } ​ /* 函数功能:P1端口中断处理函数 */ #pragma vector = P1INT_VECTOR   //声明P1口中断服务函数的位置  __interrupt void P1_Interrupt(void)  //中断服务函数的名字的可以随意命名 {          if(P1IFG&1< <0)         //判断按键1中断         {           delay10ms();             if(!KEY1)           {              LED1 = !LED1;              }            P1IFG&=~(1< <0);     //清中断状态         }                  if(P1IFG&1< <1)         //判断按键2中断         {           delay10ms();             if(!KEY2)           {              LED2 = !LED2;              }           P1IFG&=~(1< <1);     //清中断状态         }          P1IF = 0;             //清P1口中断标志 } ​ ​ /*主函数*/ void main(void) {     LED_Init();//初始化LED灯控制IO口     KEY_InterruptInit();//按键初始化     while(1)               {                    } } ​
第四章 CC2530的中断系统说明

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

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

中断服务函数与一般自定义函数不同,有特定的书写格式:

< 1 > 在每一个中断服务函数之前,都要加上一句起始语句: #pragma vector = < 中断向量 > < 中断向量 >表示接下来要写的中断服务函数是为那个中断源服务的,该 语句有两种写法: #pragma  vector = 0x7B   或者   #pragma  vector = P1INT_VECTOR 前者是中断向量的入口地址,后者是头文件“ioCC2530.h”中的宏定义。 ​ ​ < 2 > _ _interrupt关键字表示该函数是一个中断服务函数,< 函数名称 >可以 自定义,函数体不能带有参数,也不能有返回值。

CC2530的外部中断

CC2530的P0、P1和P2端口中的每个引脚都具有外部中断输入功能,要使某些引脚具有外部中断功能,需要对IENx寄存器、PxIEN寄存器和PICTL寄存器进行适当的设置。 除了各个中断源都有自己的中断使能开关之外,中断系统还有一个总开关,可以同“EA = 1;”来打开总中断。

P0、P1和P2端口分别使用P0IF、P1IF和P2IF作为中断标志位,任何一个端口组上的引脚产生外部中断时,都会将对应端口组的中断标志自动置位。注意,外部中断标志必须在中断服务函数中手工清除,否则CPU会反复进入中断。 端口状态标志寄存器P0IFG、P1IGF和P2IFG,分别对应3个端口中各引脚的中断触发状态,当某引脚发生外部中断触发时,对应的标志位会自动置位,这个标志同样需要手工清除。审核编辑:汤梓红

关键词:

上一篇:“不赞同率”急速上扬 蔡英文还能继续糊弄下去吗?(两岸观察)
下一篇:最后一页