IMX6ULL裸机下GPIO中断

IMX6ULL中断

IMX6ULL中断也就是ARM-A7中断有复位中断、未定义指令中断、SVC中断、预取中断、数据终止中断、未使用中断、IRQ中断、FIQ中断,要使用这些中断需要映射地址偏移,因为程序是从87800000开始的所以中断也要从这个地址开始。

一、在复位中断中要做的事情是:

1.关闭Cache也就是数据缓存与指令缓存 与关闭MMU,因为Cache与MMU需要经过复杂的配置才能使用,不然可能会出问题。

2.定义八个中断的地址

3.清除BSS段

4.设置各个模式下的SP指针

5.跳转到MAIN函数

注意!复位中断需要进入中断时关闭IRQ,最后的时候打开IRQ

二、在IRQ中断做的事情是:

主要是对进入中断进行数据保护,并且调用system_irqhandler函数

三、对GIC控制器进行初始化

1.调用GIC初始化函数,在core-a7.h文件中有定义

2.初始化中断处理函数表(中断处理函数表记录了每一个ID对应的函数与参数)

3.设置中断向量偏移

四、对需要的中断功能的外设进行初始化(此处为GPIO)

1.清除EDGE_SEL寄存器,这个寄存器的作用是:如果被置1那么 ICR寄存器不起作用,触发方式为上升延与下降延都会触发

2.设置ICR寄存器,ICR寄存器是配置IO的触发方式(如果EDGE_SEL被置位那么不起作用)

3.配置IMR寄存器,使能指定的IO中断

五、注册回调函数

在汇编代码中每次触发IRQ中断都会调用system_irqhandler函数并且会带有一个中断ID号的参数,所以可以通过这个ID号来访问中断处理函数表中对应的参数

1.调用system_register_irqhandler函数来注册

你可能感兴趣的:(IMX6ULL裸机下GPIO中断)