




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、目录机开发篇6第一部分第 1 章S5PV210初识 ARM6ARM 处理器的应用领域6主流 ARM 处理器介绍8S5PV210 处理器介绍9A8 开发平台介绍第 2 章2.42.5第 3 章3.4第 4 章第 5 章第 6 章6.4第 7 章第 8 章8.18.2S5PV210机开发软件和驱动的安装11本章小结11ARM 汇编语言基础12ARM 寄存器组介绍12ARM 寻址方式13ARM 指令集14ARM 伪指令16本章小结18详
2、解 S5PV210 启动过程19S5PV210 内存地址.19S5PV210 启动模式设置20S5PV210 启动流程分析21本章小结23S5PV210 GPIO 接口实验24GPIO 硬件接口介绍24汇编点亮 LED25用C 语言和汇编混合编程点亮流水灯34按键 蜂鸣器LED 实例35实例40本章小结43S5PV210 系统时钟44S5PV210 时钟体系简述44系统时钟实例46本章小结52S5PV210 串口通信原理与应用52串口通信原理52S5PV210 UART 的功能特性53S5PV210 UART 实例56本章小结60S5PV210 中断体系结构与应用61中断的概念61S5PV21
3、0 按键中断实例62本章小结70S5PV210 定时器原理与应用71PWM 定时器的概述71PWM 定时器实例7328.3第 9 章9.4第 10 章10.4第 11 章11.5第 12 章12.4第 13 章13.4本章小结82S5PV210NAND FLASH器83FLASH 概述83S5PV210 的 NAND FLASH器90NAND FLASH 的操作实例95本章小结107S5PV210I2C 接口与应用108初识 I2C 总线108S5PV210 I2C 总线接口110
4、I2C 实例(读写 AT24C02)112本章小结122S5PV210LCD器原理与应用122LCD 简介122S5PV210 LCD器123LCD 显示实例130本章小结138S5PV210ADC 接口与应用139ADC 接口概述139ADC 转换操作140ADC 实例141本章小结147S5PV210I2S 接口与应用148初识 I2S 总线148I2S 总线数据传输148I2S 实例(wm8960 音频实例)149本章小结162第二部分第 1 章Bootloader 移植篇163初识 Bootloader1631.11.2第 2 章2.12.2第 3 章3.43.5第
5、4 章4.4初识 Bootloader163常见的 Bootloader164Bootloader 启动流程分析165Bootloader 启动的两个阶段165Bootloader 的内核调用166U-BOOT 移植准备工作168U-BOOT 简介168U-BOOT 的架构概述168U-BOOT 启动流程的源代码分析170U-BOOT 编译初体验191U-BOOT 使用195十二步教你学会移植U-BOOT211第 1 步,设置开发板的信息211第 2 步,拷贝相关开发板目录211第 3 步,修改相关文件212第 4 步,修改编译文件214
6、04.114.12第 5 章第 5 步,修改打印信息214第 6 步,修改内存信息215第 7 步,支持 DM9000 网卡216第 8 步,支持 Nand Flash220第 9 步,支持 Nand Flash 启动223第 10 步,支持 yaffs2 烧写226第 11 步, U-Boot 命令移植235第 12 步, 菜单栏的移植241Bootloader 移植篇小小小结245第三部分第 1 章第 2 章第 3 章Linux 内核移植篇246Linux 由来与版本246内核编译初体验247Linux 内核结构250第 4 章第 5
7、章内核的子系统251内核目录252管理. 253六大步教你学会移植 Linux 内核263第一步,源代码获取263第二步,修改内核265第三步,配置内核273第四步,检查串口284第五步,拷贝 uImage 制作工具(mkimage)285第六步,编译及出错处理286Linux 内核移植篇小小小结295第四部分第 1 章构建 Linux 根文件系统篇296Linux 文件系统简介291.4第 2 章2.4第 3 章3.4第 4 章文件系统与根文件系统296文件系统的类型297Linux 根文件系统目录结构297Linux
8、 文件属性298移植 BusyBox300BusyBox 的简介300获取 BusyBox 源码301四部曲移植 BusyBox302命令就是可执行程序:306构建根文件系统307构建 lib 目录307构建 dev 目录308构建 etc 目录310构建/proc、/sys 和/tmp 目录317构建 NFS 文件系统318NFS 简介318NFS 服务器的安装与配置318关闭:.31944.4第 5 章5.15.2第 6 章设置 uboot 中的关于 NFS 的参数320构建 YAFFS2 文件系统325YAFFS2 简介325作 yaffs2 映像文件:325构建 Linux 文件系统篇
9、小小小结327第五部分第 1 章Qt 编程篇328Qt 的介绍3281.11.2第 2 章2.12.2第 3 章3.1Qt 的开发工具328Qt 的版本329Qt4 开发平台的建立330编译和安装 Qt4330使用 QtCreator 进行开发336基础例程开发详解346mainwindow3465第一部分S5PV210机开发篇第1章初识 ARM1.1 ARM 处理器的应用领域1.1.1 ARM 处理器简介ARM 处理器是一种低功耗高性能 32 位 RISC(精简指令集)处理器。目前, 采用 ARM 技术知识产权(IP)核的微处理器,就是通常所说的 ARM 微处理器已遍及工业、消费类电子、通信
10、系统、网络系统、无线系统等各类市场,基于ARM 技术的微处理器应用约占据了32 位RISC 微处理器75%以上的市场份额, ARM 技术正在逐步渗入人们生活的各个方面。1.1.2ARM 处理器的应用领域在信息化程序如此高的今天,ARM 技术的应用已经渗入到了各个领域,不断的发展和革新为人们的生活带来了极大的便利。1. 无线通信、便携式式目前已有超过80%的无线通信设备采用了ARM 技术,ARM 以其高性能和低成本,在该领域的地位日益巩固。如:PAD、智能上网本、等。图 1.1 ARM图 1.2 ARM应用2. 数字消费类流行的数码相机和打印机中绝大部分采用 ARM 技术,包括中 SIM机、GP
11、S智能卡也采用 ARM 技术,类似的还有数字音频导航仪等。器、数字机顶盒、6图 1.3 数字机顶盒图 1.4 GPS 导航仪3. 网络领域随着宽带技术的发展及推广,采用 ARM 技术的有网关、路由器、以太网交换机、无线点、多服务配置平台、网络连接和固态磁盘等。图 1.5 路由器1.1.2ARM 处理器的特点ARM 处理器具有耗电少,功能强大,16 位/32 位双指令集等众多优点。主要有以下六个主要特点:体积小、低功耗,低成本和高性能;支持 Thumb(16 位)/ARM(32 位)双指令集; 大量使用寄存器,指令执行速度快;大多数数据操作都在寄存器中完成; 寻址方式灵活简单,执行效率高; 指令
12、长度固定。71.2 主流 ARM 处理器介绍1.2.1 ARM 处理器系列ARM 处理器系列有很多,如:ARM7、ARM9、ARM9E、ARM10E、ARM11、Cortex 系列等,目前仍在不断发展。图 1.6 ARM 不同系列处理器性能之间关系1.2.2 ARM 体系结构名ARM 主要有七种指令集体系结构,v1v3 版本,v4T 版本,v5 版本,v6 版本,v7 版本。ARM通常以 ARM【x】【y】【z】【T】【D】【M】【I】【E】【J】【F】【S】形式出现,这些后缀了可以组合,含义如下:x:y:z:T:D:M:I:E:J:F:系列号,如 ARM9、ARM11 等; 管理/保护单元;
13、拥有 Cache;表示支持 16 位 Thumb 压缩指令集; 表示支持片上调试(Debug);表示内嵌硬件乘法器(Multiplier); 支持片上断点和调试点;增强指令(基于 TDMI);支持 Jazelle,即 Java;支持向量浮点单元; S:表示式(full synthesizable)。81.3 S5PV210 处理器介绍1.3.1 S5PV210 处理器概述Cortex A8 处理器给消费和低功耗移动带来了的,使得最终用户可以享受到更高水准的和创新。全新的 ARM Cortex-A8 处理器及其背后提供支持的技术为家庭和市场带来了前所未有的性能和功耗水平,同时也将为消费者带来具有
14、丰富应用的创新设备。Cortex-A8 处理器是第一款基于下一代 ARMv7 架构的应用处理器。其中S5PV210 是大名鼎鼎的三星公司推出的一款适用于智能和平板电脑等多媒体设备的应用处理器,具有完整的应用兼容性,支持传统的 ARM、Thumb 指令集和新增的高性能紧凑型 Thumb-2 指令集。1.3.2 Cortex-A8 处理器的优势高性能,Cortex-A8,在 600MHz1GHz 的频率下,提供的性能超过 2000DMIPS。移动 Internet 的理想选择,低功耗设计,支持全天浏览和连接。多核技术,单核到四核实现,支持面向性能的应用领域。高级扩展,兼容 ARM 和 Thumb
15、体系结构外,提供 Thumb-2 提供最佳代码大小和性能,TrustZone 安全扩展,提供度。计算,Jazelle 技术提高执行环境速91.4A8 开发平台介绍l处理器采用基于 ARM CortexA8 架构的 S5PV210,主频高达 1GHz能支持多种操作系统,如:Linux、Andriod 和 WinCE 等操作系统。l开发环境主要是 RedHat 的 Linux 操作系统和SecureCRT 串口调试工具,开发方便,使用简单。l内存模块由 4 片 128MB DDR2 程序也能在平台上运行顺畅。组成,总容量达 512MB,使规模较大的项目l器采用 512MB 的 SLC NandFl
16、ash ,具有 ECC 校验功能,大大减少了数据读写的出错率。l人机交互模块选用 7 寸电容式触摸屏 24bpp,分辨率:800 × 480,支持五点触摸,用户能清晰实时地查看图像、数据,和通过点击触摸屏平台, 为开发工业类和消费类项目提供了便利。l模块采用标准排针拔插式设计,底板或板均可拔插更换, 底板的预留接口有、Camera 和四个串口,可供用户设计板、底板或加入相应功能模块,用于二次开发及科研创新和竞赛,同时便于后续升级和维护;平台集成了 WM8960 音频模块、DM9000 网络通信模块、SD 卡传输电路、串口l通信电路、usb 通信电路、8 个按键和蜂鸣器等外设,丰富。l
17、程序方式:可在已烧写开发套件提供的 uboot 的基础下,通过 usb 烧写10的程序,操作方便,烧写速度快,加快开发进度。l国内首创物联网接口。通过配套的物联网盒子可以与 RFID、ZigBee、蓝牙、WIFI 等任意物联网平台进行数据传输。通用性极强。1.5 S5PV210机开发软件和驱动的安装机开发的软件主要有 Source Insight,NotePad+,UltraEdit,编译环境在 Linux 红帽虚拟机上。有关软件的安装请参考里面有详细的安装与使用步骤哟 O(_)OA8 开发平台使用,1.6本章小结本章主要简单介绍了 ARM 处理器的特点和应用领域,读者可以从中初步认识到 AR
18、M 处理器是如此的强大,可望而不可及的感觉,有木有_。是不是很渴望开始学习ARM 呢?比起以前学习过的51 单片机迷人多了吧,如果您有这个想法,请您继续往下读,跟着实验指导书一步一步走,我相信的将来,您将是一个杰出的工程师。11第2章ARM 汇编语言基础2.1ARM 寄存器组介绍ARM 处理器一般共有 37 个寄存器,其中包括:(1)31 个通用寄存器,包括 PC(程序计数器)在内,都是 32 位的寄存器。(2)6 个状态寄存器,都是 32 位的寄存器。ARM 处理器共有 7 种不同的处理器模式,用户模式(User),快速中断模式(FIQ),普通中断模式(IRQ),管理模式(Svc),数据中止
19、模式(Abort),未定义指令中止模式(Und),系统模式(Sys),在每一种处理器模式中有一组相应的寄存器。在任意一种处理器模式下,可见的寄存器包括 15 个通用寄存器(R0R14)、一个或者二个状态寄存器以及程序计数器(PC)。在所有的寄存器中,有些是各模式共用同一个物理寄存器,有些寄存器是各个模式理寄存器。拥有的物图 2.1 ARM 各处理器模式下的寄存器其中 r0r3 主要用于子程序间传递参数,r4r11 主要用于保存局部变量,但在 Thumb 程序中,通常只能使用 r4r7 来保存局部变量;r12 用作子程序间scratch 寄存器,即 ip 寄存器;r13 通常用做栈指针,即 sp
20、;r14 寄存器又被称为连接寄存器(lr),用于保存子程序的返回地址;r15 用作程序计数器(pc),12由于 ARM 采用了流水线机制,当正确了 PC 的值后,该值为当前指令地址加8 个字节,即 PC 指向当前指令的下两条指令地址。2.2 ARM 寻址方式2.2.1 立即寻址例:以上两条指令,第二个源操作数为立即数,要求以“#”为前缀,对于十六进制数需在紧跟“#”后加上“0x”。注意:在汇编语言中“;”后面表示注释,以后出现都是如此,故不再详述。2.2.2 寄存器寻址例:将寄存器 R1 和R2 存放的内容相加,结果存放在寄存器 R0 中。2.2.3 寄存器间接寻址例:第一条指令,将 R1 的
21、值作为地址,取出条指令,将 R0 的数据到R1 的值为地址的器中的数据传送到 R0 中;第二器里面。2.2.4 多寄存器寻址例:这种寻址方式可以用一条指令完成传送最多 16 个通用寄存器的值。指令中的后缀 IA 表示在每次执行完加载/操作后,R0 按字长增加。上面二条指令中,前者表示读出以 R0 的值为地址里面的内容赋给 R1、读出R0+4 的值为地址里面的内容赋给 R2、依次类推;后者表示将 R3R5、R10 的数据保存到 R0 指向的地址,R0 的地址按字长增加。13LDMIA R0, R1,R2,R3,R4;R1 <- R0,R2 <- R0 + 4,;R3 <- R0
22、 +8,R3 <- R0 + 12 STMIA R0, R3-R5,R10;R0 <- R3,R0 + 4 <- R4;R0 + 8 <- R5,R5 + 12 <- R10LDR R0, R1;R0 <- R1STR R0, R1;R1 <- R0ADD R0, R1, R2;R0 <- R1 + R2ADD R0, R0, #0x1;R0 <- R0 + 1ADD R0,R0, #0x3f;R0 <- R0 + 0x3f2.3 ARM 指令集2.3.1 ARM 汇编指令的格式格式:<opcode><cond>
23、;SRd,Rn,operand2<opcode>:<cond>:S:Rd:Rn:operand2:指令操作符编码,如 LDR、STR 等。指令执行的条件编码,如 EQ、NE 等。决定指令的执行是否影响 CPRS 的值。目标寄存器编码。包含第一个源操作数的寄存器编码。第二个操作数。条件码是在 ARM 指令执行之前进行的,只有符合条件,ARM 指令才执行。图 2.2 ARM 指令的条件码表2.3.2 跳转指令跳转指令用于实现程序流程的跳转,在 ARM 程序中有两种方法可以实现程序流程的跳转: 使用专门的跳转指令。 直接向程序计数器 PC 写入跳转地址值。ARM 汇编中总共有
24、四种跳转指令,如下: B 跳转指令(注:只能跳转前后 32MB 的地址空间)B 指令编码中的跳转地址值是相对当前 PC 的一个偏移量,经汇编器计算得到跳转的绝对地址。 BL 带返回的跳转指令,BL 指令在执行跳转的同时将转移指令的下一条指令的14地址到当前处理器模式下的返回。 BLX 带返回和状态切换的跳转指令 BX 带状态切换的跳转指令地址 LR 中,这一般用于子程序的调用和2.3.3 数据处理指令数据处理指令分类: 例:数据传送指令 例:比较指令 例:算数运算指令 逻辑运算指令例:2.3.4 乘法指令例:2.3.5 加载/指令ARM 处理器支持 加载/指令用于在寄存器和器之间传送数据15M
25、UL R0, R1, R2;R0 = R1 * R2ADD R0,R0, #3;该指令保持 R0 的 0、1 位,其余位清零。ORR R0,R0, #3;该指令置 R0 的 0、1 位为 1,其余位保持不变。BIC R0, R0, #0xf8;该指令清除 R0 的高 5 位,其余位保持不变。ADD R0, R1, #256;R0 = R1 + 256SUB R0, R1, R2;R0 = R1 R2RSB R0, R2, R3, LSL #1;R0 = (R3 << 1) R2CMP R1,#100;将寄存器 R1 的值与立即数 100 相减,并根据结果设置 CPSR 的标志位。T
26、ST R1,#0xfffe;将寄存器 R1 的值与立即数 0xfffe 按位与,并根据结果设置 CPSR 的标志位。MOV R1,R0;将寄存器 R0 的值传送到寄存器 R1MOV R1,R0,LSL #3;将寄存器 R0 的值左移 3 位后传送到 R1例:2.3.6 程序状态寄存器指令 例:MSR 通用寄存器到程序状态寄存器的数据传送指令MRS 程序状态寄存器到通用寄存器的数据传送指令2.4ARM 伪指令伪操作是 ARM 汇编语言源程序里的一些特殊指令助记符,作用主要是为完成汇编程序做各种准备工作,在源程序进行汇编时由汇编程序处理,而不是在程序运行期间由 CPU 执行,这些伪操作只在汇编过程
27、中起作用,当汇编结束,伪指令的使命也就随之结束。2.4.1 符号定义伪指令符号定义伪操作主要用于 ARM 汇编程序中定义变量,对变量赋值以及定义寄存器的别名等操作。常见的符号定义伪操作有如下几种: 例:用于定义全局变量的 GBLA、GBLL 以及 GBLS。用于定义局部变量的 LCLA、LCLL 以及 LCLS。用于对变量赋值的 SETA、SETL 以及 SETS。为一个协处理器定义名称用 CP。为一个通用寄存器列表定义别名用 RLIST。16GBLATEST;定义一个全局的数字变量,变量名为 TESTTESTSETA 0x55;将该变量赋值为 0x55LCLSSTRING;定义一个局部的字符
28、串变量,变量名为 STRING STRING SETS “Webee210”;将该变量赋值为” Webee210”List RLISTR0-R3;用 List 表示 R0R3 寄存器MSR CPSR, R0;传送 R0 的内容到 CPSR 寄存器MRSR0, CPSR;传送 CPSR 的内容到 R0 寄存器LDR R0, R1,R2;将器地址为 R1+R2 的字数据读入寄存器 R0 LDR R0, R1,R2!;将器地址为 R1+R2 的字数据读入寄存 R0并将新地址 R1+R2 写入 R1STR R0,R1 , #8;将 R0 中的字数据写入以 R1 为地址的器中,并将新地址 R1+8 写入
29、 R1STR R0,R1,#8;将 R0 中的字数据写入以 R1+8 为地址的器中2.4.2 数据定义伪指令数据定义伪操作一般用于特定的数据分配单元,同时可完成已匹配单元的初始化。常见的数据定义伪操作有如下几种:DCB/W/D用于分配一片连续字节单元并用指定的数据初始化,其中 B表示 byte,W 表示半字(word),D 表示字长(double),在 ARM 处理器里即 4个字节。MAP 用于定义一个结构化的内存表首地址,与 FIELD 配合使用。FIELD 用于定义一个结构化的内存表的数据域。例:2.4.3 宏定义伪指令MACRO 和 MEND 伪操作用于宏定义。MACRO 标识宏定义的开
30、始,MEND 标识宏定义的结束。用 MACRO 和 MEND 定义的一段代码,称为宏定义体,这样在程序中就可以通过宏定操作多次调用该代码段,可以使用 MEXIT 例:宏定义。2.4.4 其他常见的伪指令AREA ALIGN-用于定义一个代码段或数据段通过添加填充字节的方式,使当前位置满足一定的对齐方式CODE16/32 -通知编译器,其后的指令序列为 16 位的 Thumb 指令或为32 位的 ARM 指令。ENTRY-指定汇编程序的,一个源文件中最多只有一个 ENTRY,一个程序中至少有一个 ENTRY。通知编译器已经到了源程序的结尾,每个源程序包含一个 END 为程序中的数字常量、标号等定
31、义一个等效的字符名称,类似END EQU-17MACROCSI_SETB;宏名为 CSI_SETB,无参数LDRR0,=rPDATG;GPG0 口的值LDRR1, R0;将读到 GPG0 口的值赋给 R1ORRR1,R1, #0x01;将 R1 的第 0 位置 1,STRR1, R0;输出结果MENDStrDCB “Webee210” ;分配一片连续的字节单元并初始化为“Webee210”。Data DCW1,2,3,4;分配一片连续的半字单元并初始化为相应值。MAP 0x2000;定义结构化内存表首地址的值为 0x2000A FIELD 16;定义A 的长度为 16 字节,位置为 0x200
32、0B FIELD 32;定义B 的长度为 32 字节,位置为 0x2010S FIELD 128;定义S 的长度为 128 字节,位置为 0x2030于C 语言中的#define。EXPOR用于在程序中一个全局标号,该标号可在其他文件中。IMPORT用于通知编译器要使用一个在其他源文件中定义的标号。INCLUDE -用于将一个源文件包含到当前的源文件中。2.5本章小结本章主要讲解了 ARM 汇编语言中常见的各种语法,首先介绍了 ARM 寄存器组, 让读者先有个初步认识,接着讲解了 ARM 寻址方式、ARM 指令集、ARM 伪指令, 读者可以通过这 4 个小节了解到 ARM 汇编语言的简洁、高效
33、性,学过 DSP 的读者就会知道,相比起 DSP 内核汇编语言来说简直就是太简单了_。当然 ARM 汇编语言不仅仅有以上介绍的指令,但如果能熟悉掌握本章介绍的指令,那么阅读ARM 汇编程序绝对不是问题,毕竟 ARM 程序主要还是使用C 语言开发滴,有木有_。实际上在 ARM 上所用到的汇编程序就只有u-boot 的 start.S 等文件,还有内核的 head.S 等文件,读者要能结合本章知识点去阅读这些文件,难度肯定会降低很多。18第3章详解 S5PV210 启动过程3.1S5PV210 内存地址图 3.1 S5PV210 的 04G 地址空间图图 3.2 设备地址空间19由上面二个图可知,
34、S5PV210 含有一个大小为 64KB 的 IROM,起始地址为0xD0000000,结束地址为 0xD000FFFF;含有一个大小为 96KB 的 IRAM,起始地址为 0xD0020000,结束地址为 0xD0037FFF;内存起始地址为 0x20000000,有二个内存块,DRAM0 和 DRAM1 大小分别为 512MB、1024MB。3.2S5PV210 启动模式设置图 3.3 S5PV210 启动模式管脚设置20由上图可知,当 OM5:0 = 001100B 时,启动方式为 SDBOOT;当 OM5:0 =000010B 时,启动方式为 NAND 2KB8bitECC。3.3S5
35、PV210 启动流程分析根据三星公司的S5PV210_UM_REV1.1手册可知,S5PV210 启动过程主要可分为 3 个阶段。S5PV210 上电复位后将从 IROM 处执行已在 BL0 里初始化过程中对启动设备进行16KB ) 到 IRAM 处, 即刚才所说的的启动代码BL0,并从启动设备拷贝 BL1(最大0xD0020000 开始的地址, 其中 0xD00200000xD0020010 的 16 字节为 BL1 的校验信息和 BL1,并对 BL1进行校验,校验通过转入 BL1 进行执行,BL1 继续初始化,并拷贝 BL2(最大80KB)到 IRAM 中并对其校验,通过后转入 BL2。B
36、L2 完成一些比较复杂的初始化,包括 DRAM 的初始化,完成后将 OS 代码拷贝到 DRAM 中,并跳到OS 中执行并完成启动引导。图 3.4 启动过程示意图代码主要完成以下初始化:关闭看门狗; 初始化icache; 初始化栈;初始化堆;初始化块设备拷贝功能; 设置系统时钟;拷贝 BL1 到 iRAM;BL021 检查 BL1 的校验和,如果失败则第二启动模式(安全启动模式),校验则跳到 0xD0020000(IRAM)处执行。其中 0xD0020000 0xD0020010 里的 16 字节头部信息是什么呢?这 16 字节信息用户是不能随便设置的!在S5PV210_iROM_Applica
37、tionNote_Preliminary_20091126 文档中规定16 字节的头部信息必须为:校验和的计算方法:count dataLength buffer CheckSum:是一个循环索引变量BL1 的大小,以字节为从 BL1 里读一个 1 字节的数据BL1 的校验总和如何生成 16byte 的头部信息?在从启动设备(如:NAND FLASH / SD 卡)拷贝 BL1 的前 16K 数据到 IRAM 时,这 16K 数据中的前 16byte 中保存了校验和的值以及 BL1 的大小,在拷贝过程中 CPU 会计算出当前 bin 文件中含1的个数,然后与校验和进行比较,如果二者相等则继续运
38、行程序,否则,不执行。22for(count = 0;count < dataLength; count+)buffer = (*(volatile u8*)(uBLAddr + count); CheckSum = CheckSum + buffer;地址内容0xD002_0000BL1 的大小0xD002_0004必须写为 00xD002_0008CheckSum0xD002_000C必须写为 0图 3.5 S5PV210 启动流程框架图3.4本章小结本章主要分析了 S5PV210 的启动流程过程,理顺了启动过程后,对以后的学习会有承上启下的作用。限于篇幅,不可能一一详述每个细节问题
39、,如果读者想更 加 清 楚 的 认 识 它 的 启 动 过 程 , 请 参 考 三 星 公 司 的S5PV210_iROM_ApplicationNote_Preliminary_20091126手册。前面三章稍微有点枯燥,有木有_。是不是迫不及待的想接触代码,接触实际硬件电路,想点亮属于的 LED 灯了呢?很快,您将会看到23第4章S5PV210 GPIO 接口实验4.1 GPIO 硬件接口介绍4.1.1GPIO 硬件简介GPIO(General Purpose I/O Ports)即通用输入/输出端口,可以对 I/O 进行读写操作 GPIO 操作是所有硬件操作的基础。S5PV210 有 2
40、37 个多功能 I/O 端口,可以通过设置寄存器来确定某个引脚用于输入、输出或者用于其他特殊功能。4.1.2GPIO 寄存器S5PV210 的 GPIO 端口寄存器主要有三类,分别是寄存器 GPxCON,用于设置 GPIO 引脚的功能(输入/输出/其他功能);数据寄存器 GPxDAT,用于读/写引脚数据;上拉寄存器 GPxUP,用于确定是否使用内部上拉电阻。4.1.3LED 原理图设计LED 原理图分别在 210 底板和板上,如下:图 4.1 LED 硬件原理图图 4.2 4 个 LED 对应的 GPIO 引脚连接图由以上两个图可知,LED1LED4 对应的 GPIO 口为 GPJ2_0 GP
41、J2_3,如果要让 LED1 亮,则设置 GPJ2CON3:0为输出引脚,设置 GPJ2DAT0为输出低电平, 即可点亮 LED1 啦,就这么简单_。244.2 汇编点亮LED4.2.1实验前言这小节,我们使用第二章所学的汇编语言来编写一个小程序,实现点亮 LED。4.2.2实验讲解源程序在210_code1.led_S目录下,包含 3 个文件, start.S、Makefile、mktools.c。start.S 讲解程序很简单,里面有详细的注释,这里不再句句啰嗦,详细请查看源代码。1.在S5PV210_UM_REV1.1搜索 GPJ2CON 发现,GPJ2CON 寄存器的地址
42、为0xE020_0280,GPJ2DAT 寄存器的地址为 0xE020_0284。2.由下图可知,往 GPJ2CON3:0写入 0x1 即 0001B,设置 GPJ2_0 引脚为输出状态,其他引脚亦是如此,这里仅列举 GPJ2CON0。3.由LED 硬件原理图可知,LED1 左端置低电平,可导通发光二极管,即点亮LED1,故往 GPJ2DAT0写入 0,即点亮 LED1。Makefile 讲解1. 我们先再 Linux 虚拟机下执行 make 命令(注意:执行 make 命令前,确保 Linux虚拟机已安装了 arm-linu叉编译工具,具体的安装方法请阅读A8开发平台使用)
43、,编译一下源文件,先看看编译器做了哪些动作。2. 简单分析编译过程(1)由上图可知,arm-linux-gcc 将 start.S 编译成 start.o 目标文件,-c 表 示编译不,-o 跟随输出文件名。(2)arm-linux-ld 将 start.o 目标文件成 elf 文件格式,-Ttext0 表示程序运行的地址是 0,其实程序可以在任何一个地址运行,因置无关码,后面您会看到可以在内存 0x20000000 地址运行。源代码是位(3) arm-linux-objcopy 将 ELF 格式的可执行文件转换为二进制文件,即可以在开发板上执行的文件,-O 表示指定格式来输出文件,这里是 b
44、inary 即二进制文件。(4) arm-linux-objdump 将 ELF 文件反汇编,主要用于编译出错时,对调试很有帮助,-D 表示反汇编所有段。(5) 接着二句是用于 SD 卡烧写使用的,如果使用 u-boot 菜单栏或者u-boot 命令行来烧写,则可忽略这二句。(6)想知道 arm-linux 编译工具, 所带参数是什么意思, 例如想查看arm-linux-gcc 编译工具,-S 是什么意思,您可以在 linux 虚拟机令行执行 arm-linux-gcc-help 即可查看到详细信息。看完编译过程您应该要26知道 Makefile 的作用了,详细的 Makefile 语法,可参
45、考网络,限于篇幅, 这里就不一一列举啦_。mktools.c 讲解还记得第三章讲 S5PV210 启动流程吗?是否还大概还记得 0xD0020000 0xD0020010 里必须存放 16 个字节的头部信息?如果不记得,请回头看看第三章第 3.3 节讲过的内容啦,温故而知新嘛,不要刚学过就忘囖_。mktools.c 文件的作用就是在由源 bin 文件(这里是 led.bin)根据三星公司规定的方法生成 16 个字节的头部信息,使得 led.bin 变成 new_led.bin,如下所示:mktools.c 是从网络中获得的,详细的代码请查看源代码,根据前面将的内容结合里面的注释,
46、我有理由相信您可以看的懂_。在前期用 SD 卡烧写机程序到开发板上会起到作用,如果使用制作的u-boot 菜单栏或者 u-boot 命令行来烧写机程序就不需要 mktools.c 文件了, 因为u-boot 源代码已经完成了生成 16byte 头部信息的功能。4.2.3A8机实验烧写方法使用 SD 卡烧写Makefile 里的最后二句就是 SD 卡烧写令:表示输出文件为 new_led.bin,输出文件到/dev/sdb,设备文件在 linux 下是在/dev/目录下,此时 SD 卡在 Linux 下仅仅被看成是一个文件,seek=1 表示烧写到扇区 1,Linux 读写磁盘设备
47、最小是一个扇区。注意:/dev/sdb 是查阅 SD 在 Linux 虚拟机上的设备节点而设置的,如果您的设备节点为/dev/sdc 则 Makefile 需要修改为/dev/sdc,SD 卡到 PC 后,在 Linux 虚拟机命令行执行 ls /dev/sd*命令查看到设备节点的情况烧写步骤:1.2.3.编译 make 将 SD 卡到PC 机直接在 Linux 虚拟机命令行执行 makeload 即可完成 SD 卡烧写如下是在红帽虚拟机上执行过程示意:27rootlocalhost 1.led_S# ls /dev/sd*/dev/sda/dev/sda1/dev/sda2 /dev/sdb
48、load:ddiflag=dsync oflag=dsync if=new_led.bin of=/dev/sdb seek=116 字节的头部信息led.bin使用 u-boot 菜单栏烧写(SDBOOT 启动方式下)下面使用图文并茂的方式来说明如何用u-boot 菜单栏烧写,(注意:烧写前需要安装好 SecureCRT、DNW 工具,以及 USB 驱动,具体安装方法请查阅A8 开发平台使用)。步骤一:步骤二:28rootlocalhost 1.led_S# make loaddd iflag=dsync oflag=dsync if=new_led.bin of=/dev/s
49、db seek=1 32+0 records in32+0 records out16384 bytes (16 kB) copied, 0.130677 seconds, 125 kB/s步骤三:步骤四:29步骤五:30使用 u-boot 命令行的 tftp 命令烧写(SDBOOT 启动方式下)下面同样使用图文并茂的方式来说明如何使用 tftp 命令烧写机代码到开发板,(注意:烧写前 Linux 虚拟机需要安装好 tftp 服务器,具体安装请查阅A8开发平台使用)烧写前需要做好的准备的事项有:开启 tftp 服务器,使用#service 开发板连接上网线;xinetdresta
50、rt 命令;设置开发板上的 serverip 为 Linux 虚拟机的ip 地址;将.bin 文件放到 Linux虚拟机的 /tftpboot目录下,如: /tftpboot/led.bin步骤一:步骤二:31设置 ip 地址令示例:步骤三、四:32/* 注意,开发板 IP 地址需要跟 Linux 服务器 IP 地址要同一个网端 */ setenv ipaddr 32setenv serverip 31save/* 最后不要忘记保存到 NAND,否则重新上电后不保存 */其他烧写方法提示除了以上介绍的三种方法外,还可以使用 nand 的
51、读写命令,dnw 命令(其实第二种方法的实现就是使用 dnw 命令,只不过用菜单栏的形式封装了一下而已_,方便读者),nfs 命令,串口 xmodem 命令等等,限于篇幅,不可能一一介绍,建议读者选择以上三种方法的其中一种,根据式_。以后机代码烧写,不再详述。的喜爱来选择方4.2.4实验现象板上的 4 盏同时被点亮。334.3 用C 语言和汇编混合编程点亮流水灯4.3.1实验前言这小节,我们结合C 语言和汇编语言编写一个小程序,实现流水灯。4.3.2实验讲解源程序在210_code2.led_flow_water_c目录下,包含 4 个文件,start.S、Makefile、mktools.c、led.c,与上一节比较仅仅多了一个 led.c 文件,Makefile、 mktools.c 是一样的,这里不再重复讲解。start.S 讲解程序很简单,里面有详细的注释,这里不再句句啰嗦,详细请查看源代码。这里需要注意一点, 由汇编调用 C 语言之前需要先设置栈, ldr sp,=0xD0037D80。led.c 讲解这就是 led.c 的主函数,很简单,读者可参考源代码,这里就不啰嗦了。344.3.3实验现象板上的 4 盏轮流被点亮,这就是“神奇”的流水灯,就这么
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 22320-2025信息技术中文编码字符集 汉字15×16点阵字型
- 课题立项申报书2018
- 比较研究2025年特许金融分析师考试试题及答案
- 注会考试备考心理辅导试题及答案
- 企业电脑采购合同协议
- 微生物检测条件对结果影响试题及答案
- 2025年证券从业证考试常见试题及答案
- 了解资本市场与2025年考试关系的考题试题及答案
- 行政管理师内部管理试题及答案
- 课题申报评审书2019
- 考研复试调剂讲座
- SPC控制图应用指导书
- IrreguLar-Verbs-不规则动词表
- 蔬菜水果配送投标方案(技术方案)
- (2023版)《结肠镜检查肠道准备专家共识意见》解读课件
- 学院物资仓库管理员岗位职责
- 砼工程技术交底
- 煤矿污水处理站制度(完整版)资料
- 光伏储能一体化充电站设计方案
- 剑桥英语PET真题校园版
- 土方开挖及基坑支护工程安全监理实施细则
评论
0/150
提交评论