ARM开发教程之ARM体系的嵌入式系统BSP的程序设计
ARM开发教程之ARM体系的嵌入式系统BSP的程序设计

ARM开发教程之ARM体系的嵌入式系统BSP的程序设计简介:ARM公司在32位RISC的CPU开发领域不断取得突破,其结构已经从V3发展到V6。
BSP(Board Support Package)板级支持包介于主板硬件和操作系统之间,其功能与PC 机上的BIOS相类似,主要完成硬件初始化并切换到相应的操作系统。
BSP是相对于操作系统而言的,不同的操作系统对应于不同定义形式的BSP,例如VxWorks的BSP和Linux的BSP相对于某一CPU来说,尽管实现的功能一样,可是写法和接口定义是完全不同的。
另外,仔细研究所用的芯片资料也十分重要,例如尽管ARM在内核上兼容,但每家芯片都有自己的特色。
所以这就要求BSP程序员对硬件、软件和操作系统都要有一定的了解。
本文介绍基于ARM体系的嵌入式应用系统初始化部分BSP的程序设计。
本文引用的源码全部是基于HMS320C7202芯片设计,并已成功运行。
1 ARM开发教程之初始化过程尽管各种嵌入式应用系统的结构及功能差别很大,但其系统初始化部分完成的操作有很大一部分是相似的。
嵌入式系统的启动流程如图1所示。
1.1 设置入口指针启动程序首先必须定义指针,而且整个应用程序只有一个入口指针。
一般地,程序在编译链接时将异常中断向量表链接在0地址处,并且作为整个程序入口点。
入口点代码如下:ENTRY(_start);开始1.2 ARM开发教程之设置异常中断向量表ARM要求中断向量表必须放置在从0开始、连续8×4字节的空间内。
各异常中断向量地址以及中断的算是优先级如表1:表1 各异常中断的中断向量地址以及中断的处理优先级中断向量地址异常中断类型异常中断模式优先级(6最低)0x0 复位特权模式(SVC)10x4 未定义中断未定义指令中止模式(Undef) 60x8 软件中断(SWI)特权模式(SVC)60x0c 指令预取中止中止模式50x10 数据访问中止中止模式20x14 保留未使用未使用0x18 外部中断请求(IRQ)外部中断(IRQ)模式40x1c 快速中断请求(FIQ)快速中断(FIQ)模式 3每当一个中断发生后,ARM处理器便强制把程序计数器(PC)指针置为向量表中对应中断类型的地址值。
05-基于ARM的嵌入式程序设计

程序体部分实现了一个简单的加法运算。
5、ARM 汇编语言编程的几个问题
➢ ARM数据处理操作 ➢ 设置条件码 ➢ 汇编语言子程序调用及返回 ➢ 跳转表思想 ➢ ARM与Thumb之间的状态转换及函数的互相调用
ARM数据处理操作 32位立即数在32位指令中的编码以及ARM特有
的寄存器移位操作是数据处理方面的难点
将一文件包含到当前源文件中,被包含文件不进行汇编处理
告诉编译器将局部符号包含在目标文件的符号表中
禁止源程序中包含浮点运算指令
指定段之间的相互依赖关系
为一个特定的寄存器定义名称
定义局部变量的有效范围
3、ARM 汇编语言伪指令
伪指令
语法格式
作用
ADR
ADR{cond} register, 将基于PC或基于寄存器的地址值读取到寄
设置条件码
ARM的任何数据处理指令都能通过增加“S” 操作码来设置条件码N、Z、C、V。
每条指令都可以条件执行。 在程序中可以通过条件码的使用让微处理器决 定是否进行转移,还可用来控制循环的退出。
汇编语言子程序调用及返回
在ARM汇编语言中,子程序调用是通过BL指令来 完成的。BL subname 其中,subname是被调用的子 程序的名称。
文件
ARM汇编语言是以段(section)为单位来组织源文 件的。段是相对独立的、具有特定名称的、不可分割的 指令或者数据序列。一个ARM源程序至少需要一个代码 段,大的程序可以包含多个代码段和数据段。
ARM汇编语言语句格式如下所示:
{symbol} {instruction|directive|pseudo-instruction} {;comment}
{label} DCFS{U} fpliteral 为单精度的浮点数分配字对齐的内存单元
基于ARM7处理器VxWorks系统BSP设计

