CM3学习笔记(一)存储器系统

目录

前言

存储器映射

存储器的缺省访问

 位带操作

非对齐数据传输


前言

CM3有着非常复杂的存储器系统。对于原来只接触过51单片机的初学者来说,这种指令系统真的是令人头疼。

CM3的存储器系统可以说是有着脱胎换骨的变化,有着相当多的特性。我自己水平有限,在这里就简单说说自己对于这套系统的了解。

存储器映射

CM3的存储器的映射是预定义好的,规定了存储器的哪个位置使用哪条总线。CM3只有一个单一固定的存储器映射,无论是哪个芯片厂商生产的任何一款CM3单片机,器NVIC和MPU都在相同的位置。不过,虽然如此,CM3对于存储器所定出的条条框框仍然具有相当大的变化空间的。不同的芯片厂商生产的不同型号的单片机有着不相同的存储器空间分配的方法,这在我学习的一开始给我照成了相当大的困扰。

在学习前我们首先应该搞清楚实物单片机与理论上的CM3的差别。CM3理论上的SRAM的空间为512MB,地址为0X20000000--0X3FFFFFFF。但是在我用实物STM32F103ZE上这个SRAM只有64KB的大小,地址为0X20000000--0X20100000。类似的还有储存空间的代码区。CM3理论上给出的空间为从0X00000000到0X1FFFFFFF,总共为512MB。但是到实物上,代码区的空间为0X80000000--0X1FFFFFFF,总共为512KB。

这个问题我一开始并没有注意到,导致我在0X20100000以后的地址空间写数据时都无法成功写入,并且也解决了为什么我的PC指针总是0X80000000以后的数值(因为芯片制造商根本就没有给代码区0X80000000之前的空间,那么程序计数器指针当然不可能会有0X80000000之前的值!)

让我们先看下CM3理论上的预定义的存储器映射

 因为不同的芯片生产商的储存空间分配方案不同,在这里只说下存储器高512MB空间的情况。高512MB地址空间为0XE0000000--0XFFFFFFFF,这里面是CM3的内核。这里面包含了系统级的组件件,内部私有外设总线,外部私有外设总线以及提供者定义的系统级外设。

私有的外设总线有两条:

AHB 私有外设总线,这个只能用于CM3的内部的AHB外设,分别是NVIC,FPB,DWT以及ITM。

APB 私有外设总线,这个既用在CM3内部的APB设备也可以用于外部设备(相对于CPU内核而言           的外部,例如GPIO口),CM3还能允许芯片制造商再添加一些片上的APB外设到APB总线             上,这些外设是通过APB接口进行访问的。

存储器的缺省访问

CM3拥有一个缺省的储存访问许可,这个能够防止用户代码访问系统关键储存空间,保护类似于NVIC等的关键部件,缺省访问在以下的条件生效:

                        没有配备MPU

                        配备了MPU,但是MPU没有启动。

缺省访问许可如下:

 位带操作

这个操作能够使我们使用普通的加载、储存指令来操作单一的比特。在CM3中,有两个带设计了这种位带操作。一个是SRAM的最低1MB的范围,另一个是片内外设区的最低的1MB区域。(对于STM32F103系列的单片机,其SRAM和外设寄存器全部都被映射到了一个位段区内,允许执行单一的位操作。)

这些区域中的地址除了可以像普通的RAM一样使用外,它们还有各自的“位带别名区”,位带别名区把原来的每一位都膨胀为32位的字。当通过位带别名区去访问这些字时就可以实现直接操作原始的位。如SRAM的1MB的位带区对应的位带别名区为32M。位膨胀的示意图如下所示:

 

 

非对齐数据传输

CM3支持使用非对齐的地址访问数据存储器。就是说,传递的地址值可以不是4的倍数,具体的来说就是传输半字数据的地址可以不是2的倍数,传输一字数据的地址可以不是4的倍数。

