




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、在嵌入式编程里,特别是32bit CPU里,各种各样五花八门的动作是CPU通过对外设的驱动来完成的.因为底层编程大部分工作就是外设编程。 CPU本身几乎每一种外设都是通过读写设备上的寄存器来进行操作的。外设寄存器也称为“I/O端口”,通常包括:控制寄存器、状态寄存器和数据寄存器三大类,而且一个外设的寄存器通常被连续地编址。注意,这里的外设是相对于CPU来讲的,比如S3C2440除了ARM920T的内核以外,还在同一块CPU里集成很多模块,这一些模块也称为外设。CPU对外设IO端口物理地址的编址方式 有两种:一种是I/O映射方式(I/Omapped)称为端口映射,另一种是存储空间映射方式(Mem
2、orymapped),称为内存映射。而具体采用哪一种则取决于CPU的体系结构。内存映射有些体系结构的CPU(如,PowerPC、m68k等)通常只实现一个物理地址空间(RAM)。在这种情况下,外设 I/O端口的物理地址就被映射到CPU的单一物理地址空间中,而成为存储空间的一部分。此时,CPU可以象访问一个内存单元那样访问外设I/O端口,而不需要 设立专门的外设I/O指令。这就是所谓的“存储空间映射方式”(Memorymapped)。ARM体系的CPU均采用这一模式.简而言之,就是内存(一般是SDRAM)与外设寄存器统一编址。端口映射而另外一些体系结构的CPU(典型地如X86)则为外设专门实现了
3、一个单独地地址空间,称为“I/O地址空间”或者“I/O端口空间”。这是一个 与CPU地RAM物理地址空间不同的地址空间,所有外设的I/O端口均在这一空间中进行编址。CPU通过设立专门的I/O指令(如X86的IN和OUT指 令)来访问这一空间中的地址单元(也即 I/O端口)。这就是所谓的“I/O映射方式”(I/Omapped)。与RAM物理地址空间相比,I/O地址空间通常都比较小,如x86 CPU的I/O空间就只有64KB(00xffff)。这是“I/O映射方式”的一个主要缺点。而且必须要专门的汇编语言才能处理.内存映射模式下,对寄存器的访问就是某一个地址的操作,因此C语言的指针即可完成此操作。
4、这样编程相当方便。Linux 最早是在在X86运行,对硬件地址采用端口映射,后来又扩展到ARM之类运行.为了简化操作,Linux在所以CPU上都采用I/O端口概念.如果是象ARM这样内存映射.也被模拟成端口.SOC的外设地址编址-对于S3C2440/S3C6410这种集成很多外设模块的SOC来说,外设的地址编址分成两种类型。一种是CPU内部集成的外设,这里物理地址是固定的。这个查CPU的DataSheet即可知道。另外一种是物理上与CPU分离的IC,如Nor Flash,SDRAM网络控制器,它们通过片选信号来确定自己的物理地址.还有一类IC的不直接映射到物理空间之上。这一类往往通过相应寄存器
5、来间接控制。不在此讨论之列内部模块固定地址比如S3C2440内部模块地址S3C6410的映射地址 外部模块地址分配在CPU上都会引出多个片选线。每一个片选线表示对应一个固定的地址范围,在术语上称为(Bank).以S3C2440为例,参见如下对应关系在硬件设计上,第一片的SDRAM的片选线接在nGCS36上,参考上表,这片SDRAM的物理地理就是0x30000000.DM9000的网络控制接在nGCS3这个硬件联线上,这样网络处理器的硬件地址起始地址在0x18000000.以S3C6410为为例,它的第一步选是片选线nGCS3,SDRAM的起始地址是0x5000000之上.软件如何读写外设-在内
6、存映射模式下。对于外设的访问实际就是对内存地址的访问.在C语言里,即指针操作。为了增加阅读性,往往采用如下的宏定义.#define rGPGCON (*(volatile unsigned *)0x56000060)/Port G control 这个宏定义非常之复杂,所以我经常用如下五个问题来问学生或者来面试讲师的人。1.为什么要用绝对地址,地址怎么来的?2. unsigned *表示什么? 3.为什么要用unsigned? 4.最左边的*表示什么?5. volatile表示什么含意?6.完成同样一个功能,在不同字节序下,设置的寄存器的数字是不是一样?第一个问题比较好答.内存映射模式是直接内
7、存访问。编址的来源看上两节 2. unsigned *表示什么? unsigned int 缩写, unsigned *表示取后面四个byte空间的宽度, 同理还有(*(volatile unsigned short *)0x56000060) 表示取后面两个字节空间。 3.为什么要用unsigned? 禁止算术移位,采用逻辑移位.因为嵌入式编程大量采用移位操作。如果用带符号,会形成算术移位,即最高位符号不参与移位,这是错误操作。 4.第一*表示什么? 表取指针指向空间.*(unsigned *) 上述表达式相当如下代码的简写, int val; int * p = &val; *p = 0x
8、100000;5.volatile表示什么含意? 其中volatile 是C的保留字,表禁止编译器对变量访问优化. 即源码中有多少读写操作,编译后生产多少机器操作指令.否则如下代码,将不产生指令 int a; a+ ; a- ;但是在硬件编程中,一次操作都可能表示特定含意.如果省略,往往出错。6.完成同样一个功能,在不同字节序下,设置的寄存器的数字是不是一样? 不一样,小端字节序是与手册相同顺序,即个数位表示第0位。大端字节序正好相反.基本操作向寄存器赋值 rGPBCON = 0x1000;向寄存器取值 unsigned int val =rGPBCON;位操作-置位操作把第0位置1rGPGC
9、ON | = 0x1;把第3位置1 rGPGCON |= 0x8;把第n位置1 rGPGCON |= (0x1 n);把第12,13位分别置1 rGPGON|= (0x3) 12;把第10,15位分别置1 rGPGON | = ( 0x01 10 ) | (0x01 15) ;把(0x0 n)表示什么含意? rGPGON = (0x01 2) | (0x0 1) | (0x0 0);表示占位,对应位是默认值不变.位操作-清位操作 把第1位清0 rGPGCON &= (0x1);第3位清洗0 rGPGCON &= (0x8);第n位清0 rGPGCON &= (0x1 n);第12,13清0 rGPGCON &= (0x3 12);第10,15位清0 rGPGCON &= (0
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 新质生产力绿色出行
- 血管周细胞瘤的临床护理
- 2025典当借款合同范本C
- 沈阳高一数学试卷及答案
- 商品学期末试卷及答案
- 2025装饰装修劳务分包合同(正式)
- 智能设备用户体验设计考核试卷
- 玉米加工与农产品精深加工考核试卷
- 浙江国企招聘2025上半年嘉兴市属国有企业招聘97人笔试参考题库附带答案详解
- 纺织设备电气控制技术考核试卷
- 2024年武汉市中考物理试卷真题解读及答案解析(精校打印)
- DB51-T 5071-2011 蒸压加气混凝土砌块墙体自保温工程技术规程
- Elephant'sfriends绘本阅读(课件)人教PEP版英语三年级上册
- AQ6111-2023个体防护装备安全管理规范
- 多发性骨髓瘤肾损伤诊治指南(2024版)
- 2024年中考数学反比例函数-选择题(压轴)(试题)
- 2024-2030年中国吸脂器行业现状动态与需求趋势预测研究报告
- 【渠道视角下伊利股份营运资金管理存在的问题及优化建议探析9000字(论文)】
- 患者呼吸心跳骤停的应急预案
- (正式版)JBT 9229-2024 剪叉式升降工作平台
- 《青蒿素人类征服疾病的一小步》《一名物理学家的教育历程》联读课件高中语文必修下册
评论
0/150
提交评论