嵌入式开发系列003-系统存储结构

一、芯片设备布局

 上图是单片机内部框架,其中cortex内核以及debug系统是由arm公司设计的,剩下的都是由半导体芯片厂商自行根据需求设计,我们日常的开发设计主要就是控制这些外设。

依据外设的重要程度和难度,通过四象限分布图示如上。我们把这些外设熟悉了,单片机的基础也基本学完了。可以看出中断、时钟很难也很重要,而看门狗和DAC是SOC内部软硬件往往基本实现,所以先对容易配置一点。

 二、系统地址分配

芯片会配有对应的芯片手册,否则我们对集成芯片无从下手。拿STM32f103 Z8T6数据手册来说,存储结构分布图如下图。它的地址是从0X00000000~0XFFFFFFFF,一共4GB,也就是我们32位cpu能访问的地址范围。

0x0000.0000~0x1fff.fffff范围内,有一块我们可以访问,

其中0x0800.0000~0x0801.ffff用于存放我们烧录的代码,系统上电后就是从这里读取代码来运行程序。

0x2000.0000以上的一块地址是分配给内存即SRAM使用,代码运行过程中产生的临时数据变量都存放在这里。

0x2000.0000以上的一块地址是分配给外设,包含gpio,adc,i2c,spi,usb,串口,DMA,LCD,NAND等等。

0xE000.0000~0xE010.0000这一块地址是分配给CORTEX M3内部外设寄存器地址,如中断向量表,系统滴答时钟是放在这里。

三、如何控制外设

要通过外设存储器进行控制。

gpio寄存器可以从手册上找到,如下表可以看到有7个寄存器,偏移地址分别是0x00,0x04,0x08,0x0C,0x10,0x14,0x18,每个寄存器设计的作用不一样,每个寄存器都是32bit,每个bit都有自己的意义,不过有些目前是reserved预留状态,我们不需要管它。

通过base_addr和offset可以指导具体寄存器的地址。如GPIOA对应图中地址范围是0x4001.0800~0x4001.0C00. 其中base_addr=0x4001.0800。控制pin输出高低电平的寄存器GPIOA_ODR寄存器(Port output data register)的offset=0x0c,故GPIOA_ODR寄存器地址是base_addr+offset=0x4001.0800+0x0c=0x4001.080c。

设置GPIOA_ODR的bit1就会控制GPIOA1的电平状态。

下图GPIO寄存器map介绍:

下图ODR寄存器介绍:

 [参考:百问网(www.100ask.net)]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值