存储器可以理解成一块一块的,每一块都是一个字节大小,里面存放着八位的二进制数据,每一块都有着独一无二的编号也就是所谓的地址。若干块组成一层,对于不同位数的机器每层所以含有的储存块的数量是不相同的,不过都要保证每层都要放下与该芯片对应位数的二进制数据。比如,51单片机是8位机器,每层只有一个数据块,而CM3为32位的,每层就得有有四个才能放下一个完整的32位数据,所谓的对齐就是这些数据要放在相同的层内。51单片机为8位的,也就没有所谓的对齐,但是对于32位的机器就可能出现低十六位存在一层而高十六位放在了另外一层,这个就是所谓的没有对齐。在之前的ARM处理器上,这种不对齐的操作室非法的,会引发数据流产(Data abort)异常。而对于CM3这种操作是被允许的。非对齐示例如下:

 

 

 

 

 

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: CMSDK CM3 RTL代码全解析主要是对ARM Cortex-M3处理器的硬件设计进行详细分析和解释。 首先,CMSDK CM3 RTL代表了CMSDK Cortex-M3 Subsystem RTL,是指ARM Cortex-M3处理器的硬件设计实现。Cortex-M3是一种32位RISC处理器,被广泛应用于嵌入式系统中。 CM3 RTL代码的全解析包括对硬件设计中各组件和模块的功能和实现进行详细解释。其中包括处理器核心、存储器、总线接口以及外设等。 处理器核心是CM3 RTL代码中最重要的部分,包括处理器的指令集、寄存器、流水线等。对于每一条指令的实现细节和时序进行解析,可以帮助我们理解CM3处理器的工作原理。 存储器方面,CM3处理器包括指令存储器和数据存储器,对其访问控制逻辑和地址映射进行解析,可以帮助我们了解CM3处理器如何进行指令和数据的读写操作。 总线接口是处理器与外部设备进行通信的接口,包括AMBA总线协议的实现和处理器与外部设备之间的寄存器映射。对总线的访问控制、时序和传输协议进行分析,可以帮助我们理解CM3处理器如何与外设进行数据交互。 外设方面,CM3处理器包括UART、SPI、I2C、GPIO等外设接口,对这些外设接口的实现细节进行解析,可以帮助我们了解CM3处理器如何与外部设备进行通信和控制。 通过对CM3 RTL代码的全解析,我们可以深入了解到ARM Cortex-M3处理器的硬件设计和工作原理,从而能够更好地理解和应用这一嵌入式处理器。了解CM3 RTL代码对于嵌入式系统的开发和调试都非常重要。 ### 回答2: CMSDK CM3 RTL代码是指针对ARM Cortex-M3处理器的RTL(Register Transfer Level)代码全解析。 首先,RTL是一种表示数字电路的抽象级别,用于描述数字系统中寄存器之间的数据传输。CM3是一款由ARM设计的嵌入式处理器架构,具有低功耗、高性能和丰富的外设接口。 CMSDK CM3 RTL代码全解析可以对该处理器的内部结构和工作原理进行深入分析。该代码包含了各个功能模块的设计和连接方式。 首先,CM3处理器包含了核心处理单元(CPU),负责指令的解码和执行。RTL代码展示了CPU的结构和内部寄存器的设计,给出了指令执行的详细流程。 其次,CM3还包含了内存管理单元(MMU),用于实现对内存的访问和保护。RTL代码提供了MMU的设计和实现细节,包括页表、地址转换和权限管理等。 另外,CM3还集成了各种外设,如时钟控制器、GPIO、串口、定时器等。RTL代码展示了这些外设的设计和连接方式,如寄存器映射、中断控制和数据传输等。 通过全解析CM3 RTL代码,可以深入了解CM3处理器的内部结构和工作原理,帮助开发人员更好地理解和应用该处理器。同时,该解析还可以为自定义和优化CM3处理器提供参考,提高处理器的性能和功能。 综上所述,CMSDK CM3 RTL代码全解析是对ARM Cortex-M3处理器的内部结构和工作原理进行详细深入分析的过程,是嵌入式系统开发中重要的一步。 ### 回答3: CM3(Cortex-M3)是一款低功耗、高性能的处理器架构,广泛应用于嵌入式系统中。CMSDK(CM System Design Kit)是一套配套的设计资源集合,包括了CM3处理器的RTL(Register Transfer Level)代码,用于实现处理器的硬件逻辑。 RTL代码全解析主要包括以下几个方面的内容: 1. 数据通路:RTL代码定义了CM3处理器中各个功能模块之间的数据通路。这些模块包括寄存器堆、ALU、乘法器、存储器接口等。RTL代码会详细定义这些模块之间的连接方式,以及数据的传输和处理过程。 2. 控制逻辑:RTL代码定义了CM3处理器的控制逻辑。这包括指令译码、流水线控制、中断处理、异常处理等。RTL代码中通过状态机等方式实现了处理器的控制逻辑,确保指令能够按照正确的顺序被执行。 3. 中断和异常处理:CM3处理器支持多种中断和异常处理方式,RTL代码中会定义相应的控制逻辑和状态机,用于处理不同类型的中断和异常。这些代码会定义中断优先级、中断向量表、中断控制器等相关内容。 4. 外设接口:CM3处理器可以连接各种外设,RTL代码中会定义处理器和外设之间的接口逻辑。CM3的RTL代码中会定义与外设通信的总线协议,以及相应的数据传输和控制信号。 总之,CM3的RTL代码全解析就是对处理器硬件逻辑的详细解析,包括数据通路、控制逻辑、中断和异常处理、外设接口等方面。通过对RTL代码的解析,我们可以深入了解CM3处理器的内部实现原理,从而更好地应用和优化嵌入式系统设计。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值