通用IO的中断
来源:互联网 发布:监控mysql sql性能 编辑:程序博客网 时间:2024/05/16 12:42
前言
有的人问我,为什么我的博客没有讲有多少引脚,分别是什么之类的问题。我想说的是这些你都可以从官方手册上知道的,本博客只是告诉大家怎么使用罢了。让大家能够更好的理解。
接上一篇博客,如何使用中断方式控制灯的闪烁。
中断方式一般有以下几个步骤:设置优先级、使能、判断是否发生中断。
第一步,中断优先级的配置
已知IP1_X和IP0_X是设置优先级的,其中X是中断优先级组的组名。0的优先级别最低,3的优先级别最高。
比如:
IP1_IPG3=1; IP0_IPG3=1;
第二步,中断使能寄存器的配置
由于通用IO配置输入就可以用于产生中断了。由于按键P0_3是P0口的。而P0口的中断使能寄存器是IEN1;
IEN1 |=1<<5;
由于IENx是将所有Px端口引脚都设置为中断方式,如果要单独设置某一引脚中断使能,除了设置IENx,还需要设置PxIEN。
PxIEN单独使能一个引脚的配置
比如说按键P0_3
P0IEN |=1<<3;IEN1 |=1<<5;
第三步,设置中断的触发方式
0为输入上升沿触发,1为输入的下降沿触发
/*设置按键P0_3为下降沿触发中断*/PICTL|=1<<0;
第四步,打开总中断
EA=1;
至此中断配置已经配置完,接下来需要判断是否发生中断。这时候就需要用到中断标志寄存器了。不要配置中断寄存器,发生中断时只需要判断该标志.
假如P0口有中断,但不需要确认是哪个引脚发生中断,只需要判断P0IFG是否大于0;
由于我们要确认P0_3口发生中断,就需要判断PxIFG相应的位是否置1;
if(P0IFG&(1<<3)){}
是不是很简单呢?那么我们开始动手改造上个程序吧。
/*定义LED1*/#define LED1 P0_1/*定义按键*/#define SW1 P0_3void LEDinit()//LED的初始化{ P0SEL&=~(1<<1);//配置通用IO PODIR |=1<<1;//配置输出模式}void KEYinit(){ P0IFG &=0x00;//P0中断标志清0 P0SEL &=~(1<<3);//配置通用IO P0DIR &=~(1<<3);//配置输入模式 P0INP &=~(1<<3);//配置为上拉/下拉 P0IEN |=1<<3;//P0_3中断使能 PICIL |=1<<0;//下降沿触发 EA=1;//打开总中断 IEN1 |=1<<5; //端口0的中断使能 }/*中断服务程序*/#pragma vector=P0INT_VECTOR__interrupt void P0_ISR(void){ if(P0IFG>0)//最好使用判断条件为P0IFG&(1<<3) { P0IFG=0;//清中断标志 LED1=!LED1; } P0IFG=0;//清中断标志}void main(){ /*LED的初始化*/ LEDinit(); LED1=0; /*按键的初始化*/ KEYinit(); while(1) {}}
是不是很简单,学完了通用IO,下期博客我们介绍一下外设IO。
授人以鱼,不如授人以渔。下期见。
0 0
- 通用IO的中断
- 学习通用IO与外部中断
- 初步探讨Zigbee之通用IO(中断例子)
- 通用的双向IO的VERILOG实现
- 基于S3C2410的通用IO编程
- 基于S3C2410的通用IO编程
- 通用的IO流文件读取工具
- cc2530的通用IO和外设IO的区别
- ARM通用中断控制器
- Linux 通用中断子系统
- 浅谈通用定时器中断
- S5PV210的中断处理机制(多数CPU通用)
- (四)通用定时器的定时功能(使用中断)
- MSP430F5529的IO口管脚的中断学习笔记
- 驱动的io端口的申请,注册中断
- 中断/IO/DMA
- 中断/IO/DMA
- STM8S IO外部中断
- python-taberror
- 给imagimageview 添加边框设置阴影
- 第十三课 元表(metatable)与元方法(metamethod)
- React Native自定义导航条
- Android设置Toolbar的标题居中
- 通用IO的中断
- 购物车功能如何实现
- awk 求最大值,最小值
- memcached简介及java使用方法
- NS3 LTE基于X2接口的内部切换
- Toast类避免显示时间叠加的方法
- MySQL安装和设置图解
- 精益——通往涅槃之路上的生存策略
- 查看是否有摄像头和麦克风权限