ARM's architecture CPU access peripheral
来源:互联网 发布:java命令行传参数 编辑:程序博客网 时间:2024/06/05 10:43
from:http://blog.chinaunix.net/space.php?uid=20587912&do=blog&id=405211
在嵌入式编程里,特别是32bit CPU里,各种各样五花八门的动作是CPU通过对外设的驱动来完成的.因为底层编程大部分工作就是外设编程。
CPU本身几乎每一种外设都是通过读写设备上的寄存器来进行操作的。外设寄存器也称为“I/O端口”,通常包括:控制寄存器、状态寄存器和数据寄存器三大类,而且一个外设的寄存器通常被连续地编址。注意,这里的外设是相对于CPU来讲的,比如S3C2440除了ARM920T的内核以外,还在同一块CPU里集成很多模块,这一些模块也称为外设。
CPU对外设IO端口物理地址的编址方式 有两种:一种是I/O映射方式(I/O-mapped)称为端口映射,另一种是存储空间映射方式(Memory-mapped),称为内存映射。而具体采用哪一种则取决于CPU的体系结构。
内存映射
有些体系结构的CPU(如,PowerPC、m68k等)通常只实现一个物理地址空间(RAM)。在这种情况下,外设 I/O端口的物理地址就被映射到CPU的单一物理地址空间中,而成为存储空间的一部分。此时,CPU可以象访问一个内存单元那样访问外设I/O端口,而不需要 设立专门的外设I/O指令。这就是所谓的“存储空间映射方式”(Memory-mapped)。ARM体系的CPU均采用这一模式.
简而言之,就是内存(一般是SDRAM)与外设寄存器统一编址。
端口映射
而另外一些体系结构的CPU(典型地如X86)则为外设专门实现了一个单独地地址空间,称为“I/O地址空间”或者“I/O端口空间”。这是一个 与CPU地RAM物理地址空间不同的地址空间,所有外设的I/O端口均在这一空间中进行编址。CPU通过设立专门的I/O指令(如X86的IN和OUT指 令)来访问这一空间中的地址单元(也即 I/O端口)。这就是所谓的“I/O映射方式”(I/O-mapped)。与RAM物理地址空间相比,I/O地址空间通常都比较小,如x86 CPU的I/O空间就只有64KB(0-0xffff)。这是“I/O映射方式”的一个主要缺点。而且必须要专门的汇编语言才能处理.
内存映射模式下,对寄存器的访问就是某一个地址的操作,因此C语言的指针即可完成此操作。这样编程相当方便。
Linux 最早是在在X86运行,对硬件地址采用端口映射,后来又扩展到ARM之类运行.为了简化操作,Linux在所以CPU上都采用I/O端口概念.如果是象ARM这样内存映射.也被模拟成端口.
SOC的外设地址编址
-----------------------------------------------------------------------------------------------
对于S3C2440/S3C6410这种集成很多外设模块的SOC来说,外设的地址编址分成两种类型。
一种是CPU内部集成的外设,这里物理地址是固定的。这个查CPU的DataSheet即可知道。
另外一种是物理上与CPU分离的IC,如Nor Flash,SDRAM网络控制器,它们通过片选信号来确定自己的物理地址.
还有一类IC的不直接映射到物理空间之上。这一类往往通过相应寄存器来间接控制。不在此讨论之列
内部模块固定地址
比如S3C2440内部模块地址
- ARM's architecture CPU access peripheral
- ARM概念梳理:Architecture, Core, CPU,SOC
- ARM概念梳理:Architecture, Core, CPU,SOC
- ST7 Peripheral User`s Manual
- arch/arm/cpu/armv8/transition.S
- Memory access ordering part 3 - memory access ordering in the ARM Architecture
- national unified cpu architecture
- The ARM Architecture
- Facebook’s architecture(转)
- .NET Data Access Architecture Guide
- .NET Data Access Architecture Guide
- A Common Data Access Architecture
- Alignment trap: in ARM architecture .
- ARM SMMUv3 architecture in linux
- The ARM University Program, ARM Architecture Fundamentals
- 在arch/arm/cpu/armv7/start.S中添加点灯程序
- Subversion's architecture 工作设计图
- What is Facebook's architecture?
- 利用Android手机的蓝牙控制电灯
- python 3.2的学习
- 机房收费系统( 用例图、类图)
- SDL 1.2.14在windows平台下的编译及例子
- 乱码的解决方法
- ARM's architecture CPU access peripheral
- ASP、JSP、PHP 三种技术比较
- Android文件系统深入剖析
- linux下socket编程
- Android游戏开发之横竖屏的切换
- android文件系统制作教程
- 写在算法应用系列之前
- 使用SharedPreference进行文件操作
- Applet虽签名,但是Runtime.getRuntime().exec(cmd)异常:java.security.AccessControlException: access deni