S3C2440-中断体系架构

发布者:PeacefulSoul最新更新时间:2024-06-06 来源: elecfans关键字:S3C2440 手机看文章 扫描二维码
随时随地手机看文章

1.ARM的体系与架构

    1.1.ARM体系的CPU有以下其中工作模式:

  • 用户模式 (usr)

  • 快速中断模式 (fiq)  

  • 中断模式 (irq)

  • 管理模式 (svc)

  • 数据访问终止模式 (abt)

  • 系统模式 (sys)

  • 未定义指令终止模式 (und)

    1.2.ARM寄存器:

  • 31个通用寄存器 : R0~R7(未备份寄存器) , R8~R14(备份寄存器) , R15( 程序计数器PC ) 

  • 6个状态寄存器   : CPSR( 当前程序状态寄存器) , SPSR(备份程序状态寄存器)

          

 

2.ARM状态下当异常发生时, 处理器将切换进相应的模式:

    2.1. 当异常发生时, 处理器将自动完成以下事情 : 

  • 在异常工作模式的连接寄存器R14中保存前一个工作模式的下一条指令(即将执行)的地址,

        对于ARM状态, 这个值是当前PC值加4或者加8

  • 将CPSR的值复制到异常模式的SPSR

  • 将CPSR的工作模式位设为这个异常对应的工作模式

  • 令PC值等于这个异常模式在异常向量表中的地址 , 即跳转到异常向量表中执行对应的指令     

    2.2. 当从异常模式返回到之前的工作模式时, 则需软件完成以下工作 :

  • 进入异常时, R14保存了前一个工作模式的下一个指令地址 ,所以要将他减去一个适当的值

  • 将SPSR的值复制回CPSR

    2.3. 关于R14在发生异常时保存的地址参考表: 

    

3. 使用中断的步骤 :

    3.1. 设置好中断模式和快速中断模式下的栈 , 它们分别使用自己的栈

    3.2. 准备好中断处理函数 :

  • 异常向量地址 : irq(0x00000018) , fiq(0x0000001c)

  • 中断服务程序(isr) : 对于irq,通过判断INTPND或者INTOFFSET来确定中断源, fiq只有一个中断

  • 清除中断 : 如果不清除中断会让CPU误以为中断又一次发生了

    3.3. 进入、退出中断或快速中断时, 需要保存、回复中断的运行环境

         

 

    3.4. 设置中断涉及到的寄存器 .

    

    3.4.1. 外部中断被分为被SUBSRCPND/SUBMASK寄存器控制的中断,不被

             SUBSRCPND/SUBMASK寄存器控制的中断.

    3.4.2. 外部中断必须经过SRCPND( SOURCE PENDING)寄存器的控制

    3.4.3. 外部中断最终经过INTMASK(中断屏蔽)与INTMODE(中断模式)寄存器

             的控制

    3.4.4. 外部中断经过PRIORITY(优先级寄存器)的仲裁决定优先级

    3.4.5. 通过INTPND寄存器来确认中断的发生以及清除中断 ,同一时间内只有一位

              被置一


关键字:S3C2440 引用地址:S3C2440-中断体系架构

上一篇:怎么看时序图--nand flash的读操作详解
下一篇:S3C2440 SDRAM驱动配置编程

推荐阅读最新更新时间:2026-02-28 21:34

