S3C6410中断控制,基于OK6410A裸机按键中断程序2
前面大概讲了一下外部中断的流程,现在我就开始按照此流程,结合具体的硬件进行整理和编程了。下面讲到具体的寄存器都按照OK6410开发板对应的GPN讲解。
1、GPIO的配置
相信你已经开始写中断程序了,基础的IO控制LED的程序肯定已经写过了,那一定知道控制GPIO一般就如下几个寄存器:
GPNCON——端口控制寄存器、可读可写
GPNDAT——端口数据寄存器、可读可写
GPNPUD——端口上下拉寄存器、可读可写,对于按键中断,显然我们只需要用到GPNCON,将端口设置为中断模式即可,按照下图,将对应的位设置为10即可。
rGPNCON &= ~((0x03<<0)|(0x03<<2)|(0x03<<4)|(0x03<<6)|(0x03<<8)|(0x03<<10));//把两位都变为00,也可以写成~(0xfff<<0)
rGPNCON |= ((0x02<<0)|(0x02<<2)|(0x02<<4)|(0x02<<6)|(0x02<<8)|(0x02<<10));//把前一位变为1,也可写成0xaaa<<0
此处为了更清楚的表明设置的过程,设置的稍有复杂,大家可以直接简化为注释后面的,同时为了不对其他端口造成影响,严格采用了对应的与或操作。
2、EINT配置,对应前面描述的中断知识,本按键GPN0~5只涉及到了GROUP0的中断EINT即EINT_G0,具体说是EINT_G0_0~5。
关于EINT的配置,我们先总结一下可能涉及到的寄存器:
总结下来就是四类,EINT控制寄存器,滤波控制寄存器,中断屏蔽寄存器,中断挂载寄存器,当然还有关于优先级等寄存器,如PRIORTY,SERVICE,SERVICEPEND这些,比较高级的功能,我也没有深入,此处暂不表。
此处说一下常用的这三类,(1)EINT控制寄存器,用来控制外部中断的触发方式,比如此处可以设定为低电平触发。
//设置外部中断EINT触发方式低电平触发为x000,最高位忽略,默认为x000,两个共用一个
rEINT0CON0 &= ~((0x07<<0)|(0x07<<4)|(0x07<<8));//把三位都变为0,也可以写为~(0x777<<0)
(2)中断屏蔽寄存器EIN0MASK,可读可写,写1屏蔽中断,写0使能中断。此时,我们首先肯定要使能按键中断口。
//设置中断使能,即将中断屏蔽寄存器置0,
rEINT0MASK &= ~((0x01<<0)|(0x01<<1)|(0x01<<2)|(0x01<<3)|(0x01<<4)|(0x01<<5));//把一位变为0,也可以写成~(0x3f<<0)
(3)中断挂载寄存器EINT0PEND,可读可写,读1表示发生中断,读0表示未发生中断,写1表示清除外部中断。
//清楚外部中断挂载,即外部中断挂载寄存器写1,清楚中断
rEINT0PEND |= ((0x01<<0)|(0x01<<1)|(0x01<<2)|(0x01<<3)|(0x01<<4)|(0x01<<5));//把一位变为1,也可以写成(0x3f<<0)
文章评论(0条评论)
登录后参与讨论