基于OK6410的嵌入式开发教程(上)

上传人:闪**** 文档编号:290682946 上传时间:2022-05-10 格式:DOCX 页数:25 大小:27.44KB
返回 下载 相关 举报
基于OK6410的嵌入式开发教程(上)_第1页
第1页 / 共25页
基于OK6410的嵌入式开发教程(上)_第2页
第2页 / 共25页
基于OK6410的嵌入式开发教程(上)_第3页
第3页 / 共25页
基于OK6410的嵌入式开发教程(上)_第4页
第4页 / 共25页
基于OK6410的嵌入式开发教程(上)_第5页
第5页 / 共25页
点击查看更多>>
资源描述

《基于OK6410的嵌入式开发教程(上)》由会员分享,可在线阅读,更多相关《基于OK6410的嵌入式开发教程(上)(25页珍藏版)》请在金锄头文库上搜索。

1、本文格式为Word版,下载可任意编辑基于OK6410的嵌入式开发教程(上) 图1 在这里,我们先来解释一下奇怪(Exception)的概念,奇怪指因 为内部或者外部的一些事情,使处理器不得不停下正在处理的事情,转而去处理这些发生的事情。 我们说ARM处理器共有7种工作模式,其中有5种奇怪模式, 而在这些奇怪模式下又有7种奇怪,它们分别是Reset(复位),Undefined instructions(未定义指令),SWI(软中断),Prefetch Abort(指令预取失败),Data Abort(数据预取失败),IRQ(外部中断),FIQ(快速中断)。 我们再来解释一下什么叫奇怪向量,当有奇

2、怪发生时,ARM处理 器会自动跳转到对理应奇怪的一个固定的地址来执行奇怪处理程序,而这个固定地址就是奇怪向量。这个就对应图1后面的address两列,第一列是我们通常处境下使用的地址,后面是高位地址,我们可以通过cp15配置,使cpu选择高位地址还是低位地址,通常我们选用低 11 位的。 有了前面这些概念,我们现在再来看奇怪向量表就分外简朴了: 图2 值得留神的是,我们在编写编译器脚本时里面有一句.=ALIGN(4),这就说明我们接下来的代码是4字节对齐的,所以我们可以看到每一行代码跳4个字节,另外由于中间切实了一片面,所以我们用一个无用的函数名not_used补全,这样就便当了大量。这样就终

3、止了,不懂的可以自己在看一遍或查资料。 12 2.2 设置svc模式 我们前面说过普遍的应用程序是在usr下运行的,而内核和 bootloader是在svc模式下运行,所以要运行bootloader,我们务必先将处理器设置为svc模式。我们之前也提过模式的设置是在CPSR的0-4位,这样我们就能找到设置的方向。 参照2.1里的图1和图3,我们可以领会的看到svc模式是将CPSR0-4位设置为10011。另外还有一点也要说明,我们制作的是相对简朴的bootloader,所以irq和fiq最好也设置为不成用,之前在讲CPSR时,也同样提到I位和F位的作用,在这里我们就可以设置了,我们的目的是将第6

4、,7位设为1,第0-4位设为10011,而其他位不变。 编程如下: 2.3 关闭看门狗 首先我们先来介绍一下关门狗是什么,起到什么作用。Watchdog mrs r0, cpsr bic r0, r0, 0x1f orr r0, r0, 0b11010011 msr r0, cpsr mov pc, lr 也就是我们所称的看门狗,一般是一个硬件模块,在长期无人值守的地方,电子器件可能会展现死机的处境,这是无人干预,就需要系统 13 自己带有一个自动重启的机制,它在硬件上实现了计时功能,启动计时后,需要用户(软件)来在其计时终止前重新开头计时,俗称“喂狗”,否那么watchdog就会认为死机了,

5、就会重启系统。说白了,它的作用就是在死机时使系统自动重启。 好多人看到这里,可能会想这看门狗犹如很有用,那我们为什么 要关闭它?这个结论是我们之前分析U-BOOT时得到的,我们认为bootloader很简朴,一般不会死机,而不关闭它反而在程序运行时要不断喂狗,这样很消耗资源,所以我们就把它直接关闭了。 这里我先给一张看门狗的原理图: 图1 这里的话,我就不对这个原理图多加赘述了。我们直接看如何关闭看门狗吧。 14 我们在这里就得看看门狗的操纵寄放器(WTCON)了,我们要关注一下第0,2位,分别是操纵了看门狗超时后重启和中断的功能,我们都将其设置为0就行。 编程如下: 15 #define W

6、TCON 0x7e004000 ldr r0, =WTCON mov r1, 0x0 str r1, r0 mov pc. Lr U-BOOT编写 (基于OK6410) Written by water 1 1.U-BOOT工作原理及设计蓝图 在全体章节开头务必首先介绍一下U-BOOT,所谓U-BOOT就是 bootloader的一种,可用于多种cpu(x86,ARM等),在不同系统像Linux,Vxworks,QNX等上运行调试。它能起到在上电后能对硬件,存储器,内核等完成初始化,并且引导内核和文件系统正常工作的作用。U-BOOT并不是单纯的裸机程序,在学完此课程后,可以完成大片面裸机程序的

