当前位置:首页 > 嵌入式培训 > 嵌入式学习 > 学习笔记 > 嵌入式学习笔记:arm按键中断实现流程

嵌入式学习笔记:arm按键中断实现流程 时间:2018-09-14      来源:未知

下面就来用按键K2实现中断的详细流程

1> 确定想用哪个按键(自己定,比如K2)

2> 看板子,找到那个按键,板子上印的名字是K2 3> 查看原理图找到K2对应的GPIO管脚

a> 看开发板的原理图,在开发板原理图里面找K2,发现对应的接线UART_RING

b> 查找UART_RING,发现接的是CON4的58脚

c> 知道CON4是开发板与核心板之间的接口,开发板的CON4对应核心板的CON3 (此信息来源可以咨询硬件工程师,或者自己从板子上找,可能需要把核心板和开发板分离才看得到)

d> 去核心板的原理图去继续找UART_RING,能找到它对应的是GPX1_1管脚,此管脚对应XEINT9

4> 查看芯片手册,看GPX1是怎么用的

配置GPX1CON,需要把GPX1_1配置成外部中断模式,即选择EXT_INT41[1],对应的是EXT_INT41 (通过学习芯片手册,或者通过参考别人的程序,或者参考芯片公司提供的参考方案,或者请教有经验的人)

5> 查看芯片手册,看EXT_INT41是怎么用的

配置EXT_INT41CON,设置外部中断的触发方式,比如设置成下降沿触发

配置EXT_INT41_MASK,打开中断开关 (通过学习芯片手册,或者通过参考别人的程序,或者参考芯片公司提供的参考方案,或者请教有经验的人)

6> 查看芯片手册,看XEINT9是怎么用的,第9章

查看中断源表 Table 9-2,查到外部中断EINT9对应的是SPI25号,ID

是57

(通过学习芯片手册,或者通过参考别人的程序,或者参考芯片公司提供的参考方案,或者请教有经验的人)

7> 编写程序

a> 先搭框架:一个初始化函数,一个中断处理函数 b> 具体实现

配置:

第一阶段: 1 6.2.3.198 GPX1CON 配置GPX1_1管脚为外部中断

26.2.3.211EXT_INT41CON配置中断的触发方式

36.2.3.223EXT_INT41_MASK打开管脚中断(使能中

断)

(GIC)第二阶段:

19.5.1.16 ICDISER_CPU使能相应(57号)中断

29.5.1.21 ICDIPR_CPU设置中断优先级

3 9.5.1.22 ICDIPTR_CPU 把57号中断交给那个 CPU处理(CPU0)

49.5.1.12 ICDDCR使能CPU0中断

59.5.1.2 ICCPMR_CPUn设置CPU0的中断优先级掩码为不屏

69.5.1.1 ICCICR_CPUn使能GIC中断总开关

处理:

第三阶段:

19.5.1.4 ICCIAR_CPUn得到中断号57

处理中断

26.2.3.227 EXT_INT41_PEND 清除管脚中断标志(必须清)

3 9.5.1.19 ICDICPR_CPU 清除GIC控制器的57号中断标志

4 9.5.1.5 ICCEOIR_CPUn 结束中断

中断处理函数

1. 汇编部分

保护现场调用C部分恢复现场

2. C部分

提取中断ID号,ICCIAR_CPU0

根据ID号做不同的处理

清除中断标志位,ICDICPR1_CPU0,EXT_INT41_PEND

中断结束,ICCEOIR_CPU0 c> 编译程序 make

d> 下载编译好的程序到板子的内存里运行

配置K2为中断源

一、接线:

1、在开发板上找到K2连接的是UART_RING

二、查芯片手册

配置:

1、配置GPX1_1管脚为外部中断

2、配置中断触发方式为下降沿触发

3、打开管脚中断,使能中断

4、使能相应中断

ICDISER1_CPU0=ICDISER1_CPU0|(1<(57-32))

6、把中断57交给CPU0处理

 

每个中断交给那个CPU处理由8个bit位描述,例如交给核心0处理,那么对应的8bit位为0b00000001,一共160个中断源,160*8/32=40,所以每个核心需要40个对应的寄存器

ICDIPTR14_CPU0=ICDIPTR14_CPU0&~(0xFF<<8)|(1<<8)

5、设置中断优先级

ICDIPR14_CPU0=ICDIPR14_CPU0&~(0xFF<<8)|(12<<8) 7、打开CPU0中断

ICDDCR=1

8、设置CPU0的中断优先级掩码为不屏蔽

中断优先级掩码默认为0,屏蔽所有中断,需要设置0-7bit位为0XFF,响应所有中断。ICCPMR_CPU0=0xFF 9、使能GIC中断总开关

ICCICR_CPU0=1

中断处理:

1、得到中断号

ICCIAR_CPU0 & (0x3FF)

2、清除管脚中断标志

EXT_INT41_PEND |= 1 << 1

3、清除GIC控制器的SPI 25(57)中断标志

 

ICDICPR1_CPU0 |=1<< (57-32)

4、结束中断

ICCEORIR_CPU0 = ICCEORIR_CPU0 & ~(0x3FF) | iNum

上一篇:嵌入式学习笔记:指针和指针变量的区别(指针知识点大全)

下一篇:嵌入式学习笔记:ARM串口通信详解

热点文章推荐
华清学员就业榜单
高薪学员经验分享
热点新闻推荐
前台专线:010-82525158 企业培训洽谈专线:010-82525379 院校合作洽谈专线:010-82525379 Copyright © 2004-2022 北京华清远见科技集团有限公司 版权所有 ,京ICP备16055225号-5京公海网安备11010802025203号

回到顶部