第四章 什么是寄存器
目录
本章参考资料:《W55MH32_数据手册_V1.0.0》、《W55MH 32参考手册_V1.0.0》
学习本章时,配合《W55MH 32参考手册_V1.0.0》“存储器和总线架构”及“通用I/O(GPIO)”章节一起阅读,效果会更佳,特别是涉及到寄存器说明的部分。
1 什么是寄存器
我们经常说寄存器,那么什么是寄存器?这是我们本章需要讲解的内容,在学习的过程中,大家带着这个疑问好好思考下,到最后看看大家能否用一句话给寄存器下一个定义。
2 W55MH32
我们开发板中使用的芯片是100pin的W55MH32L,具体见下图。这个就是我们接下来要学习的高性能以太网单片机,它将带领我们进入嵌入式的殿堂。
芯片四周是引脚,开发板中把芯片的引脚引出来,连接到各种传感器上,然后在W55MH32L上编程(实际就是通过程序控制这些引脚输出高电平或者低电平)来控制各种传感器工作, 通过做实验的方式来学习W55MH32芯片的各个资源。开发板是一种评估板,板载资源非常丰富,引脚复用比较多, 力求在一个板子上验证芯片的全部功能。


3 芯片里面有什么
我们看到的芯片是已经封装好的成品,主要由内核和片上外设组成。若与电脑类比,内核与外设就如同电脑上的CPU与主板、内存、显卡、硬盘的关系。
W55MH32采用的是Cortex-M3内核,内核即CPU,负责在内核之外设计部件并生产整个芯片,这些内核之外的部件被称为核外外设或片上外设。 如GPIO、USART(串口)、I2C、SPI等都叫做片上外设。

芯片(这里指内核,或者叫CPU)和外设之间通过各种总线连接,其中驱动单元有4个,被动单元也有4个, 具体见图 W55MH32系统框图 。为了方便理解,我们都可以把驱动单元理解成是CPU部分,被动单元都理解成外设。 下面我们简单介绍下驱动单元和被动单元的各个部件。
3.1 ICode总线
ICode中的I表示Instruction,即指令。我们写好的程序编译之后都是一条条指令,存放在FLASH中, 内核要读取这些指令来执行程序就必须通过ICode总线,它几乎每时每刻都需要被使用,它是专门用来取指的。
3.2 驱动单元
3.2.1 DCode总线
DCode中的D表示Data,即数据,那说明这条总线是用来取数的。我们在写程序的时候,数据有常量和变量两种, 常量就是固定不变的,用C语言中的const关键字修饰,是放到内部的FLASH当中的,变量是可变的,不管是全局变量还是局部变量都放在内部的SRAM。 因为数据可以被Dcode总线和DMA总线访问,所以为了避免访问冲突,在取数的时候需要经过一个总线矩阵来仲裁,决定哪个总线在取数。
3.2.2 系统总线
系统总线主要是访问外设的寄存器,我们通常说的寄存器编程,即读写寄存器都是通过这根系统总线来完成的。
3.2.3 DMA总线
DMA总线也主要是用来传输数据,这个数据可以是在某个外设的数据寄存器,可以在SRAM,可以在内部的FLASH。 因为数据可以被Dcode总线和DMA总线访问,所以为了避免访问冲突,在取数的时候需要经过一个总线矩阵来仲裁,决定哪个总线在取数。
3.3 被动单元
3.3.1 内部的闪存存储器
内部的闪存存储器即FLASH,我们编写好的程序就放在这个地方。内核通过ICode总线来取里面的指令。
3.3.2 内部的SRAM
内部的SRAM,即我们通常说的RAM,程序的变量,堆栈等的开销都是基于内部的SRAM。内核通过DCode总线来访问它。
3.3.3 FSMC
FSMC的英文全称是Flexible static memory controller,叫灵活的静态的存储器控制器, 是W55MH32中一个很有特色的外设, 通过FSMC,我们可以扩展内存,如外部的SRAM,NANDFLASH和NORFLASH。但有一点我们要注意的是,FSMC只能扩展静态的内存, 即名称里面的S:static,不能是动态的内存,比如SDRAM就不能扩展。
3.3.4 AHB到APB的桥
从AHB总线延伸出来的两条APB2和APB1总线,上面挂载着W55MH32各种各样的特色外设。我们经常说的GPIO、串口、I2C、SPI这些外设就挂载在这两条总线上, 这个是我们学习W55MH32的重点,就是要学会编程这些外设去驱动外部的各种设备。

4 存储器映射
在W55MH32系统框图中,程序存储器、数据存储器、寄存器和输入输出端口被组织在同一个 4GB 的线性地址空间内。数据字节以小端格式存放在存储器中。一个字里的最低地址字节被认为是该字的最低有效字节,而最高地址字节是最高有效字节。可访问的存储器空间被分成 8 个主要块,每个块为 512MB。我们在编程的时候,可以通过他们的地址找到他们,然后来操作他们(通过C语言对它们进行数据的读和写)。
4.1 存储器映射
存储器本身不具有地址信息,它的地址是由芯片厂商或用户分配,给存储器分配地址的过程就称为存储器映射, 具体见图 存储器映射 。如果给存储器再分配一个地址就叫存储器重映射。

4.1.1 存储器区域功能划分
在这4GB的地址空间中,ARM已经粗线条的平均分成了8个块,每块512MB,每个块也都规定了用途,具体分类见表格 存储器功能分类 。 每个块的大小都有512MB,显然这是非常大的,芯片厂商在每个块的范围内设计各具特色的外设时并不一定都用得完,都是只用了其中的一部分而已。
| 序号 |
用途 |
地址范围 |
| Block 0 |
Code |
0x0000 0000 ~ 0x1FFF FFFF(512MB) |
| Block 1 |
SRAM |
0x2000 0000 ~ 0x3FFF FFFF(512MB) |
| Block 2 |
片上外设 |
0x4000 0000 ~ 0x5FFF FFFF(512MB) |
| Block 3 |
FSMC 的 bank1 ~ bank2 |
0x6000 0000 ~ 0x7FFF FFFF(512MB) |
| Block 4 |
FSMC 的 bank3 ~ bank4 |
0x8000 0000 ~ 0x9FFF FFFF(512MB) |
| Block 5 |
FSMC 寄存器 |
0xA000 0000 ~ 0xCFFF FFFF(512MB) |
| Block 6 |
没有使用 |
0xD000 0000 ~ 0xDFFF FFFF(512MB) |
| Block 7 |
Cortex-M3 内部外设 |
0xE000 0 |

最低0.47元/天 解锁文章
1469

被折叠的 条评论
为什么被折叠?



