S3C2440、S3C6410、S5PV210中断解析

发布者:九九归一74最新更新时间:2018-10-13 来源: eefocus关键字:S3C2440  S3C6410  S5PV210  中断解析 手机看文章 扫描二维码
随时随地手机看文章

写完S5PV210的按键中断程序后,我才知道"6410只是一个过渡产品"确实是正确的,为什么这样说呢?下面我就给大家进行详细的阐述:

中断处理过程等等我就不讲了,一期视频里面已经讲得非常详细了,建议大家在学习本章前,把2440和6410的关于中断的视频再看一次。接下来,我就直接对比他们吧:

(1).对于2440:

中断向量只出现在start.s开始部分,类容如下:

.globl _start

_start:    b       reset

    ldr    pc, _undefined_instruction

    ldr    pc, _software_interrupt

    ldr    pc, _prefetch_abort

    ldr    pc, _data_abort

    ldr    pc, _not_used

    ldr    pc, _irq

    ldr    pc, _fiq

也就是说,中断向量的入口地址是固定的!!

(2).对于6410:

中断向量不仅出现在start.s开始部分,类容如下:

.globl _start

_start:    b       reset

    ldr    pc, _undefined_instruction

    ldr    pc, _software_interrupt

    ldr    pc, _prefetch_abort

    ldr    pc, _data_abort

    ldr    pc, _not_used

    ldr    pc, _irq

    ldr    pc, _fiq

还引入了向量地址寄存器(即VICxADDRESS),它会进一步存储中断处理函数的入口地址,详细类容,请大家学习一期的6410的视频的相关章节。

(注意:关于6410的讲述可能有问题,因为我没有6410开发板,无法验证,仅供参考)

(3).对于S5PV210:

       只说一说6410只是一个过渡产品,就中断角度而言,是因为在S5PV210中,中断向量舍弃了start.s开始的部分(因为从某种角度来讲,S5PV210上电后,不在是从0地址开始执行了,大家可以看下学习日记(2)中介绍的S5PV210的启动流程),而只保留了向量地址寄存器(即VICxADDRESS)部分,而该寄存器的功能和6410的一样。

问:既然S5PV210的start.s中不再有中断向量入口地址,那么S5PV210是怎么处理中断的呢?

答:以按键中断为例子,当中断发生时,PC不再是跳到0x00000018地址处,而是去访问向量地址寄存器(即VICxADDRESS),在该寄存器里面读出一个地址(即可以认为是我们的中断处理函数的地址),然后进一步跳到该地址处去执行。其他的过程和2440的处理过程一样(比如模式切换等等)

      接下来我一个具体的按键中断为例子(实现按K4,计数器加1,按K5,计数器减1的功能),代码放在了"Tiny210学习日记_代码"目录下了,名为"12_key_irq":

一上来,就写start.s,和2440的几乎无差别(不用写中断向量和关看门狗),需要初始化时钟,初始化nand,初始化内存,初始化需要模式的栈(用户模式,中断模式)等等操作,当然也会初始化中断,类容如下:

void irq_init(void)

{

    // 设置GPH2_3(K4),GPH3_0(K5)用于中断 

    GPH2CON |= 0xf<<12;

    GPH3CON |= 0xf<<0;

    // 设置触发方式为下降沿触发 

    EXT_INT_2_CON |= 0x2<<12;

    EXT_INT_3_CON |= 0x2<<0;

    // 使能中断(GPIO里面的) 

    EXT_INT_2_MASK &= ~(1<<3);

    EXT_INT_3_MASK &= ~(1<<0);

    // 设置为IRQ中断 

    VIC0INTSELECT &= ~(1<<16);

    // 使能中断(中断控制器里面的) 

    VIC0INTENABLE |= 1<<16;

    // 设置中断向量 

    VIC0VECTADDR16 = (int)key_IRQ; 

}

注意:

当中断发生时,VIC0VECTADDR16中的值(即中断处理函数的地址)会被自动的复制给向量地址寄存器(即VICxADDRESS),然后当中断发生时,就会访问向量地址寄存器(即VICxADDRESS),从而找到key_IRQ中断处理函数。(这些在6410视频里面有讲解)

