在嵌入式开发中,所有芯片对外设进行处理都是通过读写设备上的寄存器进行的。外设的寄存器在内存中单独分出一部分作为特殊功能寄存器进行编址。在低级嵌入式设备中,我们通过直接操作外设寄存器即可控制外设的工作。在高级设备中,设备加载了操作系统,操作系统中的内存管理单元(MMU)对设备内存进行重新管理,从而无法直接进行操作。目前市面上,根据不同CPU体系架构,CPU对外设端口的编址方式一般有两种:IO映射方式(IO mapped)和内存映射方式(memory mapped)。
IO映射方式,主要指外设地址空间和内存地址空间是独立开的,根据不同的访问指令进行对应操作。典型的如x86处理器的设备。
图 1 IO映射方式
内存映射方式,主要指内存地址空间和外设地址空间的访问时一样的。只是访问的地址不同。典型的如RISC指令系统的嵌入式设备CPU(如ARM、PowerPC等)。
图 2 内存映射方式