3.2 MSP432系列MCU存储映像与中断源
3.2.1 MSP432系列MCU存储映像
存储映像(Memory Mapping)可以直观地理解为,Cortex-M4F寻址的4GB地址空间(0x0000_0000~0xFFFF_FFFF)是如何被使用的,都对应了哪些实际的物理介质。它们有的给了Flash存储器使用,有的给了RAM使用,有的给了外设模块使用。下面利用GPIO模块来阐述有关概念。
GPIO模块使用了0x400F_4C00~0x400F_4D38地址空间,这些空间内的GPIO寄存器与CPU(即M4F内核)内部寄存器(如R0、R1等)不同,访问GPIO寄存器需要使用直接地址进行访问,即需要使用三总线(地址总线、数据总线、控制总线)。而访问CPU内部寄存器,无须经过三总线(汇编语言直接使用R0、R1等名称即可),没有地址问题。由于访问CPU内部寄存器不经过三总线,因此比访问GPIO寄存器(对应直接地址)来得快。为区别于CPU内部寄存器,GPIO寄存器也被称为“映像寄存器”(Mapping Register),相对应的地址被称为“映像地址”(Mapping Address),整个可直接寻址的空间被称为“映像地址空间”(Mapping Address Space)。
MSP432把Cortex-M4F内核之外的模块用类似存储器编址的方式统一分配地址。在4GB的映像地址空间内分布着片内Flash、SRAM、系统配置寄存器,以及其他外设等,以便CPU通过直接地址进行访问。MSP432存储映像空间分配如表3-4所示。
表3-4 MSP432存储映像空间分配
在表3-4中,主要记住片内Flash区及片内RAM区存储映像。因为中断向量、程序代码、常数放在片内Flash中,因此源程序编译后的链接阶段使用的链接文件中需含有目标芯片Flash的地址范围及用途等信息,才能顺利生成机器码。此外,链接文件中还需包含RAM的地址范围及用途等信息,以便生成机器码确切定位全局变量、静态变量的地址及堆栈指针。其他区域作用了解即可。
1. 片内Flash区存储映像
MSP432片内Flash大小为256KB,地址范围为0x0000_0000~0x0003_FFFF,一般被用来存放中断向量、程序代码、常数等。中断向量表从0x0000_0000地址开始向大地址方向使用。16KB的闪存信息存储器用于引导加载程序(BSL)、标签长度值(TLV)和闪存邮箱。
2. 片内RAM区存储映像
MSP432片内RAM为静态随机存储器SRAM,大小为64KB,地址范围为0x0100_0000~0x0100_FFFF,一般被用来存储全局变量、静态变量、临时变量(堆栈空间)等。该芯片堆栈空间的使用方向是向小地址方向进行的,因此,堆栈的栈顶(Stack Top)应该设置为RAM地址的最大值+1。这样,全局变量及静态变量从RAM的最小地址向大地址方向开始使用,堆栈从RAM的最高地址向小地址方向使用,可以减少重叠错误。
3.2.2 MSP432中断源
中断是计算机发展中一个重要的技术,它的出现很大程度上解放了处理器,提高了处理器的执行效率。所谓中断,是指MCU在正常运行程序时,由于MCU内核异常或MCU各模块发出请求事件,引起MCU停止正在运行的程序,而转去处理异常或执行处理外部事件的程序(又称中断服务程序)。
这些引起MCU中断的事件称为中断源。如表3-5所示,MSP432的中断类型分为两类:一类是内核中断,另一类是非内核中断。内核中断主要是异常中断,也就是说,当出现错误时,这些中断会复位芯片或做出其他处理。CPU异常模型以固定和可配置的优先级顺序处理各种异常(内部和外部事件,包括CPU指令、存储器和总线故障条件)。非内核中断是指MCU各个模块被中断源引起的中断,MCU执行完中断服务程序后,又回到刚才正在执行的程序,从停止的位置继续执行后续的指令。非内核中断又称可屏蔽中断,这类中断可以通过编程控制其开启或关闭。MSP432MCU上的Cortex-M4F处理器实现了具有64条外部中断线和8个优先级的NVIC。从应用的角度来看,设备级别的中断源分为两类,即NMI和用户中断。
表3-5中还给出了各中断源的中断向量号、非内核中断的中断请求(Interrupt Request)号(简称IRQ中断号)及非内核中断的优先级设置的寄存器号(简称IPR寄存器号)。中断向量号是每一个中断源的固定编号,是由芯片设计生产时决定的,编程时不能更改,它代表了中断服务程序入口地址在中断向量表的位置。IRQ中断号是非内核中断源的编号,每一个编号代表一个非内核中断源。
表3-5 MSP432中断向量表