问:以前2440在中断来时,我们会计算返回地址,保护现场等操作,难道S5PV210就不用了吗?

答:答案是否定的,S5PV210一样是要做的,而且一个不能够少,过程如下(这部分程序写在start.s中):

.global key_IRQ

key_IRQ:                         // 该函数就是在中断初始化中,VIC0VECTADDR16指向的函数 

    sub lr, lr, #4                // 1.计算返回地址 

    stmdb sp!, {r0-r12, lr} // 2.保护现场 

    // 3. 处理异常 

    bl do_irq

    

    // 4. 恢复现场 

    ldmia sp!, {r0-r12, pc}^    // ^表示把spsr恢复到cpsr 

最终,经过上面的处理后,又和我们的2440的中断函数完全一样了,因此我们就在do_irq函数中清中断,分辨中断,执行处理等操作,该部分程序中是这样做的,如下:

void do_irq(void)

{

    // 清中断 

    EXT_INT_2_PEND |= 1<<3;

    EXT_INT_3_PEND |= 1<<0;

    // 清中断向量 

    VIC0ADDRESS = 0;

    if(!(GPH2DAT & (1<<3)))      // 如果K4被按下 

    {

        wy_printf("counter(k4) : %d \n",i++); // 计数器加1 

    }

    if(!(GPH3DAT & (1<<0)))      // 如果K4被按下 

    {

        wy_printf("counter(K5) : %d \n",i--);// 计数器减1 

    }

}

注意:

1.参考代码放在了"Tiny210学习日记_代码"目录下了,名为"12_key_irq"。

2.测试方法,当终端有显示后,直接按开发板上面的K4,K5键,就能实现计数功能。


关键字:S3C2440  S3C6410  S5PV210  中断解析 引用地址:S3C2440、S3C6410、S5PV210中断解析

上一篇:Tiny210裸机之按键中断
下一篇:Tiny210裸机之LCD显示图片

推荐阅读最新更新时间:2024-03-16 16:16