基于ARM7处理器VxWorks系统BSP设计作者:孟雷徐尽来源:《陕西教育·高教版》2007年第12期本文介绍了AMR7微处理器的特点和BSP的概念及构成,并且提出了基于ARM7微处理器的VxWorks系统的BSP设计步骤,为嵌入式系统设计人员提供了一种行之有效的BSP设计实现方案。
ARM7核处理器特点ARM7系列微处理器为低功耗的32位RISC处理器,最适合用于对价位和功耗要求较高的消费类应用。
如工业控制、Internet设备、移动电话等多种多媒体和嵌入式应用。
ARM7微处理器系列具有如下特点:具有嵌入式ICE-RT逻辑,调试开发方便;极低的功耗,适合对功耗要求较高的应用,如便携式产品;能够提供0.9MIPS/MHz的三级流水线结构;代码密度高并兼容16位的Thumb指令集;对操作系统的支持广泛,包括VxWorks、WindowsCE、Linux、PalmOS等。
主频最高可达130MIPS,高速的运算处理能力能胜任绝大多数的复杂应用。
BSP概念和构成1、BSP概念。
BSP是指针对具体的硬件平台,用户所编写的启动代码和部分设备驱动程序的集合。
BSP是相对于操作系统而言的,不同的操作系统对应不同形式的BSP,因此,在写BSP时要按照要求的操作系统对BSP的定义形式来写。
在VxWorks系统中,BSP是介于底层硬件环境和VxWorks之间的一个软件接口,它的主要功能是系统加电后初始化目标机的硬件和VxWorks,并提供部分硬件驱动程序。
BSP为各种板卡的硬件功能提供了统一的软件接口,包括硬件初始化、中断的捕捉和处理、硬件时钟和定时器管理、内存地址映射,以及内存分配等。
每个BSP还包括一个ROM启动或其他启动机制。
2、BSP的文件构成。
VxWorks的BSP组成文件主要包含在四个目录下:do\target\config\all:所有BSP的公共部分do\target\config\comps\vxworks描述文件(*.cdf)do\target\config\comps\src文件(被usrConfig.c使用)do\target\config\bspname:与目标板相关的部分3、BSP的函数构成。
嵌入式系统设计与开发第4章 ARM汇编语言程序设计1PPT课件

11.08.2020
信息学院-通信教研室-油海东
10
RLIST
名称 RLIST(Rename LIST) {寄存器列表} 用于对一个通用寄存器列表定义名称 ,使用该
伪指令定义的名称可在ARM指令LDM/STM中 使用 RegList RLIST {R0-R5,R8,R10} ; 将寄存器列表名称定义为RegList,可在ARM 指令LDM/STM中通过该名称访问寄存器列表
定义一个全局的数字变量,并初始化为0
GBLL(GloBaL Logic) 全局变量名
定义一个全局的逻辑变量,并初始化为{false}
GBLS(GloBaL String) 全局变量名
定义一个全局的字符串变量,并初始化为空
11.08.2020
信息学院-通信教研室-油海东
7
局部变量声明
LCLA(LoCaL Arithmetic) 局部变量名
给一个数学变量赋值
变量名 SETL(SET Logic) 表达式
给一个逻辑变量赋值
变量名 SETS(SET String) 表达式
给一个字符变量赋值
11.08.2020
信息学院-通信教研室-油海东
9
举例
GBLA Test1 ;全局的数字变量,变量名为Test1 Test1 SETA 0xaa ;将该变量赋值为0xaa LCLL Test5 ;局部的逻辑变量,变量名为Test5 Test5 SETL {TRUE} ;将该变量赋值为真 LCLS Test6 ;局部的字符串变量,变量名为Test6 Test6 SETS “Testing”;将该变量赋值为“Testing”
11.08.2020
信息学院-通信教研室-油海东
备工作 伪指令仅在汇编过程中起作用,一旦汇编结束,伪指
最新-基于ARM体系的嵌入式系统BSP的程序设计 精品

