ARM7 LPC2378 远程升级----软中断SWI

发布者:古泉痴迷者最新更新时间:2017-11-29 来源: eefocus关键字:ARM7  LPC2378  远程升级  软中断SWI 手机看文章 扫描二维码
随时随地手机看文章

我在这里,将我在学习这篇文章时遇到的疑问及理解和大家分享一下     LPC2300.S文件中的相关软中断代码如下:     

    EXPORT    SWI_Handler
    extern  EnableIrqFunc          ;使能中断函数名,用C语言实现
    extern  DisableIrqFunc         ;禁止中断函数名,用C语言实现
    SWI_Handler
    STMFD  SP!, {R0,R12,LR}      ;入栈
    LDR      R0, [LR,#-4]        ;取指令
    BIC       R0,R0,#0xFF000000 ;取软件中断命令号
    CMP      R0,#0             ;和0比较,因为我的使能中断用了软件中断命令0,禁止中断使用了软件中断命令1
    BLEQ     EnableIrqFunc     ;为零调用使能中断函数
    BLNE    DisableIrqFunc     ;不为零调用禁止中断函数
    LDMFD  SP!,{R0,R12,PC}     ;出栈    我的疑问主要在: STMFD  SP!, {R0,R12,LR}       ;入栈
                    LDR      R0, [LR,#-4]         ;取指令   入栈的过程怎样,他是如何入栈的?为什么LDR      R0, [LR,#-4]  表示的是取指令?   入栈的过程:   ARM规定,sp始终是指向栈顶位置的,STM指令把寄存器列表中索引最小的寄存器存在最低地址,所以R0在最低地址,向上依次是R0,R1,R2,...R12,LR。完成后SP指向保存R0的地址。                      

 
详解:对于大多数的设计来说都是把栈底设置在高地址,栈顶设置在低地址,即是说上面所说的首先要SP=SP-14×4,这里理解了之后就好理解了,那么执行这条指令后,栈中的数据顺序从栈底到栈顶为LR ,R12,R6,R5,R4,R3,R2,R1,R0,此时SP-->R0,即栈顶,这和堆栈的定义没有冲突,如果SP指向的是LR的话栈就没有用了哦,其实这里STMFD有两种方法处理的:(STMFD的用法详见上一篇博文) 第一种先计算总共压入的数据个数,直接一次更改指针SP=SP-4*(number)并从低地址向高地址存入数据 第二种就是每压入一次就把SP=SP-1*4,同时一个一个的把数据从高地址向低地址压入 注意点:R0、R1....LR等寄存器是没有地址的,它们只有保存在里面的数据,所以如上图中:LR对应基址-4是将LR里面的值放入基址减4中,这里的减4与LDR R0, [LR,#-4]的减4不是同一个概念。 那么LDR R0, [LR,#-4]为什么解释为取指令呢?将存储器地址为(LR-4)的字数据读入寄存器R0。   这里你必须对ARM7的3级流水线过程做一个了解:   PC 代表程序计数器,流水线使用三个阶段,因此指令分为三个阶段执行: 1.取指(从存储器装载一条指令); 2.译码(识别将要被执行的指令); 3.执行(处理 指令并将结果写回寄存器)。   而R15(PC)总是指向“正在取指”的指令,而不是指向“正在执行”的指令或正在“译码”的指令。一般来说,人们习惯性约定 将“正在执行的指令作为参考点”,称之为当前第一条指令,因此PC总是指向第三条指令。当ARM状态时,每条指令为4字节长,所以PC始终指向该指令地址 加8字节的地址,即:PC值=当前程序执行位置+8;

   ARM指令是三级流水线,取指,译指,执行时同时执行的,现在PC指向的是正在取指的地址,那么cpu正在译指的指令地址是PC-4(假设在ARM状态 下,一个指令占4个字节),cpu正在执行的指令地址是PC-8,也就是说PC所指向的地址和现在所执行的指令地址相差8。

   在ARM体系结构中LR的特殊用途有两种:一是用来保存子程序返回地址;二是当异常发生时,LR中保存的值等于异常发生时PC的值减4(或者减2,对于ARM指令是减4,对于Thumb指令是减2),因此在各种异常模式下可以根据LR的值返回到异常发生前的相应位置继续执行。 
    在异常发生时,LR保存的是PC-4,而执行指令是PC-8,所以LDR R0, [LR,#-4]解释为取指令! 


关键字:ARM7  LPC2378  远程升级  软中断SWI 引用地址:ARM7 LPC2378 远程升级----软中断SWI

上一篇:LPC2114的I2C总线介绍
下一篇:ARM7 LPC2378 远程升级----PC、SP、LR寄存器

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

ARM7 系列 LPC2103单片机简介
1简介 LPC2103是PHILIPS公司最新推出的基于ARM7TDMI-S、LQFP48封装的LPC2103,最高工作速度可达70MHz,32KB的片内FLASH程序存储器和8K的片内静态RAM。通过片内boot装载程序实现ISP/IAP编程。 LPC2103的10位A/D转换器提供8路模拟输入,低功耗实时时钟具有独立的电源和特定的32768HZ时钟输入,多达32个通用I/O口(可承受5V电压),可通过个别使能/禁止外围功能外围时钟分频来优化额外功耗。较小的封装和很低的功耗使LPC2103特别适用于访问控制和POS机等小型应用中;由于内置了宽范围的串行通信接口和8KB的片内SRAM,它也非常适合于通信网关和协议转换器。高
[单片机]
<font color='red'>ARM7</font> 系列 LPC2103单片机简介
谈谈ARM7与ARM9的区别
由于职业的关系,经常会回答一些ARM初学者的问题,虽然问题千奇百怪,但以下两个问题绝对很有代表性。 ARM7和ARM9的都有些什么区别? 我准备学ARM,但不知是选ARM7还是ARM9好? 也许这些问题在大虾们的眼里已不是问题,但对于初学者确实很具必要弄清楚。先说下:ARM7和ARM9的区别。 1. 时钟频率的提高 虽然ARM7和ARM9内核架构相同,但ARM7处理器采用3级流水线的冯·诺伊曼结构;,而ARM9采用5级流水线的哈佛结构。增加的流水线设计提高了时钟频率和并行处理能力。5级流水线能够将每一个指令处理分配到5个时钟周期内,在每一个时钟周期内同时有5个指令在执行。在常用的芯片生产工艺下,ARM7一般运行在100MH
[单片机]
ARM7学习---GPIO笔记
学习51单片机也好还是ARM或是其他类型的MCU,首先也是最基础的还是需要了解其IO口特性和配置,最近学习ARM7,芯片型号是LPC2103,因为自己做了一块PCB板子,用J-LINK调试学习。以前一直不清楚GPIO是什么,因为学51的时候单片机引脚就叫IO口,但是学了AVR和ARM等以后发现,终于明白51的准双向口的含义,一般其他单片机,我用过的有AVR PIC 还有台湾的义隆单片机,合泰单片机等,其IO口都是双向的,需要进行配置才能作为输入输出口或是高阻态来使用。就是我们一般说的GPIO(General Purpose Input Output通用输入/输出)。现在针对于ARM7 LPC2103这个芯片来看,具体需要看datas
[单片机]
<font color='red'>ARM7</font>学习---GPIO笔记
ARM7 2131 BEEP程序分析
ARM7 BEEP程序分析 在原理图上我们看到蜂鸣器是接到了P07口上,短接好接口。 #include config.h #define BEEP 1 7 // P0.7控制蜂鸣器,低电平蜂鸣 包含一个config.h的头文件,里面主要是定义了数据类型的时钟频率等。 void DelayNS (uint32 dly) { uint32 i; for ( ; dly 0; dly--) for (i=0; i 50000; i ); } 写了一个延时函数。 主函数如下: int main (void) { PINSEL0 = 0x00000000; // 设置管脚连接GPIO IO0DIR = BEEP; // 设置B
[单片机]
基于ARM7的单片机实现32位系统
随着全球化工业生产的发展与深入,终端产品功能的多样化,8位或8051的工程师在设计工业控制器和模块时,越来越需要复杂的以RISC(精简指令系统)为基础的微处理器。由于有机能源的短缺和全球气候变暖,对电子设备能耗的要求越来越高。意法半导体的STR7系列单片机内置闪存存储器,寄存器以一种很简单的方式排列。STR7可以很方便地连接各种外部设备。ST提供丰富的应用笔记和例行程序,有效地降低了应用和学习的入门门槛。目前意法半导体提供三种评估板,STR710、STR720和STR730。 图1. 评估板 有效地用好用熟一款单片机,最大限度地发挥硬件的效能是每一个工程师的目标;首次接触ARM的系统,要想达到上述目标,对于一个用惯8位或1
[单片机]
基于<font color='red'>ARM7</font>的单片机实现32位系统
基于T6963C的LCD与LPC2134的接口设计
  0 引言   液晶模块作为普遍采用的显示器件,具有功耗低、显示内容多、控制灵活等特点。在中规模图形液晶显示模块中,内置T6963C控制器的LCD模块是目前较为常用的内置控制器型图形液晶显示模块。该模块可由硬件电路完成初始化设置,故可节省软件开销。软件上,T6963C控制器也提供了丰富的指令集,且控制方式灵活多样。而以ARM为内核的32位微处理器,则具备高性能和低功耗的特点,在工业控制领域应用广泛。因此,对于不带液晶接口的中低端ARM7芯片,可由其通用输入输出(GPIO,general purpose input andoutput)引脚来实现与LCD的连接,并控制LCD实现其显示功能。   1 LCD硬件接口设计   T
[单片机]
基于T6963C的LCD与LPC2134的接口设计
意法半导体的ARM7电机控制开发套件简化成本敏感设备的向量驱动设计
包含硬件和固件的工具套件简化面向磁场的PMSM和三相交流感应电机驱动器的评估和开发过程 中国,2007年2月27日 — 意法半导体(纽约证券交易所代码:STM)今天针对注重成本的电器、工业设备和HVAC(供暖通风空调)市场推出一套新的电机控制开发工具。以最近推出的32位STR750微控制器为内核,新套件有助于快速开发高性能的采用永磁同步电机(PMSM)和三相感应交流电机的向量控制应用。这套工具含有让用户在数分钟内做好开发准备和完成目标应用开发所需的全部固件和硬件,其中包括一个初步评估用的24V直流永磁电机。 向量(或面向磁场)控制算法广泛用于高性能驱动器,具有速度控制精确和响应速度快的特点,保证效率在瞬变工作期间得到优化。这套
[新品]
基于eCos在基于ARM7硬件平台上的应用
  eCos(Embedded Configurable Operating System)最初是由Cygnus Solutions公司为面向嵌入式领域而开发的源码公开、具有很强的可移植性和可配置性的,适合于深度嵌入式开发的实时操作系统。现在eCos主要由eCosCentric公司和eCos开源社区共同开发维护。eCos的特性,特别是它的可配置性,能有效缩短嵌入式产品的开发周期并降低成本。   1  eCos的体系结构及可配置性   1.1  eCos体系结构   eCos采用模块化设计,将不同功能的软件分成不同的组件,使其分别位于系统的不同层次。这种层次结构实现了eCos的可配置性、可移植性、兼容性和可扩展性。图1是
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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