按键中断部分的理解

发布者:HappyHearted最新更新时间:2025-02-10 来源: cnblogs关键字:按键  中断部分  S5PV210 手机看文章 扫描二维码
随时随地手机看文章

初始准备

初始化Tx、Rx对应的GPIO引脚

设置1个停止位,8位数据位

发送和接收都是polling

禁止modem、afc

波特率设置

  • 初始化按键中断(在key.c中:以中断方式处理按键)

外部中断对应的GPIO设置

中断触发模式

中断允许

清挂起,清除是写1

绑定异常向量表

禁止所有中断

选择中断类型为IRQ

清VICxADDR

  • 绑定isr到中断控制器硬件

  • 使能中断

运行过程:

程序运行-----> 按键按下-------->硬件自动跳转到异常向量表的IRQ中断部分 -------->由于向量表这里写的是IRQ_handle的函数地址,所以又发生一次跳转 ----------

---> 到汇编中执行IRQ_handle,具体作用为:保护现场、跳转到真正的中断处理程序、返回时的现场恢复 ---------> 到.c文件中执行IRQ_handler函数 --------->由于除了按键之外的其他的一些中断也会导致发生IRQ中断,所以不一定是按键中断------->由于S5PV210帮我们硬件实现了发生的中断位置1,所以我们只需要到vicaddr[i]中读取函数执行就可以了。

 

 

 

 

第二次理解:

S5PV210中,有异常向量表,当出现中断时会硬件会自动跳转到异常向量表中,去执行向量表中对应的代码,但是向量表中实际上每个异常只提供了4个字节,所以我们在异常向量表中存的实际上是中断处理函数的地址。

那么分析一下,按键处理的中断,首先我们做好初始工作

按键部分key.c:

  • 按键设置为中断处理模式

  • 下降沿触发

  • 中断允许

  • 清挂起

  • 写好真正的中断处理程序以便于将来和VICnADDRESS中的中断源编号绑定。

中断部分int.c:

  • 写好异常向量表中各个中断对应的异常处理代码,重点写好中断处理的代码。

  • 绑定异常中断处理函数的地址到异常向量表

  • 初始化中断控制器:禁止所有中断 VICnINTENCLEAR = 0xffffffff;选择中断类型为IRQ中断,清除清VICnVECTADDR

  • 写好绑定函数,用于绑定isr到VICnVECTADDR

  • 使能中断函数VICnINTENABLE

  • 禁止中断函数VICnINTENCLEAR

  • 中断处理程序:直接到VICnVECTADDR中取出isr函数去执行

汇编文件start.S

  • 写好中断保护现场的过程

main函数

  • 做好中断初始化 

  • 串口初始化

  • 调用绑定异常向量表函数

  • 调用绑定isr函数

  • 使能中断

按键iRQ中断执行步骤:

  • (1)按键按下

  • (2)硬件跳转到异常向量表执行对应的中断处理,同时将isr硬件自动推送到VICnVECTADDR

  • (3)异常向量表中是IRQ中断地址,指向汇编文件,在汇编文件中做好现场保护工作,比如设置IRQ模式下的栈,保存r0~r12,跳转到中断处理程序

  • (4)从汇编跳转到中断处理程序中执行,使用指针的方式间接访问VICnVECTADDR中由硬件自动推送的函数,执行。

  • (5)程序执行结束,跳转到汇编中恢复现场


关键字:按键  中断部分  S5PV210 引用地址:按键中断部分的理解

上一篇:安装交叉编译工具链
下一篇:uboot初步-01

推荐阅读最新更新时间:2026-03-22 11:48

