shouchengcheng
just do it
 Cortex-M3是一个32位处理器内核,采用的是哈佛结构。
在CM3中小端模式和大端模式都是支持的。
Banked R13:两个堆栈寄存器。任意时刻只能使用其中的一个。
堆栈指针的最低两位永远是0,这就意味着堆栈总是4字节对齐的。
凡是打断程序执行的事件,都被称为异常(exception)。
除了外部中断外,因各种错误产生的fault,以及不可屏蔽中断发生时,都会打断程序的执行,这些情况都称为异常。
(在不严格的上下文中,异常和中断可以混用)

Cortex-M3支持两种处理器的操作模式,还支持两级特权操作
handler mode 和 thread mode
正两个模式是用于区别普通应用程序和异常应用程序(包括异常服务例程)的代码
特权级和用户级,提供一种存储器访问的保护机制,这是一个基本的安全模型
thread mode可以使用特权级,也可以使用用户级
handler mode只能使用特权级
复位后,处理器默认进入thread mode,特权级访问    p15
用户级到特权级的唯一途径就是异常

中断控制器--嵌套向量中断控制器NVIC(Nested Vectored Interrupt Controller)

R15程序计数器PC
因为CM3内部使用连指令流水线,读PC时返回的值是当前指令的地址+4K
优先级号越大,优先级越低

屏蔽效果:FAULTMASK>PRIMASK>BASEPRI    (在特权级下才允许被改)

控制寄存器(CONTROL)
有两个用途,一是用于定义特权级别,二是选择当前使用的堆栈指针K

Cortex-M3使用的是“向下生长的满栈”模型

P17 图2.6 存储器映射分成若干区域
P41 图3.15 初始MSP及PC初始化的一个范例

AHB内部私有外设总线,NVIC、FPB、DWT、ITM
APB外部私有外设总线,制造商添加的片上APB外设等等

NVIC所处的区域叫SCS(系统控制空间),它还包括SysTick、MPU以及代码调试用的寄存器
P83 图5.1 Cortex-M3预订义的存储器映射
P84 图5.2 系统控制空间(SCS)

P98 M3中的大端模式和ARM7相比在AHB上的数据处理有差别、
CM3是在复位的时候确定用哪种端模式,在运行中不能更改。
指令预取永远使用小端模式,在配置控制存储器空间的访问也永远使用小端模式(包括NVIC、FPB等)
外部私有总线地址区0xE0000000~0xE00FFFFF也永远使用小端模式。

P110
在Cortex-M3中编号1~15的是系统异常,大于等于16的都是外部中断,除连异常的优先级被定死了之外,其他异常的优先级都是可编程的。
NVIC的挂起状态寄存器可以保存中断请求信号,这样即使等到响应该中断的时候请求信号没有连,还是会执行这个中断的,这样就不会错失中断请求。
由于芯片厂商会在设计时对优先级进行裁减,生活衣优先级都是以MSB对齐的,即高位对齐。
P113 图7.2 使用4个位来表达优先级的情况(图有误,注意)


向量表是可以重定位的。但是,必须先求出系统中共有多少个向量,再把这个数字向上“圆整”到2的整数次幂,而且起始地址必须对齐到后者的边界上
例如:一共有32个中断,则共有32+16=48个向量,圆整后为64,因此向量表定位的地址必须被64*4=256整除。





 

posted on 2013-12-25 23:51  shouchengcheng  阅读(602)  评论(0编辑  收藏  举报