S3C2440体系架构[通俗易懂]

S3C2440体系架构[通俗易懂]本文是对ARM处理器架构的学习,针对S3C2440型号。参考了Samsung官方的技术文档S3C2440.pdf中的PROGRAMMER’SMODEL一节的内容。ARM和THUMB指令模式S3C2440采用了armv4t指令集,同时支持arm指令集和thumb指令集。arm指令是32位的,而thumb指令是16位的。之所以存在thumb指令是为了降低代码的存储空间。两个指令集之间的切换手动切换

大家好,又见面了,我是你们的朋友全栈君。

本文是对ARM处理器架构的学习,针对S3C2440型号。参考了Samsung官方的技术文档S3C2440.pdf中的PROGRAMMER’S MODEL一节的内容。

ARM和THUMB指令模式

S3C2440采用了armv4t指令集,同时支持arm指令集和thumb指令集。arm指令是32位的,而thumb指令是16位的。之所以存在thumb指令是为了降低代码的存储空间。

两个指令集之间的切换

  • 手动切换
    因为不管是arm指令集还是thumb指令集,代码地址的最低位都是多余的,因为thumb是16位对齐的,arm是32位对齐的。所以最后一位可以用来作为切换的参考。当执行BX指令时,若地址的最后一位置位,则接下来的指令使用thumb指令集来解释,跳转时,最后一位清零,则使用arm指令集。

  • 自动切换
    在特权模式下只能使用arm指令集,所以当在用户模式下执行thumb指令时,若跳转到特权模式时,将会自动切换到arm指令模式。当从特权模式切换回用户模式时,如果进入之前是thumb指令集,那么就是自动切换回thumb指令集。

数据存储格式
S3C2440同时支持大小端数据存储格式,默认情况下采用小端格式储存。

  • 大端储存
    高字节存储在低地址中,低字节存储在高地址中。

  • 小端存储
    高字节存储在高地址中,低字节存储在低地址中。

操作模式

ARM920T支持七种操作模式:

  • 用户模式

  • 快中断模式

  • 中断模式

  • 管理者模式

  • 中止模式

  • 系统模式

  • 未定义模式

模式转换可以通过软件的形式,也可以自动进行切换,比如产生了中断。除了用户模式,其它模式都是特权模式,有些资源只能在特权模式下使用。

寄存器

ARM920T总共有37个寄存器,同一时间不是所以的寄存器都是可见的。

ARM模式下的寄存器

ARM模式下的寄存器

thumb模式下的寄存器

在thumb模式下,不是所有的寄存器都是被使用的,R8-R12寄存器没有被使用。

thumb模式下的寄存器

虽然thumb模式下按规定R8-R12寄存器不能被使用,但是编译器能够使用这些寄存器作为快速存储。

状态寄存器

CPSR和SPSR是ARM920T中的两个状态寄存器,SPSR是用来临时保存CPSR寄存器的值的。

状态寄存器的作用

  • 保存最近ALU计算信息

  • 控制中断的开启和关闭

  • 设置处理器的模式

状态寄存器

异常处理

在ARM中,所有打断程序正常执行的事件都称为异常,中断也是属于异常。在进入异常的时候,硬件会自动执行如下的操作;但是当退出异常时,下列的操作是由我们自己编写软件实现的。

进入异常

1.保留下一个指令地址到合适的LR寄存器(哪种异常发生就将其保存在该模式下的LR寄存器中)。

2.复制CPSR到合适的SPSR中(哪种异常发生就将其保存在该模式下的SPSR寄存器中)。

3.设置CPSR中的模式位

4.PC从相应中断向量表中获取地址

退出异常

1.将LR中的值减去一个偏移量赋给PC

2.将SPSR的值拷贝到CPSR中

3.如果在进入时设置了中断禁止标志,清除禁止标志

举例说明:

HandleIRQ:
    sub lr, lr, #4 @ 计算返回地址
    stmdb   sp!,    { r0-r12,lr }   @ 保存使用到的寄存器
                                    @ 注意,此时的sp是中断模式的sp
                                    @ 初始值是上面设置的3072

    ldr lr, =int_return             @ 设置调用ISR即EINT_Handle函数后的返回地址  
    ldr pc, =EINT_Handle            @ 调用中断服务函数,在interrupt.cint_return:
    ldmia   sp!,    { r0-r12,pc }^  @ 中断返回, ^表示将spsr的值复制到cpsr

在中断处理函数EINT_Handle中需要将中断挂起位给清除掉。

下表是在退出各种异常时需要执行的返回函数:

异常退出执行代码

中断向量表地址

下表是中断向量表的地址,这些地址是规定好的,不能自己更改。

中断向量表

异常优先级

当多个异常同时发生时,有一个固定的优先级来决定哪一个先被执行。

高优先级

1. Reset
2. Data abort 
3. FIQ
4. IRQ
5. Prefetch abort

低优先级

6. Undefined Instruction,Software interrupt
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/131367.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 视图索引

    视图索引创建索引视图  视图也称为虚拟表,这是因为由视图返回的结果集其一般格式与由列和行组成的表相似,并且,在 SQL 语句中引用视图的方式也与引用表的方式相同。标准视图的结果集不是永久地存储在数据库中。查询每次引用视图时,Microsoft® SQL Server™ 2000 会动态地将生成视图结果集所需的逻辑合并到从基表数据生成完整查询结果集所需的逻辑

    2022年7月22日
    15
  • 解决docker端口映射无法访问问题的方法_为什么有的网页无法访问

    解决docker端口映射无法访问问题的方法_为什么有的网页无法访问https://cloud.tencent.com/developer/article/1768097https://blog.csdn.net/li_101357/article/details/78415461

    2022年10月17日
    3
  • rabbitmq基本原理_计算尺使用的是什么原理

    rabbitmq基本原理_计算尺使用的是什么原理RabbitMQ使用以及原理解析RabbitMQ是一个由erlang开发的AMQP(AdvanvedMessageQueue)的开源实现;在RabbitMQ官网上主要有这样的模块信息,Workqueues消息队列,Publish/Subscribe发布订阅服务,Routing,Topics,RPC等主要应用的模块功能.几个概念说明:Broker:它提供一种传输服务,它的角色…

    2022年9月25日
    1
  • 路径分析如何操作?模型如何修正?

    路径分析如何操作?模型如何修正?一、研究场景路径分析,也称通径分析(有时也称结构方程模型,一般情况下如果包括测量模型和结构模型,则称为结构方程模型;如果只包括结构模型,则称为路径分析)。路径分析在于研究模型影响关系,用于对模型假设进行验证。比如下图的模型框架:希望研究工作条件,人际关系对于公司满意度的影响;同时还希望研究公司满意度和机会感知对于离职倾向的影响。路径有一共有4条(即4对影响关系),路径分析可以同时研究此4对影响关系。二、SPSSAU操作1.SPSSAU上传数据登录账号后进入SPSSAU页面,点击右上角..

    2022年8月24日
    5
  • Eclipse使用Maven创建Web时错误:Could not resolve archetype org.apache.maven.archetypes:maven-archetype-webap

    Eclipse使用Maven创建Web时错误:Could not resolve archetype org.apache.maven.archetypes:maven-archetype-webap问题描述:使用Eclipse自带的Maven插件创建Web项目时报错:Couldnotresolvearchetypeorg.apache.maven.archetypes:maven-archetype-webapp:RELEASEfromanyoftheconfiguredrepositories.Couldnotresolveartifa

    2022年7月24日
    9
  • 流量不清零、可转赠,对运营商未必是坏事

    流量不清零、可转赠,对运营商未必是坏事

    2021年9月6日
    66

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号