S3C2440体系架构
来源:互联网 发布:mac调整输入法顺序 编辑:程序博客网 时间:2024/05/31 19:40
本文是对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模式下的寄存器
thumb模式下的寄存器
在thumb模式下,不是所有的寄存器都是被使用的,R8-R12寄存器没有被使用。
虽然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.c中int_return: ldmia sp!, { r0-r12,pc }^ @ 中断返回, ^表示将spsr的值复制到cpsr
在中断处理函数EINT_Handle中需要将中断挂起位给清除掉。
下表是在退出各种异常时需要执行的返回函数:
中断向量表地址
下表是中断向量表的地址,这些地址是规定好的,不能自己更改。
异常优先级
当多个异常同时发生时,有一个固定的优先级来决定哪一个先被执行。
高优先级
1. Reset2. Data abort 3. FIQ4. IRQ5. Prefetch abort
低优先级
6. Undefined Instruction,Software interrupt
- S3C2440体系架构
- S3C2440的时钟体系
- S3C2440中断体系介绍
- S3C2440 体系结构图
- s3c2440中断体系
- S3C2440中断体系介绍
- s3c2440的时钟体系
- 嵌入式arm学习总结(六)--S3C2440体系架构学习总结
- 体系架构
- s3c2440触摸屏程序架构
- MySQL 体系架构 Oracle体系架构 PostgreSQL体系架构
- MySQL 体系架构 Oracle体系架构 PostgreSQL体系架构
- MySQL 体系架构 Oracle体系架构 PostgreSQL体系架构
- S3C2440时钟体系及设置方法
- 架构师速成-架构体系
- 企业级数据仓库体系架构
- 搜索引擎的体系架构
- J2EE体系架构设计
- 用几条shell命令快速去重10G数据
- java冒泡排序
- UML之见
- Linux上如何查看某个进程的线程
- SQL_XML 转化为标准Table格式
- S3C2440体系架构
- 用几条shell命令快速去重10G数据
- 3G ha配置 499错误
- nyoj 43 24 Point game 【经典DFS】
- 用几条shell命令快速去重10G数据
- 用几条shell命令快速去重10G数据
- 【VB与数据库】机房收费系统开发阶段之登陆
- 用几条shell命令快速去重10G数据
- 【转】【九度1080题做题发现】JAVA之BigInteger