Search for posts tagged with: ARM

Avatar

一般一个ARM系统的boot过程是这样的。首先ARM在上电后直接跳转到0地址,在这个地址上存放的是系统的启动代码。系统开始执行时一般会先设置DPLL和clock,然后进行片选,接着将需要放到ram中代码手动copy到ram中,设置EMI等系统必要参数,设置ARM各个模式的系统堆栈,切回SVC模式进行操作系统初始化。
以下是一个实际的基于ARM平台的一个bootloader示例。
编译环境:ADSv1.2
Read the rest of this post »

Tagged with: , .
Avatar

ARM是标准的RISC(Reduced Instruction Set Computing)即“精简指令集”,它的指令系统相对简单,它只要求硬件执行很有限且最常用的那部分指令,大部分复杂的操作则使用成熟的编译技术,由简单指令合成。
ARM7采用三级流水线结构。ARM9采用五级流水线结构。

ARM有七种处理器模式。
一般我们的程序都是在svc模式下运行的,当中断发生时arm会自动切换到相应的模式中去。
为什么我们的程序是在svc模式下运行呢?
Q: “Why does PLUS run all tasks in Supervisor mode instead of using User Mode for tasks and Supervisor mode for PLUS system calls? ”
A: Portability and ease of use. Without having to worry about User/Supervisor mode, the PLUS function calls can be function calls. Without it, you usually have to map all of the OS function calls into some type of software trap mechanism. This complicates the system and usually adds overhead that is not needed. Also, our PLUS is a Real Time Kernel, not a full blown OS. The distinction is that a Kernel needs to be small and efficient while still providing System Calls that are robust. A Trap mechanism adds code and hurts performance.
However, AT does provide an MMU support package for selected ports that does allow for memory protection of tasks and enables application tasks to run in User Mode while the kernel runs in Supervisor mode.
从以上我们可以知道,操作系统在运行时访问某些特定的资源,比如硬件寄存器等需要arm处在特权模式下,如果我们系统是在User Mode下运行那么就需要通过手动调用swi类似的指令切换到特权模式,而如果我们的系统直接运行在svc模式下就省去了很多不必要的操作。

ARM处理器总共有37个寄存器,各个模式下可以使用的处理器如下。

其中R0-R7是unbanked register,也就是各个模式下都是同一个物理寄存器。
R8-R14是banked register,也就是各个模式都是不同的物理寄存器。一般R13做SP使用,R14为LR。
R15是PC。
ARM有一个在所有处理器模式下都可以访问的CPSR(current program status register)当前运行状态寄存器和一个在异常模式下的SPSR(saved program status register)保存的状态寄存器。我们可以通过调用MSR指令改变CPSR来手动切换处理器模式,也可以通过MRS来读取当前的处理器模式和上次保存的处理器模式。

ARM的异常及其处理
我们以一个中断发生来看ARM会做什么操作。

可见当异常发生时ARM会自动设置当前处理器模式以及自动跳转到相应地址。
各个异常的优先级是
Reset>Data Abort>FIQ>IRQ>Prefetch Abort>Undefined instruction>SWI

ARM的指令集
ARM拥有32位的ARM指令集和16为的thumb指令集。
Thumb代码所需的存储空间约为ARM代码的60%~70% - Thumb代码使用的指令数比ARM代码多约30%~40% - 若使用32位的存储器,ARM代码比Thumb代码快约40% - 若使用16位的存储器,Thumb代码比ARM代码快约40%~50% - 与ARM代码相比较,使用Thumb代码,存储器的功耗会降低约30% 显然,ARM指令集和Thumb指令集各有其优点,若对系统的性能有较高要求,应使用32位的存储系统和ARM指令集,若对系统的成本及功耗有较高要求, 则应使用16位的存储系统和Thumb指令集。
在TI平台和MTK平台中除了bootloader外一般都是使用16位来编译源文件的。

Tagged with: .