基于ARM体系的嵌入式系统BSP的程序设计摘要在介绍基于体系的嵌入式系统启动流程的基础上,结合编程实例,详细、系统地叙述了板级支持包程序的各个组成部分及其具体设计方案,并就实际程序设计中的几个难点问题做了说明。
关键词嵌入式系统微处理器公司在32位的开发领域不断取得突破,其结构已经从3发展到6。
板级支持包介于主板硬件和操作系统之间,其功能与机上的相类似,主要完成硬件初始化并切换到相应的操作系统。
是相对于操作系统而言的,不同的操作系统对应于不同定义形式的,例如的和的相对于某一来说,尽管实现的功能一样,可是写法和接口定义是完全不同的。
另外,仔细研究所用的芯片资料也十分重要,例如尽管在内核上兼容,但每家芯片都有自己的特色。
所以这就要求程序员对硬件、软件和操作系统都要有一定的了解。
本文介绍基于体系的嵌入式应用系统初始化部分的程序设计。
本文引用的源码全部是基于3207202芯片设计,并已成功运行。
1初始化过程尽管各种嵌入式应用系统的结构及功能差别很大,但其系统初始化部分完成的操作有很大一部分是相似的。
嵌入式系统的启动流程如图1所示。
11设置入口指针启动程序首先必须定义指针,而且整个应用程序只有一个入口指针。
一般地,程序在编译链接时将异常中断向量表链接在0地址处,并且作为整个程序入口点。
入口点代码如下_;开始12设置异常中断向量表要求中断向量表必须放置在从0开始、连续8×4字节的空间内。
各异常中断向量地址以及中断的算是优先级如表1表1各异常中断的中断向量地址以及中断的处理优先级中断向量地址异常中断类型异常中断模式优先级6最低00复位特权模式104未定义中断未定义指令中止模式608软件中断特权模式600指令预取中止中止模式5010数据访问中止中止模式2019保留未使用未使用018外部中断请求外部中断模式401快速中断请求快速中断模式3每当一个中断发生后,处理器便强制把程序计数器指针置为向量表中对应中断类型的地址值。
基于ARM7处理器VxWorks系统BSP设计

