I.MX6U-裸机-按键中断实验(8)


目录

1.启动文件思路编写——start.s

2.中断服务函数思路编写——int. c

3.GPIO模块思路编写——gpio.c

4.按键中断执行函数思路编写——exti.c

5.总结


 

 

 

 

1.启动文件思路编写——start.s

1.程序入口——_start:

        中断向量表:当执行某个函数的时候,就跳转到某个函数里面去

2.复位中断——Reset_Handler:

        当发送复位时,函数执行到这里。

                (1)关闭IRQ中断

                (2)关闭I,Dcash等

                (3)向量偏移(也可以在C语言中写)

                (4)设置各个模式(IRQ,SYS,SVC)

                (5)打开IRQ中断

                (6)跳到c函数

 

3.IRQ中断——IRQ_Handler:

        当执行中断函数时,函数执行这里 

(1)保存 lr  ro-r3,r12寄存器——为了执行中断之后可以返回到之前的状态

                (2)把r0设置为存放特殊寄存器的寄存器

                (3)把r1设置为设置为GIC寄存器组首地址

                (4)设置r1为gic中的接口器地址

                (5)设置r0为gic中IAR用来保存中断号的寄存器

                (6)保存r0和r1

(2)进入SVC模式

                (1)保存 lr 

                (2)设置r2为system_irqhandler

                (3)进入r2,且r0为该函数的输入参数

中断执行完中断后

                (4)出栈lr

(3)进入IRQ

                (1)出栈 r0,r1

                (2)把r0写到r1+0x10——把GICC_IAR值写到GICC_EOIR里面

                (3)出栈r0

                (4)将r0写到spsr特殊寄存器

                (5)出栈 ro-r3,r12寄存器和 lr

                (6)将lr-4的值赋给pc——因为lr-4才是pc当前要运行的值

4.其他默认函数

        直接写死循环就行

2.中断服务函数思路编写——int. c

1.中断初始化函数

        (1)GIC初始化

        (2)初始化中断表为默认值——数组每个元素的服务函数为死循环,参数为NULL

        (3)设置中断偏移

2.中断注册函数——用来给中断数组表里面的中断函数赋值

        (1)数组里的1号位置函数赋值

        (2)数组里的1号位置参数赋值

3.中断服务函数

        (1)先判断中断号是否正确

        (2)根据中断ID对数组里面对应的中断服务函数进行赋值

3.GPIO模块思路编写——gpio.c

1.gpio中断设置

        (1)关闭EDGE_SEL——不关的化,ICR失效

        (2)判断是ICR1还是ICR2——低16是1,高16是2

        (3)利用switch语句选择触发方式,从而调整寄存器

2.gpio初始化设置

        (1)在原有基础上,引入中断设置初始化——之前只有输入输出,输出电位

3.gpio中断使能和禁止函数

        (1)使能:设置IMR寄存器位1

        (2)禁止:设置IMR寄存器位0

4.gpio中断标志位清除函数思路编写

        (1)设置ISR寄存器为1

4.按键中断执行函数思路编写——exti.c

1.gpio和中断初始化

        (1)GOIO初始化(复用,输入输出,触发)

        (2)GIC初始化——初始化中断ID

        (3)中断注册函数初始化——防止当前中断未结束下一个中断又来了

2.中断执行函数设置

        (1)读取引脚值进行改变beep状态

        (2)清除中断标志位

5.总结

启动文件:建立中断向量表,并给表中的复位和IRQ写上具体执行内容(主要是cp15)

中断文件——int.c:设置一个数组,且内容是结构体(函数+参数),并对数组各元素初始化(函数=死循环,参数=NULL),再建立注册函数,和启动文件对应的中断函数

中断初始化——gpio.c:初始化触发方式

按键中断——exit.c:初始化对于按键(复用,输入输出,触发),GIC,注册函数。并编写具体执行中断函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值