7、调试,移植与开发。结果得说明,我所用的开发板是OK6410,而我所做的学习笔记完全是建立在国嵌视频上的,我会在这个笔记中对视频的内容举行总结,依次会有所调整。 1.1 U-BOOT工作原理 要讲解这个首先需要让大家看一张图(注:这张图是2440的机理图,放在这里是为了能便当讲解和理解): 这张图共分为两片面,左边片面是用于nor flash启动,而右边这 2 片面就是用于nand flash启动了,这个也是我们讲的重点。首先需要明确一点,上电后第一条程序,断定是从0地址(0x00000000)开头执行的。左图显示0地址是在SROM中,这个我们不去管它,而右图显示第一条指令是从SRAM中执行的,

8、而这个存储器只有4K,在这里我们就需要先明确一下“垫脚石(Stepping Stone)”这个概念了。 在2440选择从nand flash启动刚上电时,系统会自动将nand flash中bootloader的前4K,放入到我们前面所述的0地址,也就是Boot internal SRAM中,此时系统会执行bootloader的前4K,同时系统还会将整个bootloader复制到我们的内存,前4k执行完后,就跳转至内存持续执行剩余的bootloader,而我们这里4K大小的SRAM就是垫脚石(stepping stone)。为什么需要它,这点很简朴,两图比较,我们就能察觉我们的nand flas

9、h没参与我们的统一编址,所以只能借stepping stone作为我们的桥梁。 介绍完2440,我们来看看6410。先给大家几张图: 图1 3 图2 图3 我们先看图2,从图2我们可以看出6410可以从哪些片面启动, 而那些片面又被存放在哪儿,我们可以留神到nand flash是被存放在IROM中的。接下来我们看图2,我们可以看到0地址处放的是一个最大可达成128M的存储器,描述和备注我就不赘述了,可以看出他 4 是个镜像存储器,接下来就是IROM和stepping stone,下面的存储器我们暂时不研究,不说了。 看完两张图,可能最有疑问的是结果一张图,我们说过上电执行 的第一条程序理应在0

10、地址处,为什么那里不像2440一样放的是stepping stone,而是一个镜像存储器呢。其实聪明一些的话,理应已经留神到了,既然是镜像存储器,那当上电后,我们的IROM和stepping stone(两个最大都能达成64M),会被镜像入0地址处的存储器(最大可达128M)中,然后剩下的就和2440一样了。 在这里可能大家还会有疑问,2440是直接从stepping stone中直接 启动,6410前面突然多了个IROM,好象有些不适应。我们来看图1。 图1是6410bootloader的工作原理图,我们可以看到IROM里存 放的是BL0,这个BL0他会首先完成对硬件的初始化,同时会将BL1

11、也就是BL的前8k(6410的steeping stone为8K)放入垫脚石中,然后就和2440一样,将BL放入内存持续执行。 至此,bootloader的工作原理讲解完毕。 现在务必要分析bootloader启动流程以完成我们自己的bootloader的架构设计。我们采用分析U-BOOT的方法,来建立属于我们自己的bootloader。由于分析的过程冗长耗时,在这里我就不分析了,但我会给出一张分析出的结果图: 5 2.U-BOOT编写 2.1 一些需要知道的学识概述 首先大家务必先要了解的是ARM处理器的七种工作模式: 图1 图2 6 两张图说明ARM处理器一共有7种工作模式,在这里我列一张

12、表格来表达其名称及作用: 用户模式 系统模式 管理模式 usr 用于普遍状态下正常执行程序 sys 运行具有特权的操作系统任务 svc 对操作系统的养护模式 数据访问中断abt 当数据或指令预取终止时进入该模式,可用于模式 虚拟存储或存储养护 未定义指令终und 当未定义的指令执行时进入该模式,可用于支止模式 持硬件 外部中断模式 irq 用于通用的中断处理 快速中断模式 fiq 用于高速数据传输或信道处理 有几点需要说明普遍的应用程序是在usr下运行,而我们的内核和bootloader是在svc下运行。 至此,7种工作模式交代完毕,而图1中0bxxxxx,这种东西是用于CPSR,即程序状态寄

13、放器使用的。这也是我们接下来要说的,我们的处理器一共有37个寄放器,如图2,其中有31个通用寄放器和6个程序状态寄放器,r0-r7为不分组寄放器,r8-r14为分组寄放器,结果还有个r15,也就是我们所熟知的程序计数器(pc)。其实这当中还有些特殊的寄放器,譬如r13(堆栈指针sp),r14(链接寄放器)。这个我们以后会说的。这片面内容相对简朴,我也不想细说,如有疑问,请自己查资料。 接下来我们来谈谈CPSR(程序状态寄放器)和SPSR(程序状态 7 保存寄放器),我这里先给出一张表: 图3 然后我们再来谈谈CPSR和SPSR的作用和工作原理,看完图2,再查完一些资料,理应会对这个有确定的了解

14、,先研究图2,图2显示我们所说的7种工作模式下都有CPSR,而SPSR只有5种工作模式下存在,这5种工作模式被我们称为奇怪模式,除usr以外的其他工作模式被称为特权模式,那我们就要问,为什么要这样设计?或者说,这样的设计能反映CPSR和SPSR怎样的工作原理? 这个问题很好回复,首先当我们在usr下运行时,我们的程序会 在CPSR下存有备份,现在可以把它理解成备份,这个时候展现中断,我们这个时候就切入了奇怪模式,我们会先将状态从CPSR转移至SPSR,等处理器处理完了此次中断,然后在将SPSR的数据返还至CPSR,使状态回复至之前的状态。 解释完了这些,我们现在来看看图3,它反映的是SPSR和CPSR 的寄放器数据格式。这里我们我们不需要全部记录来,但有5位需要留神,分别是N,Z,I,F,M。我这里只做简朴表达,详情请查阅ARM

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 大杂烩/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号