轻松玩转DSP:基于TMS320F2833x
上QQ阅读APP看书,第一时间看更新

1.2 存储器配置

F2833x具有34KW的SARAM存储器、256KW的FLASH存储器、1KW的OTP ROM存储器和8KW的Boot ROM存储器,配置如图1.7所示。存储空间分成两块:片外存储空间(3个XINTF区)和片内存储空间(XINTF以外区域)。对于片内空间,除外设帧PF0、PF1、PF2和PF3外,其余空间既可映射为数据空间,又可映射为程序空间。

图1.7 F2833x的存储器配置图

1.2.1 片上存储单元

1.F2833x的SARAM存储器

F2833x在物理上提供了34KW的SARAM存储器,分布在几个不同的存储区域。

(1) M0和M1

M0和M1均为1KW。M0地址为0x00 0000~0x00 03FF,M1地址为0x00 0400~0x00 07FF。M0和M1既可映射为数据空间,也可映射为程序空间。由于复位后SP的内容为0x0400,因此M1默认作为堆栈。

(2) L0~L7

L0~L7每块为4KW,它们既可映射为数据空间,也可映射为程序空间。其中L0~L3是双映射(与F2812兼容),既映射到0x00 8000~0x00 BFFF,又映射到0x3F 8000~0x3F BFFF。L0~L3内容受CSM(代码安全模块)保护;L4~L7是单映射的,映射地址为0x00 C000~0x00 FFFF,该区域可以DMA访问。

2.F2833x的FLASH存储器

FLASH存储器为256KW且受CSM保护,程序烧写到FLASH就无须借助仿真器进行调试了,此外连同密码一同烧写,程序的知识产权就得到了保证。F2833x片上地址为0x30 0000~0x33 FFFF。FLASH存储器通常映射为程序存储空间,但也可以映射为数据存储空间。FLASH又分成了8个扇区,各扇区范围见表1.3。

表1.3 FLASH扇区分配表

需特别注意的是,A扇区尾部128个单元的特殊用途:

1) 0x33 FF80~0x33 FFF5,使用CSM时,该区域要清零。

2) 0x33 FFF6是FLASH引导程序入口,即应在0x33 FFF6和0x33 FFF7存储跳转指令。

3) 0x33 FFF8~0x33 FFFF,8个单元共128个位,存储密码。

3.OTP ROM存储器

OTP是一次性可编程存储区,即只能一次性写入,不能被擦除,所以已经写过的部分是不可以被擦除和改写的。F2833x有两个OTP区,其中一个已被TI公司用做ADC校准数据区(存放adc_cal()函数),另一区域地址为0x38 0400~0x38 07FF,开放给用户使用。OTP写一次的对象是位,不是字节,不是字,也不是一个区,所以OTP可多次写入,但对于一个位或一个地址,只能写一次。

4.Boot ROM存储器

Boot ROM存储器共8KW,分成如图1.8所示几个区域。

图1.8 F2833x的BootROM存储器的映像

5.F2833x的外设帧

外设帧包含PF0、PF1、PF2和PF3,均受EALLOW保护。除CPU寄存器之外的其他寄存器,如CPU定时器、中断向量、ePWM、eCAP等均配置在这个区域。其中外设帧PF3只包含MCBSPA寄存器,可通过DMA访问。

1.2.2 片外存储单元(XINTF)的应用及注意事项

1.片外存储单元概述

片外存储单元指的就是XINTF,但F28335的XINTF扩展区减少到3个,分别为Zone0、Zone6和Zone7。每一个XINTF区域可以独立配置特定的读、写访问时序,每个区域还有相应的区域片选信号,当片选信号拉低时,即可访问相应区域。XINTF扩展引脚如图1.9所示。

所有的空间共享20位的外部地址总线,处理器根据被选通的Zone产生相应的地址,具体如下:

图1.9 XINTF扩展引脚

1)Zone0分配的外部地址范围为0x00000~0x00FFF。当CPU访问Zone0空间的第一个字时,地址总线产生0x00000;当CPU访问Zone0空间的最后一个字时,地址总线产生0x00FFF地址。需要注意的是,访问Zone0空间时需要将Zone0的片选信号(XZCS0)拉低。

2)Zone6和Zone7共享外部地址总线,地址范围为0x00000~0xFFFFF,片选信号XZCS6为低决定Zone6被访问,片选信号XZCS7为低决定Zone7被访问。

在C28x流水线中,操作的读访问在写操作之前,因而程序是按照 “先写后读”的顺序,但实际运行可能会出现为“先读后写”的情况。

为了防止顺序颠倒,外设寄存器所在的存储区域都设有相应的硬件保护。这些区域被称为“其后紧跟读访问的写操作流水线保护”。Zone0是默认“其后紧跟读访问的写操作流水线保护”的区域。

对同一存储单元进行访问时,C28x自动保护其后紧跟读的写操作。但当访问不同存储单元时,CPU通过插入足够的NOP指令使得在进行读访问前完成写操作。

外设寄存器映射到XINTF区域时需要注意读写的执行顺序;当存储器映射到XINTF区域时,则不需要关心读写的执行顺序,因此区域0通常用来与外设器件相连,而不是存储器。

