ARM Cortex M3 基础(学习笔记)

参考arm_cortexm3_processor_trm以及其他网络上的资料整理


前言

Cortex-M3是一种低功耗的处理器,具有门数低、中断延迟小和调试成本低的特点。


一、feature

在这里插入图片描述

二、功能描述

1.Interfaces

1.1 Bus interfaces

Cortex-M3处理器包含三个32位AHB-Lite总线接口和一个32位APB接口。

ICode接口

地址范围是0x00000000 到 0x1FFFFFFF,M3取指令通过该AHB-Lite接口,所有取指令都是使用32位数据宽度,Debug无法使用该接口。

DCode接口

地址范围是0x00000000 到 0x1FFFFFFF,M3或者Debug访问数据使用该AHB-Lite接口,M3访问数据的优先级高于Debug访问,即当同时有M3和Debug访问时,Debug访问将等待到M3访问完成。
ARM建议在ICode和DCode AHB总线接口之间进行任何外部仲裁,要确保DCode比ICode具有更高的优先级。

System接口

地址范围0x20000000 到 0xDFFFFFFF,0xE0100000 到 0xFFFFFFFF,M3取指令,M3或者Debug访问数据使用该AHB-Lite接口。

PPB接口

地址范围0xE0040000 到 0xE00FFFFF,M3或者Debug访问数据使用该APB接口。
External PPB (EPPB)空间地址范围0xE0040000 到 0xE0100000,应用于与coresight兼容的debug and trace组件。

1.2 Embedded Trace Macrocell(ETM)接口

1.3 AHB Trace Macrocell(HTM)接口

1.4 Debug Port(DP) AHB-AP接口

三、Programmers Model

The Cortex-M3 programmers model is an implementation of the ARMv7-M architecture.

1.运行模式和状态

M3有两种运行模式,Thread模式和Handler模式,区别是是否执行异常处理程序;有两种运行状态,Thumb状态和Debug状态,这个和执行的指令相关;有两种代码执行的权限,特权级和用户级,区别是访问资源的权限不同。

运行模式

M3在复位或者异常返回时进入Thread模式。特权代码和用户代码都可以在线程模式下运行。
M3由于出现异常而进入Handler模式。所有代码在Handler模式下处于特权级执行。
Thread模式可以执行SVC指令进入异常,从而切换运行权限

运行状态

Thumb状态,M3运行16位和32位Thumb指令时处于该状态。
Debug状态,M3在halt下处于该状态。

运行权限

Handler 模式一定是处于特权级的,Thread模式可以处于特权级或者用户级。
从应用上看,操作系统运行在特权模式和用户模式,应用程序通常运行在用户模式,让操作系统给应用程序分配系统资源,并对其他进程和任务提供保护
在这里插入图片描述

2. 指令集

The processor implements the ARMv7-M Thumb instruction set.

3.memory map

在这里插入图片描述

4. 写缓冲(Write buffer)

为了防止总线写数据处于wait cycle时M3停转,写数据会通过一个写缓冲区(Write buffer)到DCode总线和System总线。如果写缓冲区已满,则对总线的后续操作将停止,直到写缓冲区内的操作下发完成。
DMB和DSB指令会等待写缓冲区耗尽。如果在DMB或DSB等待期间出现中断,M3将在中断完成后返回到DMB或DSB之后的指令。这是因为中断处理充当了一个内存屏障操作(memory barrier)。
memory barrier,also known as membar or memory fence or fence instruction, is a type of barrier and a class of instruction which causes a central processing unit (CPU) or compiler to enforce an ordering constraint on memory operations issued before and after the barrier instruction.即等待之前的指令执行完成

5. 寄存器

在这里插入图片描述
M3有32个寄存器,包括13个通用寄存器和其他特殊寄存器。

5.1 通用寄存器, R0-R12

通用寄存器R0-R12没有特殊定义的用途。寄存器R0-R7可通过所有指定通用寄存器的指令进行访问。寄存器R8-R12可通过所有指定通用寄存器的32位指令来访问,但不能被任何16位指令访问。

5.2 Stack Pointer (SP), R13 alias of banked registers, SP_process and SP_main

寄存器R13被用作堆栈指针。SP低两位不能写入,该寄存器是word对齐的。
该寄存器的复位值是0xFFFFFFFF。
Handler模式下使用SP_main,Thread模式会根据配置CONTROL.SPSEL使用SP_main或SP_process。

5.3 Link Register (LR), R14

当执行跳转链接指令(BL)或跳转链接交换(BLX)指令时,LR存储当前PC的值。

5.4 Program Counter (PC), R15

Bit [0]总是0,该寄存器是word或者halfword对齐的

5.5 Special-purpose Program Status Registers, (xPSR)

在这里插入图片描述

5.5.1 Application Program Status Register (APSR)

在这里插入图片描述
在这里插入图片描述

5.5.2 Interrupt Program Status Register, IPSR

M3在异常输入和退出时更改IPSR的值,在Thread模式下,寄存器值为0;在Handler模式下,寄存器值为当前异常编号。

5.5.3 Execution Program Status Register, EPSR

EPSR的T field,它被设置为1,表示处理器执行Thumb指令
ARM A和R架构有两个可选的指令集,ARM和Thumb。指令集状态标识当前的指令集,并且T位标识该状态。M只支持Thumb指令集,因此,只有当T位被设置为1时,处理器才能执行指令。设置为0会导致异常

5.6 The special-purpose mask registers

在这里插入图片描述

5.6.1 PRIMASK

异常掩码寄存器,一个1位的寄存器。如果将初始掩码设置为1,则会将执行优先级提升为0。
执行指令CPSID i,PRIMASK置1
执行指令CPSIE i,PRIMASK清0

5.6.2 BASEPRI

基本优先级掩码,一个8位寄存器。BASEPRI更改了异常抢占所需的优先级级别。只有当BASEPRI的值低于当前执行的软件的未隐藏优先级时,它才会产生影响。在BASEPRI中实现的位数与在优先级寄存器的每个字段中实现的位数相同,并且BASEPRI与这些字段具有相同的格式。

5.6.3 FAULTMASK

故障掩码,一个1位的寄存器。将故障掩码设置为1,执行优先级提高为-1,即硬故障的优先级。只有在优先级低于-1时执行的特权软件才能将故障掩码设置为1。这意味着硬故障和NMI处理程序不能将故障掩码设置为1。从除NMI以外的任何异常返回都将清除故障掩码到0。
执行指令CPSID f,FAULTMASK置1
执行指令CPSIE f,FAULTMASK清0

5.7 The special-purpose CONTROL register

软件可以使用MRS指令读取寄存器,并使用MSR指令写入寄存器。处理器会忽略用户级下的写访问。
软件必须使用ISB屏障指令,以确保在执行下一条指令之前,对CONTROL 寄存器的写入操作生效。
nPRIV, bit[0]
0 设置Thread模式下为特权级
1 设置Thread模式下为用户级
Handler模式下,会切换到特权级
SPSEL, bit[1]
0 使用SP_main
1 如果在Thread模式下,使用SP_process;在handler模式下,该位为保留位
Handler模式下,总是使用SP_main
FPCA, bit[2]
0 FP扩展未激活
1 FP扩展被激活
浮点支持


总结

待更新

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值