文章目录

  • 前言
  • 一、中断过程
  • 二、关键代码

前言

本文基于S3C2440开发板所写的按键中断


一、中断过程

1、初始化。①设置中断,让它能够发出中断信号
②设置中断控制器,让它能发出中断给CPU
③设置CPU,CPSR有I位,它是总开关
2、处理时,要分辨中断源
3、处理完,清中断

二、关键代码

代码如下(示例):

#include "s3c2440_soc.h"
/* SRCPND 用来显示哪个中断产生了, 需要清除对应位* bit0-eint0* bit2-eint2* bit5-eint8_23*//* INTMSK 用来屏蔽中断, 1-masked* bit0-eint0* bit2-eint2* bit5-eint8_23*//* INTPND 用来显示当前优先级最高的、正在发生的中断, 需要清除对应位* bit0-eint0* bit2-eint2* bit5-eint8_23*//* INTOFFSET : 用来显示INTPND中哪一位被设置为1*//*初始化中断控制器*/
void interrupt_init(void) {INTMSK &= ~((1<<0) | (1<<2) | (1<<5));
}/*初始化按键的外部中断*/
void key_eint_init(void) {/* 配置GPIO为中断引脚 */GPFCON &= ~((3 << 0) | (3 << 4));GPFCON |= ((2 << 0) | (2 << 4));    //S2和S3被设置为中断引脚GPGCON &= ~((3 << 6) | (3 << 22));GPGCON |= ((2 << 6) | (2 << 22));    //S4和S5被设置为中断引脚/* 设置中断触发方式 ,双边沿触发*/EXTINT0 &= ~((7 << 0) | (7 << 8));       //清零EXTINT0 |= ((7 << 0) | (7 << 8));      //清零EXTINT1 &= ~(7 << 12);EXTINT1 |= (7 << 12);EXTINT2 &= ~(7 << 12);EXTINT2 |= (7 << 12);/* 设置EINTMASK使能eint11,19 */EINTMASK &= ~((1 << 11) | (1 << 19));
}/* 读EINTPEND分辨率哪个EINT产生(eint4~23)* 清除中断时, 写EINTPEND的相应位*/void key_eint_irq(int irq) {unsigned int val = EINTPEND;if(0 == irq) { //外部中断0:s2控制D12//控制D12if (!(GPFDAT & ( 1 << 0 )) ) {   //if(GPDAT & (1<<0) ==0 )//D12(GPF6)灯亮GPFDAT &= ~( 1 << 6 );} else {//D12(GPF6)灯灭GPFDAT |= ( 1 << 6 );}} else if (2 == irq) {//外部中断2:s3 控制D11//控制D11if (!(GPFDAT & ( 1 << 2 )) ) {//D11(GPF5)灯亮GPFDAT &= ~( 1 << 5 );} else {//D11(GPF5)灯灭GPFDAT |= ( 1 << 5 );}   } else if(5 == irq) {//外部中断8-23,eint11->s4控制 D10,eint19->s5 控制所有LEDif(val & (1 << 11)) { //外部中断11发生//控制D10if (!(GPGDAT & ( 1 << 3 )) ) {//D10(GPF4)灯亮GPFDAT &= ~( 1 << 4 );} else {//D10(GPF4)灯灭GPFDAT |= ( 1 << 4 );}} else if (val & (1 << 19)){ //外部中断19发生if(GPGDAT & (1 << 11)) { //松开GPFDAT |= ( (1 << 4) | (1 << 5) | (1 << 6));//全部灯熄灭} else {GPFDAT &= ~( (1 << 4) | (1 << 5) | (1 << 6)  );//全部灯亮}}    }EINTPEND = val;return ;
}void handle_irq_c() {/* 分辨终中断源 */int bit = INTOFFSET;/*调用对应的处理函数*/if(0 == bit || 2 == bit || 5 == bit) {        //外部中断0/2/8-23key_eint_irq(bit);}/* 清中断:从源头开始清 */SRCPND = (1 << bit);INTPND = (1 << bit);}

S3C2440之按键中断相关推荐

  1. hal库开启中断关中断_[STM32]HAL库下GPIO按键中断与去抖问题分析(分析源码解决问题)...

    自上篇文章STM32 非阻塞HAL_UART_ReceiveIT解析与实际应用,具体总结了HAL库下套娃函数中如何看清库函数的脉络,更细致的认识调用的过程,以解决潜在的问题.又又又遇到了新的问题(GP ...

  2. SOPC第四课 按键中断

    按键 LED控制 开发板 小梅哥AC620 软件 quartus 13.1 2个按键,当按键0按下时,LED灯开始闪烁:当按键1按下时,LED灯停止闪烁. 使用一个PIO 这个PIO设置为6位(4个L ...

  3. c语言 执行free函数程序被卡住,FreeRTOS操作系统,在按键中断函数中恢复被挂起的任务,程序卡死的原因和解决办法...

    FreeRTOS操作系统,在按键中断函数中恢复被挂起的任务,程序卡死的原因和解决办法 时间:2019-08-10 14:39:47  来源:  作者:  所属栏目:其他服务端 这里将告诉您FreeRT ...

  4. Z-Stack通过按键中断实现长按功能

    一.功能介绍 项目需要实现长按功能,实现按键有2种方式,一种是通过中断.一种KEY_CHANGE事件轮询的方式.由于中断更加的灵敏,这里选择中断的方式.意外的发现,如果开启了中断,那么按键就不会触发K ...

  5. 字符设备驱动(四)按键中断

    目录 字符设备驱动(四)按键中断 硬件IO 程序设计 中断配置 中断关闭 中断函数 共享中断号 测试 完整的程序 title: 字符设备驱动(四)按键中断 tags: linux date: 2018 ...

  6. 从ARM裸机看驱动之按键中断方式控制LED(二)

    硬件环境:Samsung Cortex-A9 Exynos4412 BSP 软件环境:Linux3.14 =============================================== ...

  7. 从ARM裸机看驱动之按键中断方式控制LED(一)

    硬件环境:Samsung Cortex-A9 Exynos4412 BSP + JTAG ARM 仿真器 软件环境:Eclipse ================================== ...

  8. 【嵌入式】——串口实验——实现芯片串口收发数据,按键中断串口发送数据,串口接收数据中断来控制LED亮/灭

    实验目的: 实现芯片串口收发数据,按键中断串口发送数据:按下按键,向串口发送数据,并通过虚拟终端显示出来: 串口接收数据中断来控制LED亮/灭:通过串口助手向MCU发送数据,"A" ...

  9. 应广单片机PFS123按键中断控制数码管显示例程

    目录 应广单片机PFS123按键中断控制数码管显示视频 led数码管图片 应广单片机PFS123按键中断控制数码管显示代码 应广科技网址,开发工具,PMS123规格书:http://www.padau ...

最新文章

  1. Java豆瓣电影爬虫——减少与数据库交互实现批量插入
  2. 转:http与https
  3. php成绩管理前段模板,php学生成绩管理系统(模板).doc
  4. linux系统密码自动丢失,通过单用户模式找回linux系统丢失的密码
  5. HDU 1513 Palindrome(最长公共子序列)
  6. LeetCode-数组-189. 旋转数组
  7. centos 7 yum安装mysql完整过程记录
  8. Qt C++属性类型提供给 QML调用(三)
  9. CentOS6.3 重启后/etc/resolv.conf 被还原解决办法
  10. ios集成firebase_如何使用Firebase将Google Login集成到Ionic应用程序中
  11. din算法 代码_DIN算法代码详细解读
  12. [ImportNew]Java线程面试题
  13. 数据结构思维 第二章 算法分析
  14. linux下转移mysql目录
  15. 一起谈.NET技术,疯狂的想法——基于.NET的软件超市平台构想与5年实现之路
  16. 计算机odbc数据源管理位置,使用 ODBC 数据源管理器
  17. 儿童机器人编程入门优先学习什么?
  18. Mac快速录制音频工具:Recordia
  19. Stellarium:诱人的星相不雅察软件
  20. 你想要的宏基因组-微生物组知识全在这(2020.10)

热门文章

  1. JS有效数字取近似值组件封装
  2. datatable、dataset和datarow
  3. 软件测试——工作业务流程
  4. 无线网卡怎么样?无线网卡怎么安装?
  5. 基于mediapipe的动作捕捉和Unity的球棍模型同步
  6. Python三大排序算法实现
  7. 如何通过互联网访问自己的网页
  8. 英特尔的Movidius AI加速技术适用于mini-PCIe版本,旨在加速神经网络
  9. 有善始者实繁,能克终者盖寡
  10. 程序员简历不过的6个原因!