CORTEX-M4知识点总结 联系客服

发布时间 : 星期五 文章CORTEX-M4知识点总结更新完毕开始阅读

· 数据访问(如SRAM区域) · 外设(如外设区域)

系统 0.5GB外部设备 1GB外部RAM 1GB外设 0.5GBSRAM 0.5GBCODE 0.5GB

某款芯片的存储器映射分配

PWM registerGPIO registerAnalog control(ADC/TP/Analog Reg/1k sram)0x50C0_0000IO control0xFFFF_FFFFReserved0xF000_00000xE000_0000Private Peripheral Bus7816 register0x5090_0000SPI3 registerSPI2 registerSPI1 registerSPI0 registerReservedTimer_2 registerTimer_1 registerTimer_0 registerAPBBRG device0x5000_0000WDT registerRTC registerCRC register0x4010_00000x4000_0000FLASH CTRLDMAReserved0x3000_00000x2000_00000x60_0000SRAMReserved8KBytes32KBytes0x50F0_00000x50D0_00000x50B0_00000x5073_00000x5072_00000x5071_00000x5070_00000x5062_00000x5061_00000x5060_00000x5050_00000x5040_00000x5030_00000x5023_0000UART3 registerUART2 registerUART1 registerUART0 registerI2C_1 registerI2C_0 register0x5010_0000SCU(clockResetPmucalendar)0x5000_00000x5022_00000x5021_00000x5020_00000x5011_00000x0000_0000FLASH MEMORY128K+4K FLASH 一般Code放在Flash当中,数据放在RAM中。数据在RAM存放有一定的顺序,可以分为数据段,BSS段、堆和栈区域。

· 数据段,存储在内存的底部,包含初始化的全局变量和静态变量。

· BSS段,未初始化的数据。

· 堆,C函数自动分配存储器区域,例如alloc()和malloc()。 · 栈,用于临时数据存储,局部变量,函数调用

存储器栈(向下增长)堆(向上增堆(向上增长)长)BSS段数据段0x20000000

2.3.3 栈存储

同几乎所有的处理器架构一样,Cortex-M处理器在运行时需要栈存储和栈指

针R13。ARM处理器将系统主存储器用于栈空间操作,使用PUSH指令往栈中存储数据以及POP指令从栈中提取数据。

处理器使用的是满递减的模型,栈指针是向下增长的。处理器启动后,SP被设置为栈存储空间的最后的位置,也就是最低位置,PUSH时,SP指针首先减小,然后将数据压入栈中。POP的时候相反,先将当前SP所指的数据出栈,然后再修改SP,SP此时增大。可用下面两幅图加以理解,

PUSH操作栈空间寄存器0x123456780x999999990x12345678R13(SP)R13(SP)

POP操作栈空间0x99999999R13(SP)R13(SP)寄存器0x12345678

栈中主要用于:

· 存储局部变量

· 异常产生时保存处理器状态(LR、xPSR)和寄存器数值 · 函数调用时

2.4复位和复位流程

对于典型的Cortex-M处理器,复位类型有三种:

· 上电复位。复位微控制器中所有部分。

· 系统复位。只会复位处理器和外设,不包括处理的调试支持部件 · 处理器复位。只复位处理器。

在复位后以及处理器开始执行程序前,处理器会从存储器中读出头两个字节。第一个字表示主栈指针的初始值。第二个字代表复位处理起始地址的复位向量。处理器读出这两个自己后,就会将这些数值赋给MSP和PC。

读地址0x00000000取MSP初始值读地址0x00000004取复位向量读取复位向量表示的地址复位取第一条指令时间 之前在栈存储时讲到过,Cortex-M处理器的栈操作时基于满递减的,所以SP的初始值应该设置在栈顶的位置。例如,若存储器区域为0x20007C000~0x20007FFF(1KB),初始的栈指针就应该为0x20008000。 另外,对于Cortex-M处理器,向量表中向量地址的最低位应该为1,以代表他们为Thumb状态。对于下图中的例子,复位向量为0x101,而启动代码是从0