C28x内核为哈佛结构,程序储存和数据储存分开,使用32位数据地址和22位程序地址。这样总地址可以达到:在数据空间中存储4G个字(1个字= 16位),在程序空间中存储4M个字。C28x的程序和数据空间被统一映射到同一片内存块,即统一编址。
编址范围:数据地址——0x0000 0000~0xFFFF FFFF,程序地址——0x0000 0000~0x003F FFFF。
下图显示了片上地址在程序空间和数据空间中的分配情况:
上面内存图分成了三个片区:
①片上程序、数据存储区;
②保留区;
③CPU中断向量。
请注意,这是CPU中断向量,不要和外设中断向量混淆。
程序空间中的64个地址留给32个CPU中断向量表使用。通过设置VMAP位可将CPU向量映射到程序空间的顶部或底部。CPU中断向量表的定义请参考规格书上的内容,每个向量表存放的是中断服务函数的入口地址。
VMAP=0,CPU中断向量存放在程序空间的顶部(0x0000 0000~0x0000 003F);VMAP=1,CPU中断向量存放在程序空间的底部(0x003F FFC0~0x003F FFFF)。
这里顺便说一下外部中断向量(PIE),外部中断向量存放在专门的PIE向量表中,但该该储区也可用作程序存储区。
具体的存储分配细节如下表所示:
下面对各个片上存储区进行介绍。
存储类型:
从电子学的角度来看,C28x的存储器就分为三种:RAM、FLASH和ROM。RAM:随机存储器,程序运行过程中,可读可写,存放指令运行过程中产生或使用的数据,掉电消失;FLASH:俗称闪存,用来存放用户程序(指令),需要烧录,掉电不消失;MCU运行时,从FLASH中读取用户指令,部分指定的FLASH区域可以被用户程序改写;ROM:只读存储器,运行过程中只读不写,存放一些特殊用途的指令、数据或向量,一般出厂时厂家已经在上面已经烧录好了内容,部分区域也可由用户自行烧录,掉电不消失。
从存储用途和逻辑上来看,存储类型分类则相对复杂些,下表展示了这些存储类型:
在C28x系列芯片中,能直接访问内存的子系统有:CPU、CLA和DMA。
①专用RAM(Mx和Dx RAM)
CPU子系统具有四个专用的支持ECC的RAM块:M0,M1,D0和D1。M0 / M1存储区是与CPU紧密耦合的小型非安全块(即只有CPU才能访问它们)。 D0 / D1存储区是安全块,具有访问保护功能(CPU写入/读取保护)。
②本地共享RAM(LSx RAM)
各个子系统专用的RAM块,只能由CPU和CLA访问,称为本地共享RAM(LSx RAM)。
所有LSx RAM块均具有奇偶校验。这些存储区是安全存储区,具有访问保护(CPU写入/提取)功能。默认情况下,这些内存只能由CPU访问,用户可以通过配置LSxMSEL寄存器中的MSEL_LSx位字段,选择与CLA共享这些内存。
③全局共享RAM(GSx RAM)
CPU和DMA均可访问的RAM块称为全局共享RAM(GSx RAM)。CPU和DMA都具有对这些存储区的完全读写访问权限。所有GSx RAM块均具有奇偶校验。GSx RAM具有访问保护功能(CPU写入/ CPU提取/ DMA写入)。
④CPU/CLA消息RAM(CPU/CLA MSGRAM)
这些RAM块可用于在CPU和CLA之间共享数据。CLA有“CLA to CPU MSGRAM”的读写权限,CPU有“CPU to CLA MSGRAM”的读写权限。CPU和CLA对两个MSGRAM都有读取访问权限。该RAM块具有奇偶校验。