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、ITMAPB外部私有外设总线,制造商添加的片上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整除。