s3c2440串口裸板驱动(使用fifo)
1:串口的数据发送的数据量较大时,使用fifo可以大大降低MCU的开销。(有点类似串入并出的cput处理模型,本质上还是串行收发) 2:在某些特殊场合,例如制定较复杂的协议时,可以使用fifo特性来做协议简化,比如一包 数据包含8个字节,(并且fifo设置的长度为8),这样相当于把uart转换为类似CAN/以太网模型, 这样信息可扩展性得到了质的提高,当然,这里需要同步协调。 fifo分析拓展: 1. 如果要用中断来处理接收到的数据,就是说,接收完数据然后产生中断,再于中断里处理接收的数据。如果要实现这个本意,要设置好触发点。 至于超时中断之类,那是另外一回事了。 2. 就UART的中断类型
[单片机]
<font color='red'>s3c2440</font>串口裸板驱动(使用fifo)
S3C2440内核蜂鸣器驱动解读
首先介绍需要的一些头文件的位置 linux-2.6.32.内核重要文件目录: linux-2.6.32.2/arch/arm/mach-s3c2410/include/mach/regs-gpio.h linux-2.6.32.2/arch/arm/plat-s3c24xx/gpio.c linux-2.6.32.2/linux/asm-generic/io.h linux-2.6.32.2/include/linux/wait.h asm -- linux-2.6.32.2/linux/asm-generic mach -- linux-2.6.32.2/arch/arm/mach-s3c2410/include/mach
[单片机]
<font color='red'>S3C2440</font>内核蜂鸣器驱动解读
S3C2440上移植FreeRTOS
简介: FreeRTOS-Kernel V10.5.1 | gcc version 6.5.0 (crosstool-NG 1.24.0) 在官方已有的ARM7_LPC2000的移植模板文件基础上修改(FreeRTOS-Kernel/portable/GCC/ARM7_LPC2000)使用heap4。 移植调度器: 初始化一个定时器用于提供系统心跳时钟。选择初始化定时器4的周期为1ms,配置为fiq。在prvSetupTimerInterrupt()中调用初始化函数如下图: 在vPortISRStartFirstTask()中添加汇编函数如下:目的是在启动第一个函数前切换处理器到特殊模式,简而言之就是要切换到非系统或用户模式,因
[单片机]
在<font color='red'>S3C2440</font>上移植FreeRTOS
关于ARM9 S3C2440 wince6.0 内存 128M的使用问题
S3C2440 原先的时候接两块32M的SDRAM 片选都连接到nGCS6上。现在改成两块64M的SDRAM片选也是nGCS6上。 软件的修改分为四个大块: 1、 Stepldr: (1)startup.s中主要是 ldr r0,=0x30000000 ; Start address (physical 0x3000.0000). 一目了然,不再解释 (2)option.h #ifdef BSP_SDRAM_128M #define _ISR_STARTADDRESS 0x3
[单片机]
郭天祥-S3C2440开发板Linux2.6.31移植教程
本人使用的开发板是广州天嵌的TQ2440开发板 最近使用了郭天祥的教程学习S3C2440嵌入式linux2.6.31系统移植,移植yaffs2文件系统成功后,发现开发板移植的系统的ping命令无法ping通电脑。后面通过烧录开发板自带的linux镜像文件和yaffs2文件系统,对比之后。发现本人的笔记本(联想G40系列),如果只接通过本地网卡与开发板直连,无法ping通,但是使用自己的台式电脑,可以使用网线直连开发板ping通,确认了问题的原因是: 1.笔记本在网线直连开发板的情况下,无法ping通开发板。 2.个人移植的linux 2.6.31操作系统驱动存在问题。 第一个问题很好解决,如果要继续
[单片机]
ubuntu18 : QEMU中新建S3C2440模拟器
1.下载 wget http://repo.or.cz/w/qemu/mini2440.git/snapshot/HEAD.tar.gz 2.解压 tar -zxvf HEAD.tar.gz cd mini2440-HEAD-18b91f2 3.安装依赖包 sudo apt-get install libsdl1.2-dev 4.添加链接库 打开 Makefile.target文件,搜索-lz 将 LIBS+=-lz 这一行 改为 LIBS+=-lz -lrt 注意,这里如果不改,在make时会报错: /usr/bin/ld: vl.o: undefined reference to symbol 'tim
[单片机]
ubuntu18 : QEMU中新建<font color='red'>S3C2440</font>模拟器
/sys/class/gpio 文件接口操作IO端口(s3c2440)
在嵌入式设备中对GPIO的操作是最基本的操作。一般的做法是写一个单独驱动程序,网上大多数的例子都是这样的。其实Linux下面有一个通用的GPIO操作接口,那就是我要介绍的 “/sys/class/gpio” 方式。 首先,看看系统中有没有“/sys/class/gpio”这个文件夹。如果没有请在编译内核的时候加入 Device Drivers — GPIO Support — /sys/class/gpio/… (sysfs interface)。 /sys/class/gpio 的使用说明: 01 gpio_operation 通过/sys/文件接口操作IO端口 GPIO到文件系统的映射 class/gpio c
[单片机]
s3c2440中PWM应用
s3c2440芯片中一共有5个16位的定时器,其中有4个定时器(定时器0~定时器3)具有脉宽调制功能,因此用s3c2440可以很容易地实现PWM功能。下面就具体介绍如何实现PWM功能。 1、PWM是通过引脚TOUT0~TOUT3输出的,而这4个引脚是与GPB0~GPB3复用的,因此要实现PWM功能首先要把相应的引脚配置成TOUT输出。 2、再设置定时器的输出时钟频率,它是以PCLK为基准,再除以用寄存器TCFG0配置的prescaler参数,和用寄存器TCFG1配置的divider参数。 3、然后设置脉冲的具体宽度,它的基本原理是通过寄存器TCNTBn来对寄存器TCNTn(内部寄存器)进行配置计数,TCNTn是递减的,如果减到零,
[单片机]
小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2026 EEWORLD.com.cn, Inc. All rights reserved