S5PV210中断系统和按键控制外部中断
一、按键及轮训方式处理按键(基于S5PV210) 1.什么是按键 1、按键的物理特性 (1)、平时没人按的时候,弹簧把按键按钮弹开。此时内部断开的。 (2)、有人按下的时候,手的力量克服弹簧的弹力,将按钮按下,此时内部保持接通(闭合)状态;如果手拿开,则弹簧作用下按钮又弹开,同时内部又断开。 (3)、一般的按键都有4个引脚,这4个引脚成2对:其中一对是常开触点(像上面描述的不按则断开,按下则闭合);一对是常闭触点(平时不按时是闭合的,按下后是断开的) 2、按键的电学原理(结合原理图分析) (1)硬件接法: SW5:GPH0_2、 SW6:GPH0_3、 SW7 8 9 10:GPH2_0 1 2 3 (2)**按键的电路连
[单片机]
<font color='red'>S5PV210</font>的<font color='red'>中断</font>系统和按键控制外部<font color='red'>中断</font>
基于S3C2440的嵌入式Linux驱动——Framebuffer子系统解读
本文将介绍Framebuffer子系统 目标平台:TQ2440 CPU:s3c2440 LCD设备:3.5英寸,分辨率320X240 1. 概述 Framebuffer,中文名字是帧缓冲,这个帧也就是一副图像所需要的数据。因此,帧缓冲其实就是LCD设备的驱动程序。Linux中,framebuffer子系统框架如下: 核心层的代码以fbmem.c为主,核心层包括许多与具体硬件无关的代码,并且提供了API给用户空间。用户空间使用系统调用,系统调用会使用相应的API函数,最后会调用驱动层实现功能。对于不同的设备,驱动层的代码将有所不同。 接下来的内容中,首先给出framerbuffer使用的数据结构;随后简单描述framerb
[单片机]
fedora26在编译s3c2440内核时make menuconfig *** Unable to find the ncurses libraries
# make menuconfig *** Unable to find the ncurses libraries or the *** required header files. *** 'make menuconfig' requires the ncurses libraries. *** *** Install ncurses (ncurses-devel) and try again. *** make : *** fedora 安装 ncurses 库 # yum provides /*/ncurses # yum install -y ncurses-devel-6.0-8.20170
[单片机]
fedora26在编译<font color='red'>s3c2440</font>内核时make menuconfig *** Unable to find the ncurses libraries
s3c2440 lcd 显示图片裸机程序
因为前面的裸机程序非常的简单,就不写博了。 程序的流程: 1,初始化C SP 2,关看门狗 3,初始化SDRAM 4,读出 NAND FLASH 中的 包含图片的程式放到SDRAM里面 5,跳转到SDRAM 执行 因为 2440 自动只读取4K 到 SRAM ,在里面放了图片,自然就不够用了。 就多了一步放到 SDRAM 里面去。 我并没有直接复制教程上面的程式,那个上面比较复杂。用到了c 的 库文件。 教程中只是画线,画圆线很简单。 刚一开始,我是使用 24BPP 开发的,这样遇到的问题还比较多。 图片要转为 C 语言的 头文件。我看网上有很多人在找软件转,还有个用 C的在LINUX
[单片机]
<font color='red'>s3c2440</font> lcd 显示图片裸机程序
S3C6410移植u-boot(一)
步骤1 1、首先下载u-boot( ftp://ftp.denx.de/pub/u-boot ) wget ftp://ftp.denx.de/pub/u-boot/u-boot-latest.tar.bz2 2、解压到你指定下路径中 tar -jxvf u-boot-latest.tar.bz2 -C /opt 步骤2 1、进入u-boot- 发布日期 文件夹 cd /opt/u-boot-2011.06/ cd board/samsung/ 2、建立smdk6410文件夹 mkdir smdk6410 3、复制6400文件夹下的所有代码到6410下 cp -rf smdk6400/* smdk6410 4、进入
[单片机]
s3c2440启动文件详细分析
启动文件就是引导ARM启动,并进入我们熟悉的C语言程序。它主要完成了ARM最基本的硬件初始化工作。虽然启动文件的内容大同小异(就是设置系统时钟、内存、中断向量表、栈等内容),而且只要有一个现成的启动文件,即使不用详细了解该文件的内容,直接进入C语言编程工作也可以对ARM进行操作,但我认为熟悉启动文件的内容,还是有必要的,它对我们熟悉ARM的体系结构,编写出更高效的程序是大有益处的。因此我花了一些时间详细分析了s3c2440启动文件的内容,让它作为我进入ARM领域研究的开端,希望能有一个好的起点,为以后的研究打下基础。 下面就是我对s3c2440启动文件的分析,标注了较详细的注解,不仅有我对启动文件的理解,同时也查阅其
[单片机]
s3c6410 uart 裸机 轮询 非fifo
/* uart 非中断模式R,轮询,不用fifo */ #include stdio.h #include uart.h #include gpio.h #include sysc.h #define UART0 ( ( volatile UART_REGS * ) (UART_BASE)) u32 Inp32(u32 xx) { return xx; } void GpioInit() { // 设置gpio ,使用uart0 u32 TEMP; TEMP = GPIO- rGPIOACON; TEMP &= ~(0XFF); TEMP |= 0X22; GPIO- rGPIOACON =
[单片机]
基于ARM11和MMS的远程监控系统研究
引言 随着国民经济的快速发展和人民生活水平的日益提高,各种监控系统应运而生,广泛应用于银行、铁路、民航等重点领域,并逐步进入到个人家居监控应用领域中。目前大多数监控系统都是将现场信息发送到远程计算机上,但计算机携带不方便,不能满足人们随时随地查看现场信息的需求。而手机相对计算机来说普及率高、成本低、携带轻便,尤其是近年来GPRS无线数字移动通信网的快速发展,为手机终端提供了无线接入Internet业务,使得手机成为互联网中最普遍的终端设备。多媒体消息服务(Multimedia Message Service,MMS)作为GPRS一项基本业务,被广大手机用户所使用。它不仅实现了终端之间、终端和电子邮件之间的信息传递,还实现了内容的
[单片机]
基于ARM11和MMS的远程监控系统研究
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved