原创 [博客大赛]S3C6410中断控制,基于OK6410A裸机按键中断程序(2)

2014-4-20 13:27 1357 11 11 分类: MCU/ 嵌入式 文集: S3C6410

S3C6410中断控制,基于OK6410A裸机按键中断程序2

前面大概讲了一下外部中断的流程,现在我就开始按照此流程,结合具体的硬件进行整理和编程了。下面讲到具体的寄存器都按照OK6410开发板对应的GPN讲解。

 

1GPIO的配置

相信你已经开始写中断程序了,基础的IO控制LED的程序肯定已经写过了,那一定知道控制GPIO一般就如下几个寄存器:

GPNCON——端口控制寄存器、可读可写

GPNDAT——端口数据寄存器、可读可写

GPNPUD——端口上下拉寄存器、可读可写,对于按键中断,显然我们只需要用到GPNCON,将端口设置为中断模式即可,按照下图,将对应的位设置为10即可。

20140420132624433001.png

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     

此处为了更清楚的表明设置的过程,设置的稍有复杂,大家可以直接简化为注释后面的,同时为了不对其他端口造成影响,严格采用了对应的与或操作。

 

2EINT配置,对应前面描述的中断知识,本按键GPN0~5只涉及到了GROUP0的中断EINTEINT_G0,具体说是EINT_G0_0~5

关于EINT的配置,我们先总结一下可能涉及到的寄存器:

20140420132631588002.png总结下来就是四类,EINT控制寄存器,滤波控制寄存器,中断屏蔽寄存器,中断挂载寄存器,当然还有关于优先级等寄存器,如PRIORTY,SERVICE,SERVICEPEND这些,比较高级的功能,我也没有深入,此处暂不表。

此处说一下常用的这三类,(1EINT控制寄存器,用来控制外部中断的触发方式,比如此处可以设定为低电平触发。

20140420132639822003.png

//设置外部中断EINT触发方式低电平触发为x000,最高位忽略,默认为x000,两个共用一个

rEINT0CON0 &= ~((0x07<<0)|(0x07<<4)|(0x07<<8));//把三位都变为0,也可以写为~(0x777<<0)

2)中断屏蔽寄存器EIN0MASK,可读可写,写1屏蔽中断,写0使能中断。此时,我们首先肯定要使能按键中断口。

20140420132646416004.png

//设置中断使能,即将中断屏蔽寄存器置0,

rEINT0MASK &= ~((0x01<<0)|(0x01<<1)|(0x01<<2)|(0x01<<3)|(0x01<<4)|(0x01<<5));//把一位变为0,也可以写成~(0x3f<<0)

3)中断挂载寄存器EINT0PEND,可读可写,读1表示发生中断,读0表示未发生中断,写1表示清除外部中断。

20140420132652544005.png

//清楚外部中断挂载,即外部中断挂载寄存器写1,清楚中断

rEINT0PEND |= ((0x01<<0)|(0x01<<1)|(0x01<<2)|(0x01<<3)|(0x01<<4)|(0x01<<5));//把一位变为1,也可以写成(0x3f<<0)

 

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
我要评论
0
11
关闭 站长推荐上一条 /3 下一条