1,存储器结构
1.1存储空间的组织结构
我们先来看一下MSP430的存储空间的组织结构,大家可以看到,MSP430是按照64K的存储空间来处理的,只不过不同型号的单片机它内部的容量发生了一些变化。像有些单片机RAM会很大,flash想回会小一些;还有一些flash和RAM都很小,中间空出来的就是作为保留区域,像我们使用的这个149单片机的话,使用的60K的flash,flash空间就是从0FFFFh-01100h。还有就是1K的启动ROM,然后这是RAM的地址,然后下面这里的地址都是外设寄存器的区域。这就是整个MSP430F149的内部存储空间的一个结构。
大家可以来看一下,这个区域其实是中断向量的地址。用户代码其实是放在这个区域的。
1.2 FLASH存储空间
Flash存储的时候是按照分段来的,大家来看一下这里,从0FDFFh-0FC00h就是一个段,这个段有512个字节,其实在整个区域中分成了很多段,并且每段都有512字节。操作flash的时候,可以将1写成0,但是如果它已经写成0了,要向改变它的话,就需要先把整个段擦除,擦出一段之后才可以再进行修改,这个在下面详细介绍FLASH的时候会再做一个更加详细的介绍的。
1.3 内部存储器类型与结构
我们应该知道,典型微型计算机的存储器都是采用的冯·诺依曼结构,也称为普林斯顿结构,即存放程序指令的存储器--程序存储器和存放数据的存储器--数据存储器采取统一的地址编码结构。程序存储器和数据存储器分开的地址编码结构称为哈佛结构。如MCS-51系列微处理器。MSP430采用冯·诺依曼结构,全部寻址空间为64K字节。需要注意的是,最然MSP430是16位的微处理器,但其寻址空间还是按照字节来计算的。
MSP430内部存储器的类型有:程序存储器FLASH、数据存储器RAM、外围模块寄存器、特殊功能寄存器。
1.4 具体地址划分
我们来看看存储器地址的具体划分:
从0 至0xF 为特殊功能寄存器。共16 个字节,包含中断标志寄存器1(IFG1)、中断标志寄存器2(IFG2)、中断允许寄存器1(IE1)、中断允许寄存器2(IE2)、模块允许寄存器1(ME1)、模块允许寄存器2(ME2)。
从0x10 至0x1FF 为外围模块寄存器。包含被定时器、AD 转换器、对外端口等模块用到的寄存器。
从0x200 开始为数据存储器RAM。不同型号中数据存储器的大小不同,但都是从0x200 地址开始向高端地址扩展。如MSP430F149 的数据存储器容量为2KB,其地址范围即为0x200~0x9FF。
从0x1000 到0x107F 是128 个字节的FLASH 存储器,称为信息存储器B。此段存储器与高端地址存储代码的FLASH 存储器本质上没有任何不同,同样也可以存储代码并执行,只是这一段存储器的长度较小,只有128 个字节。主要用来存储一些掉电后仍需保存的数据。由于它是FLASH 存储器,因此可以按照字或者字节写入,但必须整段擦除。
2. 片内ROM组织 2.1 片内ROM组织
片内ROM可能有各种体积,可达60KB。公共地址空间由SFR、外围模块寄存器、数据存储器和程序存储器共享。SFR和外围模块安排在0000h~01FFh的空间中,余下的地址空间0200h~0FFFFh由数据存储器和程序存储器分享。
ROM的开始地址因ROM的体积不同而不同。中断向量固定位于ROM的最高16个字地址区。其中最高优先级的向量位于最高的ROM字地址0FFFEh。这幅图是MSP430不同型号的FLASH型芯片ROM地址分布举例。
2.2ROM表的处理
MSP430的结构允许ROM存放大型数表。这在编制快速而结构清晰的程序时往往是必须的,并且能减少对ROM及RAM的占用.访问这些表可以用所有的字指令和字节指令,这一点给增加编程的灵活性和节省ROM空间带来好处,如:
·用ROM存放用于显示的字符点阵。
·实现计算型数表访问,例如用于显示动态条形图。
·实现查表方式的程序流向控制。
·将数据存入表中作查表处理,以实现数据线性化和补偿。
2.3计算分支跳转和子程序调用
可以用标准指令实现计算分支跳转和子程序调用。CALL和BR指令与其他指令采用同样的寻址方式。
计算分支跳转和子程序调用最理想的寻址模式是间接寻址。充分利用这一编程特点可以得到与常规8位、16位单片机不同的程序结构。利用软件对状态的处理可以方便地实现大量的子程序调用,而不必像通常那样利用“标志”判断来控制程序流向。
计算分支跳转和子程序调用在整个64KB空间内都有效。
3RAM和外围模块组织
3.1 RAM和外围模块组织
利用适当的指令后缀,整个RAM都可按字节或字来访问。外围模块安排在两类地址空间,因此必须用适当的指令来访问,即
※SFR硬件是面向字节的,安排在地址0h~0Fh,只能用字节指令。
※面向字节的外围模块安排在地址010h~0FFh,只能用字节指令。
※面向字的外围模块安排在地址100h~01FFh,只能用字指令。
3.2RAM
RAM可以用作程序代码存储器,也可以用作数据存储器。对程序代码的访问总是针对偶地址的。
对堆栈和PC的操作总是字操作,必须对准偶地址。
字-字和字节-字节操作同样能得到准确的操作数结果和状态位设置。
3.3外围模块-地址定位
地址空间0000h-00FFh留作安排字节模块,地址空间0100h-01FFh留作安排字模块。安排在字地址空间的必须用字指令访问,安排在字节地址空间的必须用字节指令访问。
这两种寻址可经过绝对寻址模式实现,也可以经过采用变址、间接或间接增量寻址模式的工作寄存器来实现。我们现在所看到的图就是外围模块的空间分配及操作。
3.4字模块
字模块是经过全部16位MDB连接的模块。字模块可以字指令或字节指令访问。但是用字节指令访问时,只有偶地址有效,高字节的访问结果总是0。
字模块的寻址空间分割成16个帧,每帧有8个字,我们现在所看到的图就是字模块的空间分割图。
3.5字节模块
我们现在所看到的图是外围模块地址分配-字节模块,可以看出字节模块的地址空间被分成了16组。
字节模块是经MDB的低八位连接的模块。只能以字节指令来访问字节模块。在写操作时字节模块从MDB的低字节取数。
字节指令对字节模块的操作无任何限制。用字指令对字节外围模块作读访问会在高字节产生不可预知的结果。写入字节模块的字数据,低字节写入相应的模块寄存器,而高字节可忽略不计。
3.6外围模块-SFR
我们来看一下这张图,外围模块的配置和外围模块对CPU的响应由SFR的定义来确定。SFR位于更低的地址区,以字节方式工作。因此SFR只能用字节指令来访问。
系统的功耗受当前允许的模块数和模块功能的影响。禁止一个活动的模块会减少系统功耗。为减少功耗,应将不用的引脚接上适当的电平。