资源描述
,Click to edit Master text styles,Second level,Third level,Fourth level,Fifth level,Click to edit Master title style,*,Click to edit Master text styles,Second level,Third level,Fourth level,Fifth level,Click to edit Master title style,*,Click to edit Master text styles,Second level,Third level,Fourth level,Fifth level,Click to edit Master title style,*,1,存储器系统,5.,存储器系统,5.1,存储系统功能概览,存储器映射是预定义的。,CM3,的存储器系统支持所谓的“位带”(,bit-band,)操作。,CM3,的存储器系统支持非对齐访问和互斥访问。,CM3,的存储器系统支持小端配置和大端配置。,2,5.,存储器系统,CM3,的,地址空间是,4GB,3,5.2,存储器映射,GB,4,5.,存储器系统,代码区:程序可以在代码区(,512MB,);,内部,SRAM,区:大小,512MB,,用于让芯片制造商连接片上的,SRAM,,这个区通过系统总线来访问。,一个,1MB,的区间,被称为“位带区”。,该一个对应的、,32MB,的“位带别名,(alias),区”,容纳了,8M,个“位变量”。位带别名区里面的每个字对应位带区的一个比特。位带操作只适用于数据访问,不适用于取指。位带别名区中的访问操作是原子的。,4,5.2,存储器映射,5.,存储器系统,片上外设区:一个,512MB,范围。有一条,32MB,的位带别名,以便于快捷地访问外设寄存器,可以方便地访问各种控制位和状态位。要注意的是,外设区内不允许执行指令。,5,5.2,存储器映射,5.,存储器系统,片外外设、片外,RAM,:两个,1GB,的范围,分别用于连接外部,RAM,和外部设备,它们之中没有位带。两者的区别在于外部,RAM,区允许执行指令,而外部设备区则不允许。,6,5.2,存储器映射,5.,存储器系统,系统区,系统级组件,内部私有外设总线,外部私有外设总线,以及由提供者定义的系统外设。,私有外设总线有两条:,AHB,私有外设总线,只用于,CM3,内部的,AHB,外设(,NVIC,FPB,DWT,和,ITM,)。,APB,私有外设总线,既用于,CM3,内部的,APB,设备,也用于内核外部设备。,CM3,允许器件制造商再添加一些片上,APB,外设到,APB,私有总线上,它们通过,APB,接口来访问。,7,5.2,存储器映射,5.,存储器系统,未用的提供商指定区:可通过系统总线来访问,但是不允许在其中执行指令。,8,5.2,存储器映射,5.,存储器系统,CM3,在定义了存储器映射之外,还为存储器的访问规定了,4,种属性,分别是:,可否缓冲,(Bufferable),可否缓存,(Cacheable),可否执行,(Executable),可否共享,(Sharable),9,5.3,存储器的各种访问属性,写回,(Write Back),:写入的数据先逗留在缓存中,待到必要时再落实到最终目的地,用于改善数据传送的效率,减少对访问主存储器的访问操作。,写通,(Write Through),:写操作“穿透”中途的缓存,直接落入最终的存储器目的地址中,使写操作的结果立即生效。,5.,存储器系统,1.,代码区(,0 x0000_0000-0 x1FFF_FFFF,)。该区是可以执行指令的,缓存属性为,WT,(“写通”,,Write Through,),即不可以缓存。此区允许布设数据存储器。在此区上的数据操作是通过数据总线接口的(读数据使用,D-Code,,写数据使用,System,),且在此区上的写操作是缓冲的。,2.SRAM,区(,0 x2000_0000 0 x3FFF_FFFF,)。此区用于片内,SRAM,,写操作是缓冲的,并且可以选择,WB-WA(Write Back,Write Allocated),缓存属性。此区可以执行指令,以允许把代码拷贝到内存中执行,常用于固件升级等维护工作。,10,5.3,存储器的各种访问属性,5.,存储器系统,3.,片上外设区,(0 x4000_0000 0 x5FFF_FFFF),。该区用于片上外设,因此是不可缓存的,也不可以在此区执行指令。,4.,外部,RAM,区的前半段(,0 x6000_0000-0 x7FFF_FFFF,)。该区可用于布设片上,RAM,或片外,RAM,,可缓存(缓存属性为,WB-WA,),并且可以执行指令。,5.,外部,RAM,区的后半段(,0 x8000_0000 0 x9FFF_FFFF,)。除了不可缓存,(WT),外,同前半段。,11,5.3,存储器的各种访问属性,5.,存储器系统,6.,外部外设区的前半段,(0 xA000_0000 0 xBFFF_FFFF),。用于片外外设的寄存器,也用于多核系统中的共享内存(需要严格按顺序操作,即不可缓冲)。该区也是个不可执行区。,7.,外部外设区的后半段,(0 xC000_0000 0 xDFFF_FFFF),。目前与前半段的功能完全一致。,8.,系统区,(0 xE000_0000 0 xFFFF_FFFF),。此区是私有外设和供应商指定功能区。此区不可执行代码。系统区涉及到很多关键部位,因此访问都是严格序列化的(不可缓存,不可缓冲)。而供应商指定功能区则是可以缓存和缓冲的。,12,5.3,存储器的各种访问属性,5.,存储器系统,CM3,有一个缺省的存储访问许可,它能防止使用户代码访问系统控制存储空间,保护,NVIC,、,MPU,等关键部件。当没有配备,MPU,,或配备了,MPU,,但是,MPU,被除能时,缺省访问许可生效。,当一个用户级访问被阻止时,会立即产生一个总线,fault,。,13,5.4,存储器的缺省访问许可,5.,存储器系统,存储器区域,地址范围,用户级许可权限,代码区,0000_0000 1FFF_FFFF,无限制,片内,SRAM,2000_0000 3FFF_FFFF,无限制,片上外设,4000_0000 5FFF_FFFF,无限制,外部,RAM,6000_0000 9FFF_FFFF,无限制,外部外设,A000_0000 DFFF_FFFF,无限制,ITM,E000_0000 E000_0FFF,可以读。对于写操作,除了用户级下允许时的,stimulus,端口外,全部忽略,DWT,E000_1000 E000_1FFF,阻止访问,访问会引发一个总线,fault,FPB,E000_2000 E000_3FFF,阻止访问,访问会引发一个总线,fault,NVIC,E000_E000 E000_EFFF,阻止访问,访问会引发一个总线,fault,。但有个例外:软件触发中断寄存器可以被编程为允许用户级访问。,内部,PPB,E000_F000 E003_FFFF,阻止访问,访问会引发一个总线,fault,TPIU,E004_0000 E004_0FFF,阻止访问,访问会引发一个总线,fault,ETM,E004_1000 E004_1FFF,阻止访问,访问会引发一个总线,fault,外部,PPB,E004_2000 E004_2FFF,阻止访问,访问会引发一个总线,fault,ROM,表,E00F_F000 E00F_FFFF,阻止访问,访问会引发一个总线,fault,供应商指定,E010_0000 FFFF_FFFF,无限制,14,5.4,存储器的缺省访问许可,5.,存储器系统,在,CM3,中,有两个区中实现了位带。,一个是,SRAM,区的最低,1MB,范围,第二个则是片内外设区的最低,1MB,范围。这两个位带中的地址除了可以像普通的,RAM,一样使用外,它们还都有自己的“位带别名区”,位带别名区把每个比特膨胀成一个,32,位的字。可通过位带别名区访问这些字时,就可以达到访问原始比特的目的。,位带区:支持位带操作的地址区,位带别名:对别名地址的访问最终会变换成对位带区的访问,15,5.5,位带操作,5.,存储器系统,16,5.5,位带操作,5.,存储器系统,举例:欲设置地址,0 x2000_0000,中的比特,2,,则使用位带操作的设置过程,写数据到位带别名区,17,5.5,位带操作,5.,存储器系统,举例:欲设置地址,0 x2000_0000,中的比特,2,,则使用位带操作的设置过程,从位带别名区中读取比特,18,5.5,位带操作,5.,存储器系统,举一个例子:,1.,在地址,0 x20000000,处写入,0 x3355AACC,2.,读取地址,0 x22000008,。本次读访问将读取,0 x20000000,,并提取比特,2,,值为,1,。,3.,往地址,0 x22000008,处写,0,。本次操作将被映射成对地址,0 x20000000,的“读改写”操作(原子的),把比特,2,清,0,。,4.,现在再读取,0 x20000000,,将返回,0 x3355AAC8,(,bit2,已清零)。,位带别名区的字只有,LSB,有意义。另外,在访问位带别名区时,不管使用哪一种长度的数据传送指令(字,/,半字,/,字节),都把地址对齐到字的边界上,否则会产生不可预料的结果。,19,5.,存储器系统,在位带区中,每个比特都映射到别名地址区的一个字,这是个只有,LSB,才有效的字。,当一个别名地址被访问时,会先把该地址变换成位带地址。对于读操作,读取位带地址中的一个字,再把需要的位右移到,LSB,,并把,LSB,返回。对于写操作,把需要写的位左移至对应的位序号处,然后执行一个原子的“读改写”过程。,20,5.5,位带操作,5.,存储器系统,21,5.5,位带操作,5.,存储器系统,位带操作的优越性,使代码更简洁,用于实现共享资源在任务间的“互锁”访问。,22,5.5,位带操作,5.,存储器系统,多任务的共享资源必须满足一次只有一个任务访问它,亦即所谓的“原子操作”。以前的读改写需要,3,条指令,导致这中间留有两个能被中断的空当。于是可能会出现紊乱危象:,23,ISR,5.5,位带操作,所演示的情况可以看作是多任务的一个特例:主程序是一个任务,,ISR,是另一个任务,这两个任务并发执行。,5.,存储器系统,通过使用,CM3,的位带操作,就可以消灭上例中的紊乱危象。,CM3,把这个“读改写”做成一个硬件级别支持的原子操作,不能被中断。,24,5.5,位带操作,5.,存储器系统,其它数据长度上的位带操作:,位带操作并不只限于以字为单位的传送。亦可以按半字和字节为单位传送。例如,可以使用,LDRB/STRB,来以字节为长度单位去访问位带别名区,同理可用于,LDRH/STRH,。但是不管用哪一个对子,都必须保证目标地址对齐到字的边界上。,25,5.5,位带操作,
展开阅读全文