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

2014-4-20 13:07 1950 13 14 分类: MCU/ 嵌入式 文集: S3C6410

近来为了学习Linux嵌入式系统的移植,买了块OK6410A的开发板,当然从裸机程序的开发开始了,然后不可避免遇到了按键中断这样的程序,下面按照思考的过程,写下总结吧!

 

首先,弄清楚硬件连接,通过查看原理图,得到了这样的硬件连接

KEYINT1-GPN0-EINT_G0_0

KEYINT2-GPN1-EINT_G0_1

KEYINT3-GPN2-EINT_G0_2

KEYINT4-GPN3-EINT_G0_3

KEYINT5-GPN4-EINT_G0_4

KEYINT6-GPN5-EINT_G0_5,然后就去S3C6410datasheet寻找对应的端口说明吧,一看不知道,看了吓一跳,三星这个英文文档写的,感觉忒不严谨了,有叫“External Interrupt Group 1”的,有叫“Ext. Interrupt Group 8”的,还有“Ext. Interrupt Group”的,其实他们都是并列关系,外部中断的9个Group,你说为啥不统一写成“Ext. Interrupt Group0、Ext. Interrupt Group1”这样呢,非要一会儿缩写一会儿把0都省去了,害得我前后看了几遍GPIO部分。

 

既然端口对应上了外部中断EINT,决定去统一的整理下S3C6410的中断机制。

1、外部中断源控制器EINT,他一共被分为9个组,每组里面对应不同的IO管脚,S3C6410共有127个外部中断,其外接I/O引脚及分组如下:

外部中断组0   EINT_G0  GPN0---GPN15 、GPL8---GPL14、GPM0---GPM4

外部中断组1   EINT_G1  GPA0---GPA7、GPB0---GPB6

外部中断组2   EINT_G2  GPC0---GPC7

外部中断组3   EINT_G3  GPD0---GPD5

外部中断组4   EINT_G4  GPF0---GPF14

外部中断组5   EINT_G5  GPG0---GPG7

外部中断组6   EINT_G6  GPH0---GPH9

外部中断组7   EINT_G7  GPO0---GPO15

外部中断组8   EINT_G8  GPP0---GPP14

外部中断组9   EINT_G9  GPQ0---GPQ9

以上127个引脚每个引脚都可以产生一个外部中断

 

2、ARM的总中断控制器VIC,他由两个VIC组成,联合起来控制了64个中断源,每个控制32个,因此我们发现VIC的控制寄存器都是对应的有VIC0就有VIC1,其中我们找到了与外部中断有关的127个外部中断在VIC里的中断号的对应关系:

NO.      中断源          说明明                            GROUP

0        INT_EINT0       外部中断组0 (EINT_G0)引脚号0-3              VIC0

1        INT_EINT1       外部中断组0 (EINT_G0)引脚号4-11             VIC0

32       INT_EINT2       外部中断组0 (EINT_G0)引脚号12-19            VIC1

33       INT_EINT3       外部中断组0 (EINT_G0)引脚号20-27            VIC1

53       INT_EINT4       外部中断组1-9 (EINT_G1~9)                    VIC1

我们发现属于外部中断组0的27个中断占用了VIC里的4个中断号,外部中断组1-9只占用了1个中断号,世界就是这么的不公平,努力吧!

 

3、S3C6410的中断流程,说到这里,大家是不是觉得有点乱(如果使用过STM32应该不会乱,因为STM32的中断也是两级控制的),我们总结下具体的中断流程:

外设(GPIO)——》EINT——》VIC——?,因此对应的我们编程序也就是

外设配置——》EINT配置——VIC配置——?,这是我们现在所能想到的,大家也觉得分析的不错吧,可惜错误也再此埋下了伏笔,即是问号处,我们缺失了一个配置,这个配置有的启动文件里已经帮你写了,所以好多教程也没有怎么提。此处不表,最后会说明。

文章评论1条评论)

登录后参与讨论

hzddyx_297768481 2015-4-7 21:00

赞一个!

用户1768597 2014-8-8 22:57

tiny6410 程序运行起来点击屏幕时会死机,有时会重启,按下按键时会产生下降沿中断,然后死机(就是卡住)。请大家帮忙看看是怎么回事?使用中断还需要设置其他么?
相关推荐阅读
用户1651464 2014-05-06 11:07
__asm__ __volatile__ 嵌入式内嵌汇编语法解构
再次对EDN的编辑功能表示无语,这篇文章竟然说超字数限制!...
用户1651464 2014-05-04 14:54
sourceinsight添加uboot时,部分文件无法搜索
Sourceinsight添加uboot时,部分文件无法搜索 在用sourceinsight查看uboot(或者linux内核源码等代码)的时候,突然发现不能使用搜索的方法查找源码中的.S文件,查找...
用户1651464 2014-04-25 11:20
ubuntu中vi使用大全
vi编辑器是任何Unix及Linux系统下标准的编辑器,他的强大不逊色于任何 最新的文本编辑器,这里只是简单地介绍一下他的用法和一小部分指令。由于对Unix及Linux系统的任何版本,vi编辑器是完全...
用户1651464 2014-04-21 21:47
[博客大赛]S3C6410时钟控制(1.2)系统时钟设定
S3C6410时钟控制(1.2)系统时钟设定 三、S3C6410时钟初始化的具体流程。 1:设定PLL_LOCK寄存器。参见上面的PLL_LOCK(1)。 对应代码:(C或者汇编)     //1-...
用户1651464 2014-04-21 21:46
[博客大赛]S3C6410时钟控制(2)PWM定时器设置
S3C6410时钟控制(2)PWM定时器设置 1、    S3C6410定时器综述 (1)   定时器资源,参见上图,S3C6410有5个32位定时器,其中定时器0和定时器1具有脉冲宽度调制(PW...
用户1651464 2014-04-21 21:43
[博客大赛]S3C6410时钟控制(1.1)系统时钟设定
S3C6410时钟控制(1.1)系统时钟设定 一、S3C6410系统时钟控制的概述 S3C6410系统有三个PLL(APLL/MPLL/EPLL)和四个CLK(ACLK/HCLK/PCLK/SCLK...
我要评论
1
13
关闭 站长推荐上一条 /2 下一条