今日学习DMA,需求传递地址,我想从串口传到寄存器来点亮led灯,仅仅学习一下DMA的原理,首要阐明一点的是程序还很烂,没有做成功。其间发现了一个问题,便是寄存器的地址#define rGPBCON (*(volatile unsigned *)0x56000010)我看了这个的时分,究竟这是界说的一个什么呢?上网搜了一下,总结一下。
1.首要这是界说的一个变量,这一点要十分理解,由于rGPBCON便是一个寄存器变量,咱们能够给他赋值对他读写操作,这是一个变量,而不是一个指针或许地址。
2.这是一个地址固定的变量,曾经分配的变量地址是随机的,但这儿的地址是固定的,便是0x56000010。
3.#define rGPBCON (*(volatile unsigned *)0x56000010)宏界说的进程,首要把0x56000010这个物理地址强制转换为指针变量
(volatile unsigned *)0x56000010 这便是一个指针变量。然后再用*符号对指针变量操作相当于*p是一个变量。其间由于这儿是寄存器映射到内存是虚地址,所以需求用关键字volatile写回,而不是读缓冲器中的值。
4. 关于rGPBCON这个特别寄存器究竟有没有这样一个寄存器?
这个我一向很利诱,直到今日,我才理解,其实没有这样一个寄存器,这个寄存器是0x56000010开端的四个字节的内存地址的别号,rGPBCON是占用内存的,而不存在IO空间或许说IO寄存器。由于ARM底子久没有IO空间,直接映射到内存空间。