基于linux操作系统下s5pv210板子的按键中断实验
首先,在做这个实验之前有三件事是要明确的: 1. linux下的中断实验不需要像裸机实验一样要自己写取消屏蔽,清除中断标志位的操作,系统会自动帮你完成; 2.中断号的申请我使用的是gpio_to_irq()这个宏,它会帮我们自动分配中断号,返回值为中断号; 3. 在每个板子配套来的内核代码大部分都是已经包含了按键中断驱动,如果想另自己写的按键中断驱动不与内核本身带的发生中断号上的冲突,应先找到内核代码下的arch/arm/mach-s5pv210/mach-mini210.c中的gpio_bottons中的对按键初始化的代码注释掉(其他板子也类似),如下代码所示: static struct gpio_keys_
[单片机]
s5pv210——按键
1:按键原理图 按键按下的时候EINT2、EINT3、KP_COL0-3为低电平; EINT2、EINT3引脚接在GPH0_2、GPH0_3引脚,引脚配置为输入模式,当引脚检测为低电平的时候说明有按键按下, KP_COL0-3引脚为GPH2_0~GPH2_3,,引脚配置为输入模式,当引脚检测为低电平的时候说明有按键按下, 2:代码实战 轮询方式检测有无按键 /* * s5pv210裸机实验 * * key * */ #define _REG_GPH0CON (*(volatile unsigned int *)0xE0200C00) #define _REG_GPH0DA
[单片机]
<font color='red'>s5pv210</font>——<font color='red'>按键</font>
使用STM32hal库usart的接收中断分析及出现部分问题的解决
最近开始使用ST的hal库,这个库相较于之前的标准库,优缺点兼具吧,hal库封装了更多底层的细节,我们可以很轻易的实现我们需要的功能,但是由于封装了太多的细节,导致一旦出问题,你就很难发现问题,内部调用的复杂让你觉得懵逼。 (一)hal库接收中断的分析 这几天在使用hal库的USART,其中用到的是接收中断,官方推荐的使用接收中断的方式是:在初始化函数上面先开启接收中断(这里就不介绍串口的配置,网上一大推,我就不给世界增加无谓的存储量了),开启的函数如下: HAL_UART_Receive_IT(&huart2,(uint8_t*)aRxBuffer, 1);//该函数会开启接收中断:标志位UART_IT_RXNE,并且设
[单片机]
关于STM32中断部分理解
中断这个问题从学习stm32一开始就困扰着我,我想估计很多初学者都会有这样的问题。曾经问过隔壁实验室的职工,人家没告诉我,让我自己回去理解。同行是冤家,这句话很在理。 首先提出我对几个中断的理解不了的问题: 1、中断是干嘛的? 2、中断是如何从函数进入的? 3、中断相关设置是如何设置的? 第一个问题:关于中断可以有一个很形象的解释:你正在吃饭,突然尿急了,准备去尿尿,中断了吃饭的这一过程。从程序上解释就是吃饭可以分解为一系列的动作,称为主程序,每个动作相当于函数,组成了这个主程序。这时候你尿急了,产生了一个信号,相当于中断信号,告诉大脑CPU,现在尿急比较重要,不然会尿裤子。这时候大脑会停下吃饭这一主程序,去执行撒尿这程序
[单片机]
关于中断部分的小结
主要是针对外部中断部分,总结外部中断对特殊功能寄存器的设置以及程序的编写流程。此外这里重点介绍一些中断扩展的方法。 外部中断信号是由P3口的P3.2和P3.3两个管脚输入的。 外部中断程序编写流程: 一、外部中断初始化: 在使用外部中断前,先要设置相关特殊功能寄存器,即初始化过程; 1.开CPU总中断:EA=1; 2.开外部中断: 开外部中断0:EX0=1; 开外部中断1:EX1=1; 3.设置外部中断触发方式: 外部中断0触发控制位IT0; 当IT0=0时,为电平触发方式 当IT0=1时,为边沿触发方式(下降沿有效) 外部中断1触发控制位IT1(同上); 4.外部中断优先级设置(可以不设置) PX0=1; PX1=1;
[单片机]
S5PV210 uboot中的 MMU代码分析(1)
1:经过上一节的分析,如果采用SECTION虚拟地址映射的话; 程序员只需要做的事情: (1) 建立转换表,Tanslation Table; (2) 将TTB(转换表基地址Tanslation Table Base)写入协处理器CP15的C2寄存器,这里要注意转换表 基地址为16K对齐的(因为4096*32bit=16K)所以TTB的bit0-bit13为0。 (3) 使能MMU,将CP15的C1寄存器0bit写1; (4) 设置域的访问权限;设置C3寄存器; CPU/MMU做的事情: (1) CPU核心看到和用到的只是虚拟地址VA,至于VA如果去对应物理地址PA,CPU核心不理会,MVA是除CPU核心 外的其他部分看到的虚拟地
[单片机]
<font color='red'>S5PV210</font> uboot中的 MMU代码分析(1)
QT开发之移植qt5.6.2到S5PV210
1、移植前的准备工作  (1)确认已经烧录uboot,并设置环境变量bootcmd和bootargs从tftp、nfs启动;  (2)zImage事先编译好的,文件夹形式的rootfs准备好,成功启动内核进入命令行;  (3)ts驱动源码确认添加、设备文件确认OK(dev/input/event2)(cat dev/input/event2 点击触摸屏有乱码打印出来); 2、tslib移植和测试  (1)源码下载  (2)解压 tar -xvf tslib-1.4.tar.gz  (3)配置 cd tslib ./autogen.sh echo ac_cv_func_malloc_0_nonn
[单片机]
wince 5.0/wince6.0 2440/6410/S5PV210 触摸屏驱动 滤波函数的介绍
以前曾经遇到过wince 手持机,POS机触摸屏 抖动,跳点,飞点的问题,其中起作用最大的就是触摸屏滤波函数,现在给大家介绍一下。 //----------------------------------------------------------------------------- //--函数介绍:触摸屏滤波函数,每次输入一个采集到的触摸屏点(x/y),然后进行滤波 //------------------------------------------------------------------------------ static BOOL Touch_Pen_Filtering(INT *px, INT *py
[单片机]
小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2026 EEWORLD.com.cn, Inc. All rights reserved