单片机外设(ram、寄存器)地址详解

外设与内设

在学习汇编语言时,我们会接触到一些寄存器,比如R0、R1、还有栈指针寄存器SP、下一条指令寄存器PC 等等。这些寄存器是存在于内核(如CPU)之内的,这些寄存器是我们无法通过c语言访问到的,而只能用汇编语言操作。因此区别于可以用C语言访问的外部寄存器,这些寄存器可以称之为内部寄存器。

汇编语言的强大之处便在于其不但可以访问内部寄存器,还可以读写外部寄存器。因此在单片机的引导程序建立了c语言的运行环境之后,便可以通过c语言指针的方式访问外部寄存器。在内核之外的所有设备都是通过总线连接到内核(CPU)上的,通过对总线寻址,加上外设的偏移地址后便可以准确地访问到相关的寄存器。

我们可以把内存也看作是外部寄存器,区别只是它是连续的一片存储单元,因此具有连续的一片地址。但本质上两者是一样的,都是通过总线地址访问的。

下面首先转载别人的一篇博客说明单片机外部寄存器的地址映射,在之后转载一篇讲解单片机总线结构的博客,如果对总线不清楚的可以先看看后一篇博客。这里需要补充的首先是,所谓映射,实际上就是说可以用C语言指针的方式访问数据。因为在计算机中c语言指针一般访问的是内存,所以这里也就叫做了寄存器地址映射为内存地址,但本质上两者都是总线地址上的不同地址范围。

另一方面要强调的就是C语言指针的用法:

#define GPIOB_ODR_ADDRESS  0x10000
*GPIOB_ODR_ADDRESS = 

猜你喜欢

转载自blog.csdn.net/qq_45467083/article/details/103841884