先说一个概念,内存映射。
有些体系结构的CPU(PowerPC、m68k、arm等)通常只实现一个物理地址空间(RAM)。在这种情况下,外设 I/O端口的物理地址就被映射到CPU的单一物理地址空间中,而成为存储空间的一部分。此时,CPU可以象访问一个内存单元那样访问外设I/O端口,而不需要 设立专门的外设I/O指令。
简而言之,可以这样理解,要访问某个I/O ,只需要访问物理地址空间就可以做到了,访问寄存器也如此。
一、访问某个引脚I/o口
首先配置这个引脚的特性,通过配置寄存器,确定引脚特性,如输入、输出、双向、中断.....等,接着就可以往相应的引脚去写、读操作。
例子:
#define GPBCON (*(volatile unsigned long * )0x56000010) /*对应的引脚配置寄存器,*/
#define GPBDAT (*(volatile unsigned long * )0x56000014) /*对应的引脚内容寄存器*/
#define GPB5_out (1<<(5*2))
GPBCON = GPB5_out //访问引脚配置寄存器物理地址空间,设置引脚为输出
GPBDAT &=~(1<<5)