基于ARM体系的嵌入式系统BSP的程序设计(通用9篇)
基于ARM体系的嵌入式系统BSP的程序设计 篇1
基于ARM体系的嵌入式系统BSP的程序设计
摘要:在介绍基于ARM体系的嵌入式系统启动流程的基础上,结合编程实例,详细、系统地叙述了BSP(板级支持包)程序的各个组成部分及其具体设计方案,并就实际程序设计中的几个难点问题做了说明。
关键词:ARMBSP嵌入式系统微处理器
ARM公司在32位RISC的CPU开发领域不断取得突破,其结构已经从V3发展到V6。
BSP(BoardSupportPackage)板级支持包介于主板硬件和操作系统之间,其功能与PC机上的BIOS相类似,主要完成硬件初始化并切换到相应的操作系统。BSP是相对于操作系统而言的,不同的操作系统对应于不同定义形式的BSP,例如VxWorks的BSP和Linux的BSP相对于某一CPU来说,尽管实现的功能一样,可是写法和接口定义是完全不同的。另外,仔细研究所用的芯片资料也十分重要,例如尽管ARM在内核上兼容,但每家芯片都有自己的特色。所以这就要求BSP程序员对硬件、软件和操作系统都要有一定的了解。
本文介绍基于ARM体系的嵌入式应用系统初始化部分BSP的程序设计。本文引用的源码全部是基于HMS320C7202芯片设计,并已成功运行。
1初始化过程
尽管各种嵌入式应用系统的结构及功能差别很大,但其系统初始化部分完成的操作有很大一部分是相似的。嵌入式系统的启动流程如图1所示。
1.1设置入口指针
启动程序首先必须定义指针,而且整个应用程序只有一个入口指针。一般地,程序在编译链接时将异常中断向量表链接在0地址处,并且作为整个程序入口点。入口点代码如下:
ENTRY(_start);开始
1.2设置异常中断向量表
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)指针置为向量表中对应中断类型的地址值。因为每个中断向量仅占据放置1条ARM指令的空间,所以通常放置1条跳转指令或向程序计数器(PC)寄存器赋值的数据访问指令,使程序跳转到相应的异常中断处理程序执行。如果异常中断处理程序起始地址小于32MB,使用B跳转指令;如果跳转范围大于32MB,使用LDR指令。
另外,对于各未用中断,可使其指向一个只含返回指令的哑函数,以防止错误中断引起系统的混乱。
1.3初始化存储系统
初始化存储系统的编程对象是系统的存储器控制器,一个系统可能存在多种存储器类型的接口,不同的存储系统的设计不尽相同。Flash和SRAM同属于静态存储器类型,可以合用一个存储器端口;而DRAM因为有动态刷新和地址线复用等特性,通常配有专用的存储器端口。其中,SDRAM必须在初始化阶段进行设置,因为大部分的程序代码和数据都要在SDRAM中运行。
在HMS30C7202中,与SDRAM配置有关的寄存器有4个:配置寄存器、刷新定时寄存器、写缓冲写回寄存器和等待驱动寄存器,需要根据实际的系统设计对此分别加以正确配置。
SDRAM的初始化过程如下:加电→延迟10ms(各具体SDRAM器件延时时间可能不同)→设置配置寄存器参数→延时→写刷新定时寄存器,设置刷新周期→延时→使能自动刷新→延时→设置模式寄存器(位于SDRAM内部)。
1.4存储器地址分布重映射(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位;
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(物理地址)+0x1000000
pagetable[0]=(0x42f00000)|MMU_SECDESC|MMU_CACHEABLE|MMU_BUFFERABLE;
//将SDRAM的虚拟地址0x42f00000映射到0处
1.5初始化各模式下的堆栈指针
因为ARM处理器有7种执行状态,每一种状态的堆栈指针寄存器(SP)都是独立的(System和User三项式使用相同SP寄存器)。因此,对程序中需要用到的每一种模式都要给SP寄存器定义一个堆栈地址。方法是改变状态寄存器(CPSR)内的状态位,使处理器切换到不同的状态,然后给SP赋值。这里列出的代码定义了三种模式的SP指针,其中,I_Bit表示IRQ的中断禁止位;F_Bit表示FIQ的`中断禁止位:
@;SetupSVCstacktobe4Kontopofzero-initdata
LDRr1,=installStack
ADDsp,r1,#2048
@;SetupIRQandFIQstacks
MOVr0,#(Mode_IRQ32|I_Bit)
MSRcpsr,r0
MOVr0,r0
ADDsp,r1,#2048*2
MOVr0,#(Mode_FIQ32|I_Bit|F_Bit)
MSRcpsr,r0
MOVr0,r0
ADDsp,r1,#2048*3
一般堆栈的大小要根据需要而定,但是要尽可能给堆栈分配快速和高带宽的存储器。堆栈性能的提高对系统性能的影响是非常明显的。
1.6初始化有特殊要求的端口、设备
有些关键的I/O部件必须在使能IRQ和FIQ之前进行初始化。因为如果在使能IRQ和FIQ之前没有进行初始化,可以产生假的异常中断信号。程序中初始化了HMS30C7202的串口1用来调试程序与其它设备通信。串口1是一个通用全双工异步接收/发送器(UART),它支持16C550的大部分功能。UART有接收缓冲/发送保持寄存器、波特率除数锁存器、中断允许寄存器等9个寄存器。对串口1的初始化主要是对各寄存器的设置,其实现代码如下所示:
_outb(ser_base+0x30,1);
_outw(0x8002301c,0xffff9f9f);GPIOPORTAEnable
Register
_outw(0x800230A4,0x6060);GPIOPORTAMultiFunctionelect-Register
serial_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寄存器中的中断禁止位实现。如果过早地开中断,在系统初始化之前就触发了有效中断,会导致系统的死机。
1.8呼叫主应用程序
当所有的系统初始化工作完成后,就需要把程序流程转入主应用程序。
图2
2技术难点分析
2.1多种语言的混合编程
ARM有两种汇编指令集:16位THUMB指令集和32位ARM指令集。使用16位的寄存器可以降低成本,而且16位THUMB指令集整体执行速度比ARM32位指令集快,提高了代码密度。为了满足ARM子程序和Thumb子程序互相调用,必须保证编写的代码遵循ATPCS。ATPCS规定了子程序调用的基本规则。
ARM系统结构也支持C、C++以及汇编语言的混合编程。汇编语言和C/C++语言的混合编程,在一个追求效率的程序中比较常见。许多人认为像BSP这样底层的程序应该用纯汇编语言编写,其实不然。用汇编语言编写的程序可读性不高,而且不宜维护,不便于向其它类型的CPU移植,而这些方面却是C语言程序的优势。BSP能否用纯C语言去写呢?也不行。因为某些操作是用C实现不了的。例如操作特殊寄存器的指令、CP15寄存器的指令、中断使能及堆栈地址的设定等。在汇编和C/C++之间的函数调用时,也要遵循ATPCS的定义,还要注意的是用C语言编写嵌入式程序时,要避免使用不能被固化到ROM中的库函数。
混合编程情况下的程序编译及链接后的输出代码与没有混合编程时是不同的。所以当多个源文件如果使用了不同的设置进行编译,相互之间的调用可能产生兼容性问题,对此一定要加以仔细考虑。编译时,要告诉编译器和链接器足够的信息,一方面,让编译器能够使用正确的指令码进行编译;另一方面,在不同的状态之间发生函数调用时,链接器将插入一段链接代码(veneers)来实现状态转换。
2.2MMU的实现过程
页表是实现MMU的重要手段。页表存放在内存中,从虚拟地址到物理地址的变换过程其实就是查询页表的过程。大小为1MB的存储块通常被称为段,图2说明了如何查表进行段式寻址的全过程:32位的虚拟地址可分为12位的一级页表序号和20位的段内地址偏移。12位的一级页表序号和CP15寄存器的C2中的18位变换表基址合并成一级描述符地址查表找出相应的一级描述符;然后,段对应的物理基地址与段内地址偏移量合并成为真正的存储器存取地址即物理地址,读出相应数据。
本文介绍的BSP程序已经在以HMS30C7202为主芯片的开发系统上运行并测试通过,并且成功地引导了Linux内核,文中引用代码可以直接使用。今后可以在此基础上添加命令行解释程序,在引导操作系统前进行存存储器的读写等,扩展开发系统的功能。
基于ARM体系的嵌入式系统BSP的程序设计 篇2
1 系统总体概述
1.1 系统结构
本系统由ARM板、ADU3600板、显示器、母板等组成。
1.2 ARM处理器特点
ARM(Advanced RISC Machine)微处理器体系结构目前被公认为是嵌入式应用领域领先的32位嵌入式RISC微处理器结构,采用32位地址和数据总线,其地址空间达到了232=4GB[2],具有功耗低、性价比高和代码密度高等特点;大量使用寄存器,多数数据操作都在寄存器中完成,指令执行速度更快;寻址方式灵活简单,执行效率高。
1.3 ADU3600板特性
克服了惯性定向产品精度随时间和温度漂移的缺陷,用载波测量技术和快速求解整周模糊度技术,解算出两个GPS接收机天线处位置和两天线相位中心连线与真北之间的夹角。
2 系统硬件设计
2.1 数据接收电路
选用的GPS天线为零相位测量型天线,馈线与天线在阻抗、增益、放大倍数等方面与标配的天线有很好地匹配。
前天线:用天线馈线一端连接接口,另一端连接GPS前天线(前进方向)。
后天线:用天线馈线一端连接接口,另一端连接GPS后天线(后退方向)。
GPS后天线相位中心到GPS前天线相位中心的连线我们称为基线。基线与真北间的夹角我们称为方位角。基线越长定向精度就越高,通常基线长度增加一倍,定向精度也会提高一倍。应尽可能将两个天线安装间距拉长,这样可提高定向精度。
2.2 数据处理电路
接收板通过两条GPS天线接收到数据后,进行第一次数据处理、分类、打包等,然后通过串口把处理后的数据经由母板传送给主板,主板接收到数据后,进行第二次数据处理、分类、打包等一系列工作,最后通过显示屏把相应的数据进行显示,并同时通过串口经由母板把数据发送给外设。
2.3 接口电路
(1) 显示接口
液晶显示器(LCD)具有耗电省、体积小等特点,被广泛应用于嵌入式系统中。LCD显示器就是通过给不同的液晶单元供电,控制其光线的通过与否,从而达到显示的目的。
(2) 串行接口
本系统采用的RS-232C是由美国电子工业协会EIA制定并采用的一种串行通信接口标准,已经发展成为一种国际通用的串行通信接口标准。
3 系统软件设计
嵌入式软件可以分为三大类:系统软件、应用软件和支撑软件。系统软件控制和管理嵌入式系统资源,为嵌入式应用提供支持的各种软件,如设备驱动程序、嵌入式操作系统等;应用软件是嵌入式系统中的上层软件,它定义了嵌入式设备的主要功能和用途,并负责与用户进行交互;支撑软件是辅助软件开发的工具软件,如交叉编译器、在线仿真工具等。本系统中的系统软件和应用软件是运行在嵌入式设备上,支撑软件运行在普通PC机上。
3.1 板级支持包
设备驱动层也叫板级支持包(Board Support Package,BSP),它包含了嵌入式系统中所有与硬件相关的代码,并向上提供一个虚拟的硬件平台使操作系统运行其上。它包括引导加载程序Bootloader和设备驱动程序。Bootloader是在操作系统内核运行之前运行的一小段程序,通过这段程序,我们可以初始化硬件设备、建立内存空间的映射图、从而将系统的软硬件环境设置到一个合适的状态,以便为最终调用操作系统内核做好准备;设备驱动程序就是一组库函数,用来对硬件进行初始化和管理。并向上层软件提供良好的访问接口。
3.2 嵌入式操作系统(Embedded Operating System,EOS)
本系统采用的VxWorks是美国WindRiver System公司开发的一款嵌入式实时操作系统,具有良好的可靠性和卓越的实时性,是目前嵌入式系统领域中使用最广泛、市场占有率最高的商业系统。它基于微内核的体系结构,采用GNU类型的编译和调试器,多数API函数都是专有的。
3.3 集成开发环境
Tornado是WindRiver公司推出的一个集成开发环境[2]。
3.4应用软件
本系统程序采用标准C语言编写,在Tornado集成开发环境中调试,通过串口或网络通信线路传输并装载到ARM板中,最终脱离宿主机在ARM板中单独运行。
4 系统性能指标
(1) 定位误差不大于30 m,定向误差不大于0.06°;
(2) 定位定向不超过2 min;
(3) 阳光下可读的EL显示器;
(4) 总功率不超过10 W;
(5) 包装箱体积不大于410 mm×322 mm×216 mm,质量不大于20 kg;
(6) 适合于-40 ℃~50 ℃工作,适合于-55 ℃~60 ℃储存。
5 结束语
本系统在综合考虑硬件平台、嵌入式处理器、外围设备、接口电路的基础上进行硬件设计,经测试达到硬件的稳定性和可靠性要求;软件设计中嵌入式平台、操作系统、编程语言、集成开发环境的选择上充分考虑了系统的实时性和可扩展性。
摘要:依据开发周期中软、硬件的划分,介绍系统在ARM处理器强大功能的基础之上,运算、处理、显示ADU3600板收集到的数据的过程;在详细阐述系统综合性能指标的基础上展现了产品应用的广阔前景。
关键词:ARM,ADU3600,处理数据
参考文献
[1]李忠民,杨刚,顾亦然,等.ARM嵌入式VxWorks实践教程[M].北京:北京航空航天大学出版社,2006.
基于ARM体系的嵌入式系统BSP的程序设计 篇3
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组成文件主要包含在四个目录下:
dotargetconfigall:所有BSP的公共部分
dotargetconfigcompsvxworks描述文件(*.cdf)
dotargetconfigcompssrc文件(被usrConfig.c使用)
dotargetconfigbspname:与目标板相关的部分
3、BSP的函数构成。
sysLib.c中应该实现以下函数:
①系统时钟中断相关的函数:sysClkConnect(),sys-ClkDisable(),sysClkEnable(),sysClkInt(),sysClkRateGet(),sysClkRateSet();
②系统硬件初始化函数:sysHwInit(),sysHwlnit2()
③内存相关的函数:sysMemTop(),sysNvRamGet(),sysNvRamSet()
④串口相关的函数:sysSerialHwlnit(),sysSerialHwInit2(),sysSeriaIChanGet()
⑤杂项函数:sysBspRev(),sysModel(),sysToMonitor()
其它函数如:辅助时钟中断相关函数,总线相关函数。
VxWorks系统的BSP设计
1、VxWorks的引导过程。在编写BSP之前,首先要了解整个系统的启动过程。VxWorks的映像由代码段、数据段和BSS段3部分组成。VxWotks内核可以分为3种:可加载类型映像、基于ROM的VxWorks映像和RoM驻留型映像。这3种类型的映像组织是不一样的,因此启动过程有所区别。
(1)可加载映像包括VxWorks和BootROM两部分内容,两部分是独立创建的。首先,由系统引导代码把ROM引导程序搬到RAM_HIGH_ADRS。然后,ROM引导程序开始运行,将VxWorks映像加载到RAM_LOW_ADRS,之后跳转到VxWorks映像装入点。(2)基于ROM的VxWorks映像在BSP初始化时,会把Image完全搬到RAM中执行,包括代码段和数据段。在拷贝执行完毕后,系统控制权转移给RAM中VxWorks映像的初始化代码。(3)ROM驻留型映像只是将ROM中VxWorks映像的数据段和BSS段拷贝到RAM中,完成后系统控制权转移给ROM/Flash里VxWorks映像的初始化代码,代码段留在ROM中并在ROM中运行。在ROM中运行的VxWorks映像主要是为了节省RAM空间,带来的不利则是运行速度变慢。
2、WorksOS下BSP构建。在开发BSP的时候,需要在Tornado原带BSP目录下找一个与所用的处理器相同或相近。与BSP相关的文件有:romInit.s、sysAlib.s、bootInit.c、bootConfig.c、sysLib.c、config.h、eonfigNet.h、makefile以及与硬件相关的。根据S3C4510B微处理器来设计BSP开发步骤。
(1)拷贝BSP。将wrSBCAnn7BSP拷贝一份并命名为4510BSP,再修改该目录下的文件,从而得到自己的BSP。
(2)修改MakeFile文件。修改4510BSP目录下的makefile文件,具体修改的几行可根据处理器的不同去选定修改。BOOTROM的入口地址、装载Vxworks的地址和绝对地址,这些地址对于S3C4510B来说都应该是重映射后的地址。
(3)修改config.h文件。主要是修改ROM_BASE_ADRS、ROM_TEXT_ADRS、ROM_SIZE、RAM_LOW_ADRS、RAM_HIGH_ADRS和under掉不需要的部分。这些应和makefile文件中设置的一致。
(4)修改romInit.s文件。CPU一上电就开始执行romInit()函数,因此在romInit.s代码段中它必须是第一个函数。对于热启动,处理器将会执行romInit()加上4后的代码(具体参考sysLib.c中的sysToMonitor()函数)。更多的硬件初始化在sysLib.c中sysHwInit()函数中,romInit()的工作就是做较少的初始化并把控制权交给romStart()(在bootInit.c文件)。
(5)利用tsfs下载。要利用tsfs下载VxWorks,配置内容如下:①在config.h文件中添加显示引导信息和VxWorks调试的内容。②配置targetserver。
基于ARM体系的嵌入式系统BSP的程序设计 篇4
引 言
USB(Universal Serial Bus)是通用串行总线的缩写,因其具有方便易用,动态分配带宽,容错性优越和高性价比等特点,现已成为计算机的主流接口。
随着嵌入式系统的广泛应用,各种小型终端需要开发出与外界联系的USB接口。目前,常用的技术有两种。基于单片机的USB接口,特点是需要外置芯片,电路复杂,留下的CPU资源不多;基于ARM的USB接口,特点是资源丰富,但ARM系列产品较多,如果选型不当,还需要搭接较多的外围电路,且不能很好地发挥CPU性能。USB 接口原理
USB1.1 规范[1]将USB 分为5 部分:控制器、控制器驱动程序、USB 芯片驱动程序、USB设备以及针对不同USB 设备的客户端驱动程序。
(1)控制器(Host Controller)主要负责执行由控制器驱动程序发出的命令。
(2)控制器驱动程序(Host Controller Driver), 在控制器与USB 设备间建立通信
管道(Pipe)。
(3)USB 驱动程序(USB Driver),提供对不同USB 设备及芯片的支持。(4)USB 设备(USB Device), 有两类USB 设备:一类称为功能设备(Function),另
一类是称为USB 集线器(HUB),可以连接多个USB 设备。
(5)USB 设备驱动程序(Client Driver Software)及特定应用程序。主控制器的驱动软件由操作系统支持,USB 设备开发人员一般只需编写客户驱动程序,实现特定功能,设备端所有功能软件需要全面设计。USB 的四种数据传输模式分别是:控制型传输、中断型传输、批量型传输、实时型传输。第一种在缺省通道中传输USB 接口本身的配置等控制信息,后面三种用于功能部件传输数据。中断型用于键盘等的异步输入输出少量数据传输,批量传输主要用于象硬盘等块设备的数据传输,在中断和批量的传输过程中要传递交互握手信号,确保数据准确无误。实时传输对带宽有严格要求,但允许有一定误码,省去了交互握手信号的传递,常用于音视频码流数据传输。四种类型数据都按带宽要求分配在1ms 一帧的数据帧内进行传输,连到端点(EndPoint)通道.1.1嵌入式系统USB 接口设计
要满足高性能ARM嵌入式系统的要求,扩展USB接口必须选择高性能USB控制器芯片,Philips公司的PDISUBD12 USB器件,是与微处理器配合使用的高性能USB接口器件,性价比很高[2][4]。PDIUSBD12主要特性有:
(1)符合USB 1.1 技术规范;
(2)USB控制器并行接口与处理器间的数据传输速度高达2M 字节/秒;(3)在批量模式和同步模式下均可实现1M 字节/秒的数据传输速率;(4)集成了FIFO存储收发器,支持DMA 操作;(5)内置时钟倍频PLL电路,可编程时钟频率输出;(6)多中断模式实现批量和同步传输;
1.2音频码流USB 设备驱动程序
Windows2000 中各种USB 设备客户驱动程序结构框架基本相同,可以从Windows2000 DDK 中获得USB 设备驱动程序范例代码,对范例代码作少量修改就可以满足特定功能需要。图1 显示了驱动程序各层间的数据传递关系,底层USB 主控制器驱动程序(USB Host Driver)由操作系统提供支持,设备驱动程序只需要对USB Host Driver 上传的I/O 数据包IRP 作出响应,并把要输出数据以IRP 形式下传给USB Host Driver 即可[5] [6]。在ISO(实时型)模式下传输音频码流,USB 客户程序除了WDM(Windows Driver Model)驱动常规处理外,必须计算好带宽,并为驱动程序在非分页存储区内分配好环行缓冲区(Ringbuffer),以便USB 主控制器可以不间断输出实时数据。RingBuffer 的大小按下式 计算:
每帧字节数 × 每缓冲帧数 × 缓冲区数 ; 每传完一缓冲区,USB Host Driver 回调(CallBack)一次客户驱动程序,USB 带宽
按每1ms 传送1 帧数据来分配,要实现8kHz 采样频率、8bits 编码的音频PCM 码流传输,帧数据包大小必须设为8Bytes,若设置4 个缓冲区交替工作,每缓冲区分20 帧传送, 则RingBuffer 的大小为640Bytes,那么USB 主控制器每20ms 的频率中断回调一次客户驱动程序是合适的。驱动程序通过IoSetCompletionRoutine()函数给每个IRP 设置回调函数入口地址[6],每完成一个IRP 缓冲区数据传送操作,回调一次该地址指向的函数,以便把下一缓冲包数据压入到IRP 栈,直到全部数据流传送完毕或人为终止传送。S3C2440A特点
S3C2440A的CPU部分主要集成了电源模块、复位和时钟模块、触摸屏和小键盘模块、程序存储器和数据存储器模块。同时提供如下丰富的外围接口:同步存储器(SDRAM)和NAND FLASH控制接口,可扩展到1 GB的存储的空间;4个DMA通道和24个中断端口;能控制STN LCD和TFT液晶屏显示,支持触摸屏功;USB接口A型和B型各一个;3个串行口、I2C,SPI,I2S等接口;带AC97音频接口;具备SD卡、数码相机接口和网络接口。
S3C2440A还具备多种工作模式,管脚为17×17方型分布,横向从左1到右17编号,纵向从下A到上U编号,分类为A1~A17,B1~B17,C1~C17依此类推到U1~U17。这些管脚所对应的功能并不是惟一的,通常只要使能变化,S3C2440A就能实现不同的控制功能。该设计涉及到的 S3C2440A,其管脚如表1所示分为3类。
串口电路
串口在该设计中的作用是通过计算机加载USB驱动程序,原理如图2所示。
3.1电源电路
由于S3C2440A芯片的管脚对电压提出了不同要求,所以需要完成电源的变压,其原理 如图3所示。驱动程序的研究
按USB接口,其设备结构可分为USB Host(主机)和USB Device(外部设备)。USB主机控制USB设备进行通信,而主机与主机之间,或USB设备与USB设备之间是不能通信的。
4.1 USB主机
USB主机的功能通常包含以下几个部分:验证USB设备是否安插好或拔除;控制USB主机与设备两者中的数据流;返回USB主机的所显状态。
USB系统软件由以下3个部分组成:主机控制器驱动(HCD)、USB驱动(USBD)、主机软件(Host Software)。主机控制器所具备的功能如表2所示。HCD和USBD包含基于不同抽象层次的软件接口,两者以一定的方式协同完成任务,用以实现 USB系统的功能。它们的任务差别没有具体定义,然而HCD要具备的一项功能就是必须支持多种不同主机控制器芯片。在一些操作系统中,当系统必须实现某些基本功能时,可由Host Software实现。
4.2 USB传输类型
USB定义了4种传送类型:控制传送、同步传送、中断传送、批传送。其中,控制传送是指可靠的、非周期性的、突发的,并由主机客户软件所发起的通信,主要应用于控制命令和状态信息的传送;同步传送是指在主机和设备之间周期性的、连续的通信,一般用于传送时实信息,这种类型保留了将时间概念包含于数据的能力,但传送并不一定很紧急;中断传送是指少量数据的、低速的、周期的传送;批传送是指非周期的、大量的、可靠的传送,其典型应用在于传送那些可以利用带宽的数据。
4.3 USB设备请求
USB设备应通过缺省控制管道(Default Control Pipe)响应来自主机的请求命令。这些请求是通过使用控制传输来完成的。请求及请求的参数通过Setup包发向设备,由主机负责设置Setup包内的每个域的值。USB设备请求包含的请求类型有三种:标准、厂商和设备类。标准请求用来完成设备的枚举过程;厂商请求用来完成使用者自己定义的请求;设备类请求指的是某些特定的USB设备类所传输出的请求,例如打印机类就属于这一类。设备请求要求有严格的定义,包含的内容有类型、设备请求、值、索引和长度。
4.4 USB驱动程序结构 S3C2440A芯片支持USB1.1协议和USB 2.0协议。该设计是针对USB Host(主机,A型),并基于USB 1.1协议编写的。程序结构和数据传输的流向如图4所示。
驱动程序的编写主要分为以下几个部分考虑:硬件提取层、中断服务程序、标准设备请求和主循环。硬件提取层实现的是S3C2440A对I/O端口直接的读写操作;中断服务程序处理各种中断,包括总线任务上的请求;标准设备请求完成主机送来的各种标准请求,用于完成各种枚举请求;而主循环则负责完成前台的数据采集等工作,所有的任务结束后都要回到主循环上去。
5结 语
基于ARM体系的嵌入式系统BSP的程序设计 篇5
由于各种新型微处理器的出现和应用的不断深化,嵌入式系统嵌入式系统在后PC时代得到了空前的发展。随着时间的推移和技术的进步,在工业控制和新兴的手持式应用等领域,用户体验成为产品成功的关键因素之一,越来越多的产品需要良好的用户界面、互联功能以及较强的数据处理能力,这对嵌入式处理器硬件、软件、教学等提出了新的要求。
嵌入式处理器与硬件
在处理器方面,目前大量的中、低端嵌入式应用,主要使用8/16位单片机。在国内,由于历史的原因,主要是以MCS51核为主的许多不同型号单片机,主要厂商有Atmel、Philips、Winbond、宏晶等。还有一些近几年发展较快的新型单片机,如PIC、AVR、MSP430系列等。这些单片机各有特点,但从目前的发展角度来看,单片机针对特定应用领域的个性化发展愈发明显,典型的例子就是TI公司的MSP430系列16位单片机、ST公司的STM8L系列8位单片机和STM32L系列32位超低功耗单片机。
在嵌入式中的高端应用领域,像工业控制、POS机、网络设备、图像处理、手机、PDA等,目前主要使用ARMARM、MIPS、PowerPC、DSP等16~64位处理器,以32位处理器为主。各种类型的处理器都有其一定的应用针对性。例如,DSP对数字信号处理技术中用到的常用运算、算法做了优化设计,主要用于实时信号处理领域,如实时音视频处理、电机控制等。MIPS处理器性能很好,但功耗较大,适合于有交流电源供电的固定应用,如固定的网络设备、机顶盒等。ARM处理器性能高,功耗低,适合于用电池供电的便携、手持式设备。由于近几年便携、手持式嵌入式应用的高速发展,ARM处理器的增长速度和市场占有率也快速提升,成为目前32位应用中的主力产品。
由于嵌入式应用系统的广泛性,嵌入式系统的硬件设计涉及的知识面很广,从模拟到数字、低频到高频、小信号到大功率,以及复杂的时序逻辑设计和PCB设计,还要考虑软硬件资源的合理分配,不仅要有广而扎实的理论基础,更需要丰富的实践经验。只有对大大小小各种应用系统反复实战演练,了解新技术、新器件,使用过多种多样的处理器和模拟/数字器件,才能逐步积累,聚沙成塔,对一个新的应用系统给出快速、合理的硬件方案与设计。
ARM处理器的优势
对于如今大量出现的32位嵌入式应用,以笔者之见,ARM处理器的优势主要有以下几个方面。
2.1 高性能、低功耗、低价格
把ARM处理器的性能拿来和一些著名的通用处理器(如Pentium)相比是不合适的,因为他们各自针对的应用需求是不同的。Pentium处理器采用多条指令流水线的超标量结构,追求通用应用目标下的超强性能,功耗大,可以用散热器加风扇散热。ARM针对嵌入式应用,在满足性能要求的前提下,力求最低的功率消耗。ARM结构的优点是能兼顾到性能、功耗、代码密度、价格等几个方面,而且做得比较均衡。在性能/功耗比(MIPS/W)方面,ARM处理器具有业界领先的性能。基于ARM核的芯片价格也很低,目前ARM CortexM的芯片价格可低至10元人民币左右。
2.2 丰富的可选择芯片
ARM只是一个核,ARM公司自己不生产芯片,采用授权方式给半导体生产商。目前,全球几乎所有的半导体厂家都向ARM公司购买了各种ARM核,配上多种不同的控制器(如LCD控制器、SDRAM控制器、DMA控制器等)和外设、接口,生产各种基于ARM核的芯片。目前,基于ARM核的各种处理器型号有好几百种,在国内市场上,常见的有ST、TI、NXP、Atmel、Samsung、OKI、Sharp、Hynix、Crystal等厂家的芯片。用户可以根据各自的应用需求,从性能、功能等方面考察,在许多具体型号中选择最合适的芯片来设计自己的应用系统。由于ARM核采用向上兼容的指令系统,用户开发的软件可以非常方便地移植到更高的ARM平台。
2.3 广泛的第三方支持
以如今的技术,设计一个处理器并非难事,但要使这个处理器得到大家认可,并取得市场成功却是非常困难的,其中涉及许多技术与非技术的因素和环节,还包括时机、运气。因为现在许多产品的开发,不是一个简单的处理器加几百条指令、语句就可以解决的。要用到32位处理器,一般都要有编译器、高效的开发工具(仿真器及调试环境)、操作系统、协议栈等,这些东西都不是一个芯片生产商可以解决的,而需要许多第三方的支持。这就像一粒种子,需要土壤、空气、水等环境才能发芽、成长。这也是我们的一些“中国芯”该反思之处。
ARM通过近20年的培育、发展,得到了广泛的第三方合作伙伴支持。目前,除通用编译器GCC,ARM有自己的高效编译、调试环境(MDK、Keil),全球约有50家以上的实时操作系统(RTOS)软件厂商和30家以上的EDA工具制造商,还有很多高效率的实时跟踪调试工具的厂商,对ARM提供了很好的支持。用户采用ARM处理器开发产品,既可以获得广泛的支持,也便于和同行交流,加快开发进度,缩短产品的上市时间。
2.4 完整的产品线和发展规划
ARM核根据不同应用需求对处理器的性能要求,有一个从ARM7、ARM9到ARM10、ARM11,以及新定义的CortexM/R/A系列完整的产品线。前几年应用较多的主要是基于V4架构的ARM7TDMI、ARM720T、ARM920T核的一些处理器芯片,如NXP的LPC2000系列、ST的STR7/9系列、Atmel 的AT91系列和Samsung的S3C系列。近两年,ARM Cortex系列以更好的性能、更低的价格得到快速推广,典型的就是基于CortexM3的STM32系列。
ARM CortexM/R/A系列分别针对不同的应用领域。M系列主要面向传统微控制器(MCU/单片机)应用,这类应用面很广,要求处理器有丰富的外设,并且各方面比较均衡;R系列强调实时性,主要用于实时控制,如汽车引擎;A系列面向高性能、低功耗应用系统,如智能手机。选用ARM处理器进行开发,技术积累性较强,生命周期长,设计重用度高,不易被淘汰。用户在选择ARM处理器时,可以针对应用需求,从大量的ARM芯片中选用满足性能、功能要求的产品,以获得较好的性价比。
ARM嵌入式系统的软件
由于嵌入式系统的差异性很大,对不同的应用需求,必须选择不同的软件设计方法、开发平台和系统工具。
对于一些不需要复杂图形用户界面、通信协议和复杂文件操作(如同时打开多个文件)的应用,如果选用CortexM3核的处理器就已可以满足要求,任务数不多,任务之间的关系也不复杂,则不一定需要移植复杂的操作系统。这样一方面可以降低系统硬件开销,也可以获得更好的实时性和执行速度。不过,这样的软件开发方法需要开发人员有较好的程序设计思想,对所用器件有深入的了解,并掌握其编程控制方法。若引入一个简单的操作系统,如μC/OS,可以简化程序结构,但开发者最好熟悉其内核结构,并有使用经验,否则可能会需要更多的系统开发、调试时间。
如果选择了带存储器管理单元(MMU)的ARM处理器(如ARM920T、CortexA8等),这种应用系统根据应用、实时性、开发环境等因素,移植一个功能较强的操作系统一般情况下会比较合适,如Linux、WinCE,甚至新的Android等。这种系统的开发难度主要是在OS的移植以及硬件驱动程序的开发上。当这二步工作完成后,主要的软件开发工作已和在PC机上开发没有多大区别,可以按照一般的软件工程方法来进行,要注意的只是与ARM硬件平台相关的软件优化问题。
由于嵌入式系统硬件资源的有限性,嵌入式软件与其他应用软件的主要区别,在于嵌入式软件要有较高的效率,包括执行速度和存储空间,尽管这二者经常是相互矛盾的。目前一般要求更多的是速度优化。要编写出高效的ARM程序,需要开发人员熟悉ARM的体系结构,包括内核结构、指令系统、Cache与存储器结构等,还要有好的程序设计思想,以及对一些常用函数、算法的深刻理解。这个过程也是ARM系统开发从低级到高级的进阶之路。
目前,由于应用系统越来越复杂,嵌入式软件的移植性和重用性也得到了人们的高度重视,因为它直接影响到嵌入式软件的开发效率和质量。选择一种通用的开发环境和高级编程语言,使开发的嵌入式软件可以方便地移植到不同的硬件平台,是实现软件重用的基础。目前在ARM嵌入式系统开发中,ARM RealView、Keil以及IAR的EWARM是较好的开发平台,C/C++语言是应用最广泛的编程语言,并具有广泛的库函数、程序支持,在今后很长一段时间内,仍将在嵌入式系统应用领域中占重要地位。
嵌入式系统的教学
如今,嵌入式系统作为一个热门领域,其教学问题也颇受高校的关注。教学的主要目的是培养社会需要的人,由于嵌入式系统的广泛性、差异性,社会对从事嵌入系统开发人员的要求也有很大的不同,既需要从事简单8/16位单片机开发的人员,也需要从事ARM、DSP开发的人员;既要有从事硬件、底层软件开发的人员,也要有从事OS移植、应用软件开发的人员。由于整个大学学习时间和课程教学时数的限制,一个人显然不可能学习、掌握嵌入系统开发的各个层面。所以,各个学校首先应根据自身情况,明确定位,确定自己培养学生的社会适应面,然后再制定教学大纲,确定课程内容和实验平台。对于高职、普通高校的电类与非电类专业、软件学院等,都应该有不同的选择,而不是人云亦云,一哄而上。
就目前的发展看,由于ARM等32位处理器应用渐成主流,开发工具已较完善、成熟,对于普通高校计算机学科的嵌入式系统教学,笔者认为可以定位在以32位嵌入式系统开发为主,重点是嵌入式系统的软硬件结构、嵌入式OS的知识,以及嵌入式软件设计(包括优化)。课程主体内容基本与硬件平台(处理器型号)无关,实验可以采用基于ARM核的不同厂家处理器的实验平台。主要考虑以下几点:
①在32位嵌入式系统开发上,软件开发人员的需求比硬件开发人员要多得多(尽管目前硬件开发人员较难找,但这应该是电子等专业培养的)。一般在一个从事嵌入式应用系统开发的公司中,软硬件人员的比例不会小于10:1。由于学习时间有限,教学重点应该偏软件。
②现代社会强调分工、合作,以求得整体利益的最大化。对个人的要求首先是专才,能把局部工作做精、做好。通才是需要的,但数量会比专才少得多,而且通才是练出来的,不是教出来的。今后的大学是大众教育,教学只能面向大众需求。在相关专业的研究生阶段,对一些有基础、有兴趣的学生,可以进行一些系统级硬件、底层软件的开发实践,同时也可满足社会对高层次嵌入式人才的需要。
③以此为主,可以再开设2门选修课。向下为“单片机原理与应用”,此课程以实践为主,让有兴趣的学生可以自己设计、制作一些单片机应用系统,同时也锻炼了硬件动手能力。向上为“数字信号处理(DSP)”,让那些数学基础较好、对实时信号处理有兴趣的学生有用武之地(现在这样的学生很难得)。
另外,由于应用日趋复杂,而教学时间有限,一个本科生在校期间不可能深入学习嵌入式系统的很多细节,嵌入式教学应采用自上而下的教学方法。一开始不必花很多时间讲解处理器内核架构/指令系统,只要知道各种内核的基本特点即可,重点学习、掌握处理器、外设的编程结构(即编程者角度看到的编程模型结构,非具体物理实现结构)。真实的应用、研究设计都是从粗粒度向细粒度进阶的,是一个自顶向下的过程,首先要重视的是系统架构和各个抽象层。1000行的C程序,编译后生成的目标代码只有10 KB左右,试想现在的MCU Flash动辄几百KB,为什么?一个目标代码几百KB的C程序,一般不是完全由个人写出来的,而都会使用一些第三方的库函数、中间件等。硬件也一样,现在很多硬件系统都会使用一些模块(Module),尽管这些模块看上去还是一个芯片,但实际上已经是一个SiP模块,如WiFi模块。所以,在了解基本嵌入式系统结构的基础上,本科阶段要更多地学习各种系统、模块、外设、协议、库函数的“边界(InteRFace)”,能够搭建一个简单系统(How to do),今后在工作、或研究生阶段进一步去做好一个系统(How to do better)。
5结语
基于ARM体系的嵌入式系统BSP的程序设计 篇6
1 ARM嵌入式系统
在数字视频的场或帧辅助数据区, 由EBU定义为“VANC” (Vertical Anicillary Data) 。我国广播电影电视行业标准GY/T160-2000《数字分量演播室接口中的附属数据信号格式》, 是等效采用ITU-RBT1364建议书标准, 规定了数字分量演播室应用的嵌入到视频数据信号中的辅助数据格式, 如图1所示。
根据SMPTE291M标准定义对辅助数据包和空间格式的界定为以下序列:
分量视频数据信号的运载形式是以数据包站爱的, 这种辅助数据区中的数据包对于整个整体来说有很大的意义, 而且分量数据信号在整个辅助数据包内不能随意放置, 每个包的包头都有标识, 容易被识别, 而且根据不同的标准, 在数字视频的串行数据流中有不同的通道, 最多可以同时发送16个通道的信号, 还同时可以对于20或24比特的声音信号进行同时运载。这些串行数据一般都会在EAV后紧紧的存放, 不能发生孔隙, 孔隙会产生误差, 而且对于检测信号来说, 就会产生错误的警报, 而导致程序减慢, 所以行辅助数据区的剩余部分要让其他的数据使用, 不能有空行等发生。
2 嵌入式的规则和方法
目前辅助数据中用途最多的就是对于音频的放置, 也就是嵌入音频, 这种方法都是用于电视的视频和音频的系统, 最大的有点就是对于电视信号的传输中音画同步的传输和协调, 而且因为嵌入音频的和视频可以用同一根电缆进行传输, 所以设备系统的简化程度大大增加了。
音频信号先打包传送, 以192个连续帧组成的一个块为一次打包传送的单位, 这其中每个帧代表着一个音频通道, 每个帧的两个子帧用来放置一个音频取样字, 所以仅仅一个数字音频的码就可以作为立体声、双声道模式使用, 起作用不容小觑。
每个帧包含两个子帧, 每个子帧都有4比特的前置码, 24比特的音频数据。在数据位后的4比特, 分别是有效标志位V (Validity) , 用户数据位U (UserData) , 通道状态位C (ChannelStatus Data) 和子帧的奇偶校验位P (Parity) 。帧的传输速率与源取样频率要严格对应。
数字音频数据的嵌入实际上就是将其看成是附属数据与数字视频数据何为一路的过程, 在信息系统上也认为这实际上是采用的时分复用的方法来进行的。
对于辅助数据区域内的位置都可以进行嵌入式音频的放置, 但是在放置的过程中要对于标准进行严格的规定和嵌入, 而且最多要在16个通道平行放置好音频数据时, 要对于通道进行划分, 一般划分为4组, 每个组的含量就是两队, 通过这两对来进行音频的防止, 并且进行传送AES/EBU音频信息的放置, 这两种附属数据包即音频数据包和音频控制包, 他们的异同在于, 均符合下表所示的附属数据包的格式, 但是在用户数据部分和相关的标识符上两者存在着很大的区别。
表1是音频数据包和音频控制包的用户数据标识字。可以看出, 通过DID字, 既可以识别音频数据包和控制数据包, 也可以区分同一类型音频包中的不同音频组。
音频数据包中携带有数字音频的样值数据, 按照标准规定, 它放置在CB/CR色差信号并行数据流的行附属数据区内。音频控制包中所含数据则用于音频数据流的解码处理, 每场仅传送一次。有关音频数据的嵌入过程和这两种音频包的具体结构, 下面分别予以介绍。
图2表示了音频数据的嵌入过程。因为文章的篇幅和重心, 所以笔者在这里只画出了一个通道对 (AES/EBU 1为第一通道对, AES/EBU2为第二个通道对) 中一个通道的嵌入示意, 通道对3、4的嵌入完全相同。音频控制包的作用是为接收端提供必要的解码信息, 如音频通道对的取样频率和同步/异步指示、通道的有效性指示以及通道对音频/视频时延等。
音频控制包在第二个行辅助数据区内, 而且在切换点之后放置, 一般会处在奇数的第8行和偶数场的第321行。每场传送一次, 音频控制包中含有音频帧序号、取样频率和各通道音频/视频间的相对时延等信息, 对于48KHz同步运行模式, 音频控制包的传送是可选的, 但对其他运行模式, 则是必需的。
3 结论
而且基于FPGA的嵌入式处理器 (如Nios II) 的适用性非常广, 大部分多媒体产品, 可以说对于从最小的消费产品到最大的专业视频产品的各类多媒体系统都需要这个产品, 基于FPGA的嵌入式处理器 (如Nios II) 向设计者提供了灵活地定制各种要求的能力, 所以也是深受大公司欢迎的产品。
摘要:本系统主要实现了音视频数据的实时采集、实时处理、网络传输等功能, 采用FPGA接收实时数字音视频流, 对数据进行存储和检测操作, 如无声静帧、黑场、彩场、音频杂音检测等, 然后将预处理后的音视频数据传送到DSP做进一步处理。
关键词:ARM分析,嵌入式,硬件
参考文献
[1]李宁.HD-SDI信号的特征及检测方法的提案[J].现代电视技术, 2004.
[2]刘常杰.基于FPGA高速视觉检测系统的研究[J].仪器仪表学报, 2001.
[3]夏宇闻.Verilog HDL程序设计与应用[M].北京:人民邮电出版社, 2005.
[4]TexasInstrumentsIncorporated著.王军宁, 何迪, 马娟等编译.TI DSP/BIOS用户手册与驱动开发.清华大学出版社, 2004.
[5]ALTERA器件选型手册[Z].
基于ARM体系的嵌入式系统BSP的程序设计 篇7
1 基于ARM嵌入式系统的综述
1.1 ARM
什么是ARM架构?它是一个32位元精简指令集中处理器结构, 在这个架构作用下的产品主要的特点有功耗低、成本廉价[1], 一般有RISC处理器以及与之相关的技术和软件等, 在现代社会中被广泛应用于多媒体、DSP以及嵌入式控制等相关领域中。因为它自身具有十分明显的节能效果, 因此, ARM处理器在移动通讯领域应用十分广泛, 这与其设计目标——耗电低的特性是相一致的。
1.2 嵌入式系统
嵌入式系统包含有软件和硬件两大部分, 前者有ARM操作系统;后者包括硬件系统的设备平台。从其自身结构的构成来讲, 主要包括存储器、处理器、输入输出软件等部分, 其中处理器是核心组成部件, 发挥着关键性的作用。虽然现在这方面的处理器类型有很多, 但是就其自身的应用效果来说, 嵌入式处理器还是具有高性能、能耗低优势的[2], 那么除了处理器外, 另一个重要的部分就是存储器了, 对于它来说, 它需要和处理器保持一致, 就单单功能发挥方面来说, 存储器的稳定性和容量大小需要特别关注, 剩下的其他外围设备在进行选择时只需要从实际需求来定就可以了。
2 基于ARM嵌入式系统的整体内容和内容设计分析
我国对于这方面的研究工作一直处于不断的发展中, 随着网络计算机技术的普及, 嵌入式系统的设计内容也在逐渐变化改进, 越来越符合现代生产的需求。
2.1 处理器方面的设计分析
ARM基础上的嵌入式系统在硬件上有明显的独特性, 它自身所具有的优势特点是很多现有处理器无法比拟的, 它不仅在体积大小上有很强的灵活性, 而且也不会浪费资源, 性能作用十分良好, 在实际应用中是十分明显的[2]。处理器作为硬件系统的重要环节, 它的地位是核心位置, 那么依据于处理器设计的要求, 就要重点关注它的性能、质量以及保护, 精简成分, 促进处理器运作效率的提高, 从而保证系统使用的高效完美。
2.2 外围接口的设计分析
对于嵌入式系统的硬件来说, 在进行设计时要选择适合的配件, 并且保证各个配件之间的衔接和组合都是完美合理的, 这样可以有效确保其整体运作质量的提高。对于外围接口的设计来说, 要保证灵活和巧妙, 尽可能的保证小巧化, 与嵌入式系统的自身特点相吻合, 精简的外围接口设计, 可以大大提升硬件系统运作的安全性和稳定性, 对于嵌入式系统最佳的外围接口设计来说, 还需要确保处理器和接口顺利连接在一起, 不能出现漏缝, 外围部分的电路设置也要尽可能的精简化, 减少不必要的设备, 这样不仅可以压缩体积, 还可以节约成本。
2.3 针对性的设计分析
ARM基础上的嵌入式系统由其自身的特点, 在设计时要严格按照实际所需, 针对于用户需求的差异来进行针对性设计。嵌入式系统的使用周期一般都很长, 因此, 在对系统软件进行设计的同时还要兼顾到硬件方面的要求, 以确保最后整体系统的运作良好, 满足实际需求。在整体系统实现正常运作时, 还需要对其他相关影响因素进行考虑分析, 对现行试验程序的配置进行合理的调试[2], 并在规定的时间内采取一系列必要的模拟运行, 这样在对系统不断的调试下来达到项目的实际需求, 使其更好的为系统运行发挥作用价值。
2.4 软件与硬件配合处理的设计分析
在嵌入式系统运作中, 它的硬件运行需要有相关软件的相互配合协作来完成, 使其可以发挥最大的价值作用[3]。设计人员在对嵌入式系统进行设计的过程中, 要把握硬件和软件两方面的基本要求, 保持两者可以有效协作, 共同发挥作用, 在设计之初就要考虑到软件和硬件在某种程度上的合理划分, 在这种程度上的划分基础上, 再对软件和硬件的基本功能采用一个固定的区域来进行一个限制, 限制的目的也是为了保证部分的功能作用可以最大程度的发挥, 这样也就可以实现整体效果的进一步优化完善, 从而确保了整体功能和效益的最大化体现, 而这对于嵌入式系统的整体运作也是十分关键和有利的。
3 结语
计算机技术和网络技术的不断发展, 给移动通讯行业注入了新的活力。基于ARM嵌入式系统的整体和内容设计来讲, 它的设计方案合理性可以完整的体现出系统所具有的独特优势特点, 能够最大程度的满足当前社会生产发展的实际需求, 在设计的过程中, 还要对各个环节有全面的分析研究, 确保各个环节的有效衔接, 从而确保设计工作的科学合理。
摘要:计算机技术和网络技术的迅速发展, 促进了现代通讯技术的革新和完善, 嵌入式系统所发挥的重要性越来越受到人们的重视。它是建立在计算机技术基础上的一种应用系统, 具有集成度高、体积小以及功耗低等的优点, 它在系统的智能化水平方面具有十分重要的现实意义。本文从ARM角度对嵌入式系统的整体以及内容设计进行了简单阐述。
关键词:ARM,嵌入式系统,内容设计
参考文献
[1]刘芳宇.基于ARM嵌入式系统的设计及其应用[J].计算机光盘软件与应用, 2012, (09) :173-174.
[2]白文哲.基于ARM的嵌入式系统硬件设计研究[J].企业导报, 2015, (07) :87-88.
基于ARM体系的嵌入式系统BSP的程序设计 篇8
1 概述
内燃机车油耗计量系统具有如下作用:
(1) 根据记录的机车负荷时间、在此期间所做的功以及空载时间和机车空载油耗曲线及负载油耗曲线, 准确计算机车单趟耗油量, 依此标准与机车实际耗油对照进行考核, 实现机车单程油耗核算;
(2) 准确记录机车负荷时间和所做功以及空载时间, 及时、准确的掌握机车运行状态, 结合机车走行公里, 科学、合理判定机车的检修周期和时机;
(3) 根据机车所做功给定能耗标准, 完成机车耗油实时监控。
系统主要由三部分组成:车载装置、数据转储系统和地面分析系统。油耗仪将测量到的柴油机燃油消耗量计算并转换后由监控装置转储设备进行转储, 然后存入嵌入式实时数据库, 方便数据的管理和工作人员的阅读。
直接测量参数有:发电机电压、发电机电流、柴油机转速、增压器转速、柴油温度[2]。
输入机车主发电压 (VF) 、电流 (Vi F) 及控制电压信号, 经过整形处理和A/D转换, 计算机车功耗, 即:
将记录的机车单趟油耗写入E2PROM保存并在液晶显示屏中显示。在司机退勤或换班时用IC卡转储本趟油耗。控制电压信号判断柴油机是否启动, DC110v为启动, DC94v为停机, 柴油机转速信号输出为12hz/r。
内燃机车负荷记录仪主机板严格按照《机车安全信息综合监测装置技术条件》的结构要求。电路板安装在TAX2箱插槽中, 用标准F48MS插头与母板连接, IC卡及液晶屏安装在电路面板上。
整个系统的原理框图见图1所示, 由功耗采集部分、ARM控制模块、数据存贮、写卡部分、网络通信接口、计算及显示部分组成。
电压、电流和转速互感器的输出通过芯片内两路A/D实时采集, 计算功耗。送至微处理器STM32F103进行定时积分计算、存贮、显示和发送。ARM控制器可将司机代号、车次、牵引重量、日期、时间、累计做功、用油量和单趟空载用油量等数据在基于I2C总线的16K E2PROM芯片24C16中进行存贮, 然后分时传输。
2 硬件设计
(1) 核心控制电路:核心微控制器采用32位RISC结构的Cortex-M3 ARM芯片STM32F103;
(2) 信号采集电路:主发电压和主发电流由压控振荡器LM331转换成脉冲信号;
(3) 接口模块:完成系统的通信和调试。
STM32处理器周围设计了一些相关电路组成了一个最小系统。主要有电源电路、GTAG调试电路、RS-485串行接口、外部存储芯片、上电复位等。
3 软件设计
将μC/OS-Ⅱ应用于STM32F103的程序设计中, 将系统所要实现的功能细化为几个核心的任务, 由μC/OS-Ⅱ实时内核进行调度。结合系统的硬件设计结构, 按照优先权的高低, 系统需完成的任务依次为:数据采集、IC卡转储、参数设置、网络通信、液晶显示。
系统运行时, 首先进行初始化, 分配堆栈空间, 建立任务, 并分配任务优先权。所有新建的任务被置为就绪态, 程序从优先权最高的任务依次执行。软件总体流程图见图2所示。
3.1 测试主程序
装置上电后, 系统初始化完毕, 每班 (司机和副司机) 数据在E2PROM中保存两趟, 且新数据覆盖最旧的数据, 司机换班或退勤时通过插卡转储数据。通过划分IC卡存储单元来约定数值含义, 最后计算出的单趟功耗、单趟油耗、单趟空载时间、单趟空载油耗将在液晶显示屏中显示。软件主程序流程图见图3所示。
3.2 μC/OS-Ⅱ操作系统的移植
对μC/OS-Ⅱ的移植实际上就是对与处理器有关的代码进行重写或修改[3], 移植工作包括以下部分:
(1) 用#define设置一个常量的值 (OS_CPU.H) ;
(2) 声明10个数据类型 (OS_CPU.H) ;
(3) 用#define声明三个宏 (OS_CPU.H) ;
(4) 用C语言编写六个简单的函数 (OS_CPU_C.C) ;
(5) 编写四个汇编语言函数 (OS_CPU_A.ASM) 。
3.3 部分代码
初始化:
4 结束语
本论述主要针对铁路系统而设计的基于ARM的内燃机车油耗计量系统, 应用结果表明, 设计测量精度高、稳定性好、操作简单、体积小, 具有一定的应用和推广价值。
参考文献
[1]吉荣廷.内燃机车油耗计量及分析系统研究与实现[J].推广与应用, 2009, 7.
[2]韩玉纯, 余欲为, 谭杰.内燃机车多功能油耗仪的研制[J].铁道机车车辆, 2005, 2.
基于ARM体系的嵌入式系统BSP的程序设计 篇9
随着嵌入式系统不断深入到人们生活中的各个领域, 嵌入式处理器得到前所未有的飞速发展。典型的32位RISC芯片——ARM处理器, 不论是在PDA、STB、DVD等消费类电子产品中, 还是在GPS、航空、勘探、测量等军方产品中都得到了广泛的应用。越来越多的芯片厂商早已看好ARM的前景。在研制开发基于ARM7的嵌入式系统过程中, 发现技术难点主要在于系统启动程序的编写, 为此详细论述了在ARM7基础上开发嵌入式系统时启动程序的实现。
1 启动程序流程
嵌入式系统的资源有限, 程序通常都是固化在ROM中运行。ROM中程序执行前, 需要对系统硬件和软件运行环境进行初始化, 这些工作由用汇编语言编写的启动程序完成。启动程序是嵌入式程序的开头部分, 应与应用程序一起固化在ROM中, 并首先在系统上运行。它应包含各模块中可能出现的所有段类, 并合理安排它们的次序。写好启动程序是设计好嵌入式程序的关键, 系统启动程序所执行的操作依赖于正在开发其软件的系统, 一般流程如下。
1.1 向量表定义。
ARM芯片上电或复位后, 系统进入管理模式、ARM状态、PC (R15) 指向0x00000000地指处。中断向量表为每一个中断设置1个字节的存储空间, 存放一条跳转指令, 通过这条指令使PC指针指向相应的中断服务程序入口, 继而执行相应的中断处理程序。LPC2119的中断向量表和其它基于ARM核的芯片中断向量表较类似, 只要注意LPC2119要使用向量表所有数据32位累加和为零 (0x00000000-0x0000001C的8个字的机器码累加) , 才能使用户的程序脱机运行。LPC2119的中断向量表如图1所示。
1.2 地址重映射及中断向量表的转移。
ARM7处理器在复位后从地址0读取第一条指令并执行, 因此系统上电后地址0必须是非易失的ROM/FLASH, 这样才能保证处理器有正确可用的指令。为了加快对中断的处理以及实现在不同操作系统模式下对中断的处理, 这就需要重映射中断向量表、Bootblock和SRAM空间的一小部分。ARM具有非常灵活的存储器地址分配特性。ARM处理器的地址重映射机制有2种情况: (1) 由专门的寄存器完成重映射 (Remap) , 只需对相应的Remap寄存器相应位设置即可。 (2) 没有专门的Remap控制寄存器需要重新改写用于控制寄存器起始地址的块 (Bank) 寄存器来实现Remap。在LPC2119上的重映射, 可以通过存储器映射控制器来实现。实现REMAP操作的程序如下:
MOV R8, #0x40000000;设置新向量表起始地址
LDR R9, =Interrupt_Vector_Table;读原向量表源地址
LDMIA R9!, (R0-R7) ;复制中断向量表及中断处理程序的入口地址到RAM中 (64k字节)
1.3 初始化堆栈和寄存器。
系统堆栈初始化取决于用户使用了哪些中断以及系统需要处理哪些错误类型。一般来说管理者堆栈必须设置, 如果使用了IRQ中断, 则IRQ堆栈也必须设置。如果系统使用了DRAM或其它外设, 需要设置相关的寄存器, 以确定其刷新频率, 数据总线宽度等信息。有2种方法可以对堆栈初始化:第1种方法是结合ADS开发套件中的分散加载文件来定义堆栈。第2种方法是最简单也是最常用的, 即是直接进入对应的处理器模式, 为SP寄存器指定相应的值。以下给出应用第2种方法初始化管理模式和中断模式堆栈的程序:
MSR CPSR_c, #0x D3;切换到管理模式, 并初始化管理模式的堆栈
MSR CPSR_c, #0x D2;切换到IRQ模式, 并初始化IRQ模式的堆栈
1.4 初始化系统各部分时钟。
时钟是芯片各部分正常工作的基础, 应该在进入main () 函数前设置。LPC2119芯片内部集成有PLL (锁相环) 电路, 接受的输入时钟频率范围为10~25MHz, 输入频率通过1个电流控制振荡器 (CCO) 倍增到10~60MHz范围。
1.5 初始化C语言所需的存储器空间。
为正确运行应用程序, 在初始化期间应将系统需要读写的数据和变量从ROM拷贝到RAM里;一些要求快速响应的程序, 如中断处理程序, 也需要在RAM中运行。如果使用FLASH, 对FLASH的擦除和写入操作也一定要在RAM里运行。ARM公司软件开发工具包中的链接器提供了分布装载功能, 可以实现这一目的。
1.6 呼叫C程序。
至此系统各部分的初始化基本完成, 可直接从启动代码转入到应用程序的main () 函数入口。从启动代码转入到应用程序的实例代码如下:
2 难点注解
2.1 堆栈初始化步骤中目标文件的分布装载。
首先创建一个文本文件, 称为分布装载描述文件。它为应用程序的各部分指定装载区间和执行区间。
举例如下:
在ARM链接器的命令行里加入“-scov description-file-scf”或“-scatter description-file”, 编译链接后, 将产生一个分布装载文件。链接器同时产生一组符号, 给出每个分布描述文件中命名的区间的长度, 装载地址和执行地址。由于链接器和C库都没有将代码从它的装载区间拷贝到执行区间, 或创建一个零初始化区域的功能, 所以要由应用程序员利用这组符号产生的信息完成这项工作, 这是在呼叫C程序之前必须完成的, 举例如下:
2.2
尽量避免过早将处理器切换到用户模式, 一般在系统初始化的最后阶段才能切换到用户模式 (用户模式没有权限通过修改CPSR来进行模式切换) 。
2.3
尽量给堆栈分配快速和高带宽的存储器。
3 结论
【基于ARM体系的嵌入式系统BSP的程序设计】推荐阅读:
基于嵌入式平台的网络化OTDR模拟训练系统设计论文08-19
基于web的嵌入式远程监控系统08-20
基于电话网的嵌入式远程控制器的设计06-08
基于企业生命周期的绩效考核体系的建立08-10
基于模块化设计的嵌入式软件测试方法07-17
基于效能仿真的航天装备体系效能评估方法06-07
基于学习过程的高职课程多元考评体系探索01-18