2 S .B P的文件构成 。 Vx  ̄s B P组成 文件 主要包含在 四个 目录下 : Wo 的 S d \ re cn gal o agt o f  ̄ :所有 B P的公共部分 t \ i l S d \ re cn gcmp\x ok 描述文件 ( d ) o agt o f \ t \ i o s w rs v .cf d \ re cn gcmp\ c文件 ( ur o f . 使用 ) o agt o f \ t \ i o sr s 被 s ng C C i d \ re cn gbp a :与 目标板相关 的部分 ot gt o f \sn me a \ i
维普资讯
信 息 技 术
基 于 AR M7处 理 器 Vx rs Wok 系统 B P设 计 S 孟
本文介绍 了 A 7微处理器 的特点和 B P的概念及 构 MR S
成, 并且提出 了基 于 AR M7微处 理器 的 Vx  ̄s Wo 系统 的 B P S
() 1 可加载映像包括 Vx  ̄s B oR M 两部分 内容 , Wo 和 ot O 两部分是 独立创建 的。首先 ,由系统 引导代码把 R OM 引导 程序搬到 R AM_ G _ R 。然后 ,R M 引导程序开始运 HI H AD S O 行 ,将 V Wo x  ̄s映像加载到 R AM
⑤杂项 函数 :ss sR v(, yMo e ) s so ntr yB p e ) ss dl(, y T Mo i o 其它 函数如 :辅助时钟中断相关 函数 ,总线相关 函数 。
ARM嵌入式系统 第4-1章 ARM汇编语言程序设计

15
符号定义伪指令Ⅳ
3. SETA、SETL、SETS 、 、
格式: 格式:变量名 SETA/SETL/SETS 表达式
说明: 说明:
SETA:给一个数字变量赋值; :给一个数字变量赋值; SETL:给一个逻辑变量赋值; :给一个逻辑变量赋值; SETS:给一个字符串变Ⅳ量赋值; :给一个字符串变Ⅳ量赋值;
在宏内定义局部变量后, 在宏内定义局部变量后,则在宏外使用该指令时编 13 译会出错。 译会出错。
符号定义伪指令Ⅲ
2. GBLA、GBLL、GBLS 、 、
格式: 格式:GBLA/GBLL/GBLS 变量名
伪操作定义一个汇编程序中的全局变量,并初始化, 伪操作定义一个汇编程序中的全局变量,并初始化, 其中: 其中:
Array1 DCB 1,2,3,4,5 ;数组 str1 DCB “Your are welcome!” ;构造 ! 字符串并分配空间。 字符串并分配空间。
22
2. DCW/DCWU:
标号/变量 标号 变量 DCW/DCWU 表达式
DCW分配一段半字存储单元并用表达式值初 分配一段半字存储单元并用表达式值初 始化,它定义的存储空间是半字对齐的。 始化,它定义的存储空间是半字对齐的。 DCWU功能跟 功能跟DCW类似,只是分配的字存储 类似, 功能跟 类似 单元不严格半字对齐。 单元不严格半字对齐。 例如: 例如:
所有的标签必须在一行的开头顶格写, 所有的标签必须在一行的开头顶格写,前面不能留 空格,后面也不能跟C语言中的标签一样加上 ” 语言中的标签一样加上“ 空格,后面也不能跟 语言中的标签一样加上“:”; ARM汇编器对标识符的大小写敏感 书写标号及指 汇编器对标识符的大小写敏感,书写标号及指 汇编器对标识符的大小写敏感 令时字母的大小写要一致; 令时字母的大小写要一致; 注释使用“ ”符号,注释的内容从“ ” 注释使用“;”符号,注释的内容从“;”开始到该 行的结尾结束。 行的结尾结束。 例:
嵌入式系统开发基础—基于ARM9微处理器C语言程序设计(第五版)配套课件

1. ARM7系列微处理器
ARM7系列微处理器是低功耗的32位RISC处理器,适合用 于对价位和功耗要求较高的消费类产品。ARM7系列有如下 特点: ❖ ·具有嵌入式ICE—RT逻辑,调试开发方便。 ❖ ·极低的功耗,适合对功耗要求较高的产品,如便携式 产品。 ❖ ·能够提供0.9 MIPS(MIPS,每秒百万条指令)/MHz 的三级流水线结构。 ❖ ·对操作系统的支持广泛,如Windows CE、Linux、 PalmOS(最流行的掌上电脑操作系统)等。 ❖ ·指令系统与ARM9系列、ARM9E系列和ARM10E系列 兼容,便于用户的产品升级换代。 ❖ ·主频最高可达130MHz,高速的运算处理能力可胜任 绝大多数的复杂应用。
1.1.2 嵌入式控制系统的设计方法
❖ 做为嵌入式控制器的单片机,不管是8位单片机还 是16位单片机或32位单片机,由于受其本身资源限 制,其应用程序都不能在其本身上开发。开发其应 用程序,还需要一台通用计算机,如常用的IBMPC机或兼容机,Mindows95/98/2000或XP操作系 统,256M以上内存,1G以上硬盘内存空间(运行 交叉编译环境ADS1.2最低配置)。我们也称这台 通用计算机为“宿主机”,称做为嵌入式控制器的 单片机为“目标机”。应用程序在“宿主机”上开 发,在“目标机”上运行。“目标机”和“宿主机” 之间利用计算机并口通过一台叫“仿真器”的设备 相连,程序可以从“宿主机”传到“目标机”,这 也叫程序下载,也可以从“目标机”
1.1.3 嵌入式控制系统各种设计方法 的特点
1. 目标机上安装某种嵌入式操作系统
❖ 人们在目标机上嵌入某种功能较强且占用内 存较少的操作系统,用户程序在该操作系统 支持下运行。我们也把这种操作系统叫嵌入 式操作系统,嵌入式操作系统有多种,如比 较著名的Windows CE,Linux,μC/OS-Ⅱ 等等。特别是Linux操作系统,由于代码简 练、功能强大、内核公开等优点,获得广泛 应用。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
ARM开发教程之ARM体系的嵌入式系统BSP的程序设计简介:ARM公司在32位RISC的CPU开发领域不断取得突破,其结构已经从V3发展到V6。
BSP(Board Support Package)板级支持包介于主板硬件和操作系统之间,其功能与PC机上的BIOS相类似,主要完成硬件初始化并切换到相应的操作系统。
BSP是相对于操作系统而言的,不同的操作系统对应于不同定义形式的BSP,例如VxWorks的BSP和Linux的BSP相对于某一CPU来说,尽管实现的功能一样,可是写法和接口定义是完全不同的。
另外,仔细研究所用的芯片资料也十分重要,例如尽管ARM在内核上兼容,但每家芯片都有自己的特色。
所以这就要求BSP程序员对硬件、软件和操作系统都要有一定的了解。
本文介绍基于ARM体系的嵌入式应用系统初始化部分BSP的程序设计。
本文引用的源码全部是基于HMS320C7202芯片设计,并已成功运行。
1 ARM开发教程之初始化过程尽管各种嵌入式应用系统的结构及功能差别很大,但其系统初始化部分完成的操作有很大一部分是相似的。
嵌入式系统的启动流程如图1所示。
1.1 设置入口指针启动程序首先必须定义指针,而且整个应用程序只有一个入口指针。
一般地,程序在编译链接时将异常中断向量表链接在0地址处,并且作为整个程序入口点。
入口点代码如下:ENTRY(_start);开始1.2 ARM开发教程之设置异常中断向量表ARM要求中断向量表必须放置在从0开始、连续8×4字节的空间内。
各异常中断向量地址以及中断的算是优先级如表1:----------------------------精品word文档值得下载值得拥有----------------------------------------------表 1 各异常中断的中断向量地址以及中断的处理优先级中断向量地址异常中断类型异常中断模式优先级(6最低)0x0 复位特权模式(SVC) 10x4 未定义中断未定义指令中止模式(Undef) 60x8 软件中断(SWI)特权模式(SVC) 60x0c 指令预取中止中止模式 50x10 数据访问中止中止模式 20x14 保留未使用未使用0x18 外部中断请求(IRQ)外部中断(IRQ)模式 40x1c 快速中断请求(FIQ)快速中断(FIQ)模式 3每当一个中断发生后,ARM处理器便强制把程序计数器(PC)指针置为向量表中对应中断类型的地址值。
因为每个中断向量仅占据放置1条ARM指令的空间,所以通常放置1条跳转指令或向程序计数器(PC)寄存器赋值的数据访问指令,使程序跳转到相应的异常中断处理程序执行。
如果异常中断处理程序起始地址小于32MB,使用B跳转指令;如果跳转范围大于32MB,使用LDR指令。
另外,对于各未用中断,可使其指向一个只含返回指令的哑函数,以防止错误中断引起系统的混乱。
----------------------------精品word文档值得下载值得拥有----------------------------------------------初始化存储系统的编程对象是系统的存储器控制器,一个系统可能存在多种存储器类型的接口,不同的存储系统的设计不尽相同。
Flash和SRAM同属于静态存储器类型,可以合用一个存储器端口;而DRAM因为有动态刷新和地址线复用等特性,通常配有专用的存储器端口。
其中,SDRAM必须在初始化阶段进行设置,因为大部分的程序代码和数据都要在SDRAM中运行。
在HMS30C7202中,与SDRAM配置有关的寄存器有4个:配置寄存器、刷新定时寄存器、写缓冲写回寄存器和等待驱动寄存器,需要根据实际的系统设计对此分别加以正确配置。
SDRAM的初始化过程如下:加电→延迟10ms(各具体SDRAM器件延时时间可能不同)→设置配置寄存器参数→延时→写刷新定时寄存器,设置刷新周期→延时→使能自动刷新→延时→设置模式寄存器(位于SDRAM内部)。
1.4 ARM开发教程之存储器地址分布重映射(remap)和MMU系统一上电,程序将自动从0地址处开始执行。
因此,必须保证在0地址处存在正确的代码,即要求0地址开始入是非易失性的ROM或Flash等。
但是因为ROM或Flash的访问速度相对较慢,每次中断响应发生后,都要从读取ROM或Flash上面的向量表开始,影响了中断响应速度。
一般程序执行后将SDRAM映射为地址0,并把系统程序加载到SDRAM中运行,其具体步骤可以采用以下的方案:(1)上电后,从0地址的ROM开始往下执行;(2)根据映射前的地址,对SDRAM进行必要的代码和数据拷贝;(3)拷贝完成后,进行重映射操作;(4)因为RAM在重映射前准备好了内容,使得PC指针能继续在RAM里取得正确的指令。
在这种地址映射的变化过程中,程序员需要仔细考虑的是:程序的执行流程不能被这种变化所打断,注意保证程序流程在重映射前后的承接关系。
存储器的地址分配是很灵活的,可以将I/O操作映射成内存操作,也可以通过映射对某些不可访问的地址空间进行保护等。
进行存储器初始化设计时,一定要根据应用程序的具体要求来完成地址分配。
对地址管理通过MMU即存储器管理单元实现。
在ARM系统中,MMU通过页式虚拟存储管理,将虚拟空间和物理空间分别分成一个个固定大小的页,并建立两者之间的映射关系,从而实现虚拟地址到物理地址的转换。
MMU还可完成存储器访问权限的控制和虚拟存储器空间缓冲特性的设置。
以下是实现MMU的部分代码:for=(i=1;i<0x1000;i++){pagetable[i]=(i<<20)|MMU_SECDESC;} //建立页表,每页大小为1MB,页表偏移序号是物理地址的高12位;----------------------------精品word文档值得下载值得拥有----------------------------------------------for(addr=SDRAM_BASE;addr<(SDRAM_BASE+SDRAM_SIZE/2);addr+=SIZE_1M)pagetable[addr>>20]=addr|MMU_SECDESE|MMU_CACHEABLE|MMU_BUFFERABLE;//将SDRAM_BASE至(SDRAM_BASE+SDRAM_SIZE/2)空间的设置为不可CACHE和不可BUFFER的for(addr=SDRAM_BASE+SDRAM_SIZE/2;addr< (SDRAM_BASE+SDRAM_SIZE);addr+=SIZE_1M)pagetable[addr>>20]=(addr+0x1000000)|MMU_SECDESC|MMU_CACHEABLE|MMU_BUFFERABLE;//将这段空间的地址映射关系设置为VA(虚拟地址)=PA(物理地址)+0x1000000pagetable[0]=(0x42f00000)|MMU_SECDESC|MMU_CACHEABLE|MMU_BUFFERABLE;//将SDRAM的虚拟地址0x42f00000映射到0处1.5 ARM开发教程之初始化各模式下的堆栈指针因为ARM处理器有7种执行状态,每一种状态的堆栈指针寄存器(SP)都是独立的(System和User三项式使用相同SP寄存器)。
因此,对程序中需要用到的每一种模式都要给SP寄存器定义一个堆栈地址。
方法是改变状态寄存器(CPSR)内的状态位,使处理器切换到不同的状态,然后给SP赋值。
这里列出的代码定义了三种模式的SP指针,其中,I_Bit表示IRQ的中断禁止位;F_Bit表示FIQ的中断禁止位:@;Set up SVC stack to be 4K on top of zero-init dataLDR r1,=installStackADDsp,r1,#2048@;Set up IRQ and FIQ stacksMOV r0,#(Mode_IRQ32|I_Bit)MSRcpsr,r0MOV r0,r0ADDsp,r1,#2048*2MOV r0,#(Mode_FIQ32|I_Bit |F_Bit)MSR cpsr,r0MOV r0,r0----------------------------精品word文档值得下载值得拥有----------------------------------------------ADDsp,r1,#2048*3一般堆栈的大小要根据需要而定,但是要尽可能给堆栈分配快速和高带宽的存储器。
堆栈性能的提高对系统性能的影响是非常明显的。
1.6 ARM开发教程之初始化有特殊要求的端口、设备有些关键的I/O部件必须在使能IRQ和FIQ之前进行初始化。
因为如果在使能IRQ和FIQ之前没有进行初始化,可以产生假的异常中断信号。
程序中初始化了HMS30C7202的串口1用来调试程序与其它设备通信。
串口1是一个通用全双工异步接收/发送器(UART),它支持16C550的大部分功能。
UART有接收缓冲/发送保持寄存器、波特率除数锁存器、中断允许寄存器等9个寄存器。
对串口1的初始化主要是对各寄存器的设置,其实现代码如下所示:_outb(ser_base+0x30,1);_outw(0x8002301c,0xffff9f9f) ;GPIO PORT A EnableRegister_outw(0x800230A4,0x6060) ;GPIO PORT A MultiFunction elect-Registerserial_outb(SERIAL_LCR,0x80);serial_outb(SERIAL_LCR,0x80);serial_outb(SERIAL_DLL,baud_data[cur_baud]);serial_outb(SERIAL_DLM,0x0);serial_outb(SERIAL_LCR,0x03);seial_outb(SERIAL_FCR,0x01);serial_outb(SERIAL_IER,0x00);serial_outb(SERIAL_MCR,0x03);1.7 切换处理器模式,开中断最后转换到应用程序运行所需的最终模式,一般是User模式。
不要过早切换到User模式进行User模式的堆栈设备。
因为进入User模式后就不能再操作CPRS回到别的模式了,可能会对接下去的程序执行造成影响。
这时才使能异常中断,通过清除CPRS寄存器中的中断禁止位实现。
如果过早地开中断,在系统初始化之前就触发了有效中断,会导致系统的死机。
----------------------------精品word文档值得下载值得拥有----------------------------------------------当所有的系统初始化工作完成后,就需要把程序流程转入主应用程序。