每个空间的访问等待、选择、建立及保持时间均可通过XTIMINGx寄存器进行配置。XINTF模块用到两个时钟:XTIMCLK(内部时钟)和XCLKOUT(外部时钟)。这两个时钟与CPU时钟SYSCLKOUT的关系如图1.10所示。

图1.10 XINTF的时钟框图

XINTF的访问是基于XTIMCLK时钟。配置XINTF时,用户必须配置内部时钟XTIMCLK和SYSCLKOUT的比率关系(配置XINTCNF2寄存器),可将XTIMCLK时钟频率设置为SYSCLKOUT或SYSCLKOUT/2(默认情况)。

XINTF的访问是从外部时钟输出XCLKOUT的上升沿开始的,所有事件都是在相应的XTIMCLK上升沿产生。配置XINTCNF2.CLKMODE位,可将XCLKOUT频率设置为XTIMCLK或XTIMCLK/2(默认情况下,XCLKOUT等于XTIMCLK/2,或等效于SYSCLKOUT/4)。为降低系统干扰,用户可将XINTCNF2寄存器的CLKOFF位写1关闭XCLKOUT的输出。

注意:在改变XINTF配置时,应保证没有访问XINTF区域,配置XINTF参数的代码也不能从XINTF区域执行。

此外,每个区域都可以使用XREADY信号扩展外部等待状态或不扩展。如图1.11所示为XINTF读写时序图。

图1.11 XINTF读写时序图

XINTF可直接访问外部存储器映射区域。XINTF区域的读写时序可以分成三个阶段:前导LEAD、有效ACTIVE和结束TRAIL。每阶段等待状态的XTIMCLK周期数可在相应区域的XTIMING中配置,且读访问和写操作的时序配置是独立的。

在前导阶段,被访问区域的片选信号被拉低,访问的地址出现在地址总线上(XA),整个前导阶段的时间可以在XTIMING中配置(单位为XTIMCLK周期)。默认情况下,读、写访问的前导阶段时间均被设置成最大值,即6个XTIMCLK周期。

在有效阶段,即对外部设备的访问。对于读访问,读选通信号XRD被拉低;对于写操作,写选通信号XWE0被拉低。

结束阶段是一段保持时间。在此阶段,片选信号仍保持低电平,但读、写选通信号恢复为高电平,可在XTIMING中配置结束阶段的时间。默认情况下,读、写访问的结束阶段时间被设置成最大值,即6个XTIMCLK周期。

2.总线宽度

每个Zone都可以独立配置为16或32位总线宽度,总线连接如图1.12所示。

根据不同配置,XA0/XWE1信号的功能会发生相应的变化。当XINTFzone配置为16位操作模式时(XTIMINGx[XSIZE]=3),XA0/XWE1作为最低地址位XA0。

总线的宽度可由XTIMINGx[XSIZE]来定义,当连续访问两个总线宽度不同的Zone空间时,两个Zone的访问之间要加入延时,这个可通过配置XBANK来实现。例如,给定的区域配置如下:

图1.12 16位/32位数据总线宽度

a)外扩16位数据 b)外扩32位数据

1) 0区配置为16位模式(XTIMING0[XSIZE]=3)。

2) 6区配置为32位模式(XTIMING6[XSIZE]=1)。

3) 7区配置为32位模式(XTIMING7[XSIZE]=1)。

若需要连续访问Zone0和Zone6或者Zone0和Zone7,那么要在Zone0访问过后加入至少一个空间切换延时来释放总线,如XBANK=0,XBANK[BCYC]=1。

3.常用寄存器

1) XBANK寄存器,其位格式如图1.13所示。

图1.13 XBANK寄存器的位格式

示例:从Zone7切换至其他的Zone,并增加额外的3个周期。

2) XINTCNF2寄存器,其位格式如图1.14所示。

图1.14 XINTCNF2寄存器的位格式

示例:XCLKOUT常用于检测时钟的调试阶段。

3) XTIMING0寄存器,位格式如图1.15所示。

图1.15 XTIMING0寄存器的位格式

① X2TIMING:指定XRDLEAD、XRDACTIVE、XRDTRAIL、XWRLEAD、XWRACTIVE的缩放因子。0=缩放比例1∶1;1=缩放比例2∶1。

② XSIZE:00~10=保留;01=32位接口(使用32位数据线);11=16位接口。

③ READYMODE:0=XREADY输入为同步方式,1=XREADY输入为异步方式。

④ USEREADY:0=Zone访问时,XREADY信号被忽略;1=XREADY被用于扩展Zone。

⑤ XRDLEAD/XERLEAD:使用XTIMCLK来定义读/写数据时LEAD等待状态周期,见表1.4。

表1.4 XTIMCLK定义的读/写数据时LEAD等待状态周期

⑥ XRDACTIVE/XWRACTIVE:用XTIMCLK来定义读/写数据时ACTIVE等待状态周期,见表1.5。

表1.5 XTIMCLK定义的读/写数据时ACTIVE等待状态周期

⑦ XRDTRAIL/XWRTRAIL:使用XTIMCLK来定义读/写数据时TRAIL等待状态周期,见表1.6。

表1.6 XTIMCLK定义的读/写数据时TRAIL等待状态周期

示例:Zone0的读写时钟配置。

4.示例分析

配置CPU定时器0并使能定时器0中断。中断服务程序拷贝至外部存储Zone7的SARAM中运行(16位数据总线)。参考代码如下:

二维码1.1