第一篇:ARM9嵌入式系统设计基于S3C2410与Linux
ARM9嵌入式系统设计:基于S3C2410与Linux》针对在嵌入式市场上颇具竞争力的ARM9处理器——S3C2410和开放源码的Linux操作系统,讲述嵌入式系统的概念、软硬件的开发和调试手段、嵌入式Linux驱动程序和应用程序的开发以及图形用户界面MiniGUI的移植和应用。《ARM9嵌入式系统设计:基于S3C2410与Linux》的特点是集嵌入式系统开发的理论知识和实验教学于一体,并结合北京精仪达盛科技有限公司的开发板,给出了大量实例。
编辑推荐
《ARM9嵌入式系统设计:基于S3C2410与Linux》可作为高等院校嵌入式系统课程的教材,也可作为对嵌入式系统开发感兴趣的读者的入门教材,同时还可以作为从事ARM嵌入式系统应用开发工程师的参考书。
当前,嵌入式技术的应用越来越广泛,从航天科技到民用产品,嵌入式产品的身影无处不在,而这些嵌入式产品的核心——处理器决定了产品的市场和性能。在32位嵌入式处理器市场中,ARM处理器占有很大的份额。ARM不仅是一个公司、一种技术,也是一种经营理念,即由ARM公司提供核心技术,只出售芯片中的IP授权,采取了别具一格的“Chipless模式”(无芯片的芯片企业),不参与生产,而是由合作厂商去生产具体的芯片和产品。
现在由于存储空间等原因,在嵌入式芯片上编程有较大的困难,选取合适的平台就显得很重要。Linux自出现以来,得到了迅猛的发展。Linux是开放源码的操作系统,吸引着全世界的程序员参与到发展和完善的工作中来,所以Linux保持了稳定而且卓越的性能。Linux在服务器领域已经占有很大的份额,在图形界面方面也不输于Windows。由于源码可以修改、移植,Linux在嵌入式领域中的应用也越来越广。选用Linux作为平台,可以根据具体需要自由地裁减源码,打造适合目标平台的环境,编写最有效率的应用程序。查看所有商品描述
第二篇:基于嵌入式ARM9的USB设计与实现
基于嵌入式ARM9的USB设计与实现
引 言
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结 语
该设计采用三星公司ARM9的S3C2440A芯片作为CPU,比原来基于单片机的模式,外围电路简单,容易可靠地实现嵌入式终端的USB接口功能。在调试中,用到的嵌入式开发板GEC2440A套件还提供了串口工具DNW。用这一工具可以检测驱动程序的正确与否,如:程序编写无误,则DNW串口会提示 “USB IS CONNECT”。由于S3C2440A芯片功能丰富,如处理器可提高运算速度,LCD可人机交互,网口可连接因特网,所以开发出的嵌入式终端不但可提升整体性能,还为日后的应用奠定了基础。
第三篇:ARM9嵌入式复习总结
ARM9嵌入式复习
第一章
1.嵌入式微处理器的分类。
a)什么是嵌入式微处理器?
1.嵌入式微处理器是嵌入式系统硬件层的核心,嵌入式微处理器将通用CPU中许多由板卡完成的任务集成到芯片内部,从而有利于系统设计趋于小型化、高效率和高可靠性。嵌入式微处理器大多工作在为特定用户群所专门设计的系统中。
2.嵌入式微处理器的体系结构可以采用冯·诺依曼体系结构或哈佛体系结构,指令系统可以选用精简指令系统(Reduced Instruction Set Computer,RISC)和复杂指令集系统CISC(Complex Instruction Set Computer, CISC)。b)嵌入式微处理器分类
1.按照系列分:ARM系列、MIPS系列、PowerPC系列。2.按照指令复杂程度分:CISC和RISC两类
2.微处理器划分:
a)嵌入式微控制器 b)嵌入式微处理器 c)DSP处理器
d)嵌入式片上系统 e)多核处理器
3.嵌入式操作系统(EOS)的特性
EOS除具备了一般操作系统最基本的任务调度、同步机制、中断处理、文件处理等功能外,还具有如下特点:强实时性;支持开放性和可伸缩性的体系结构,具有可裁减性;提供统一的设备驱动接口;提供操作方便、简单、友好的图形GUI和图形界面;支持TCP/IP协议及其他协议,提供TCP/UDP/IP/PPP协议支持及统一的MAC访问层接口,提供强大的网络功能。
第二章
1.ARM7TDMI命名
2.3级流水线与总线架构 三级流水线:
流水线使用3个阶段,因此指令分为3个阶段执行 1.取指:从程序存储器中读取指令,放入流水线中
2.译码:操作码和操作数被译码,决定执行什么功能,为下一个始终周期准备数据路
径所需要的控制信号。
3.执行:执行已译码的指令
注:程序计数器(PC)指向被取指的指令,而不是指向正在执行的指令 在正常操作的过程中,在执行一条指令的同时对下一条指令进行译码,并将第三条指令从存储器中取出
3.ARM的两种状态与7种工作模式
a)两种状态。
i.ARM状态:32位,这种状态下执行的是字方式的ARM指令; ii.Thumb状态:16位,这种状态下执行半字方式的Thumb指令。注:两个状态之间的切换并不影响处理器模式或寄存器内容,可以使用BX指令切换两种状态.状态寄存器CPSR的T位反应了处理器运行不同指令的当前状态.b)7种工作模式。
注:除用户模式外,其它模式均为特权模式。ARM内部寄存器和一些片内外设在硬件设计上只允许(或者可选为只允许)特权模式下访问。此外,特权模式可以自由的切换处理器模式,而用户模式不能直接切换到别的模式。
题目:ARM微处理器复位后,PC的地址通常是 0x0,初始的工作模式是Supervisor 4.ARM常用几个寄存器功能
在ARM7TDMI处理器内部有37个用户可见的寄存器。31个通用32位寄存器,6个状态寄存器。
a.堆栈寄存器(SP):R13,在ARM指令集当中,没有以特殊方式使用R13的指令或其它
功能,只是习惯上都这样使用。但是在Thumb指令集中存在使用R13的指令。
b.链接寄存器(LR):R14,在结构上有两个特殊功能:
1.在每种模式下,模式自身的R14版本用于保存子程序返回地址; 2.当发生异常时,将R14对应的异常模式版本设置为异常返回地址(有些异常有一
个小的固定偏移量)。c.程序计数器(PC):R15,在ARM状态,位[1:0]为0,位[31:2]保存PC。在Thumb状
态,位[0]为0,位[31:1]保存PC。对于ARM指令集而言,PC总是指向当前指令的下
两条指令的地址,即PC的值为当前指令的地址值加8字节。
d.程序状态寄存器(CPSR):R16,在所有处理器模式下都可以访问CPSR。每种异常模
式都有一个程序状态保存寄存器(SPSR),在异常发生时,SPSR用于保存CPSR的状
态。5.条件代码标志
N 运算结果的最高位反映在该标志位。对于有符号二进制补码,结果为负数时N=1,结果为正数或零时N=0;
Z 指令结果为0时Z=1(通常表示比较结果“相等”),否则Z=0;
C 当进行加法运算(包括CMN指令),并且最高位产生进位时C=1,否则C=0。当进行
减法运算(包括CMP 指令),并且最高位产生借位时C=0,否则C=1。对于结合移位
操作的非加法/减法指令,C为从最高位最后移出的值,其它指令C通常不变;
V 当进行加法/减法运算,并且发生有符号溢出时V=1,否则V=0,其它指令V通常不
变。
附:控制位
I、F中断控制位——控制允许和禁止中断 T控制(标志)位——反映处理器的运行状态 M控制位——决定了处理器的运行模式 6.中断号、中断向量与优先级。(7种异常)7.存储器格式。
a)ARM体系结构使用232个字节的单
一、线性地址空间。将字节地址做为无符号数看待,范围为0~232-1 b)对于字对齐的地址A,地址空间规则要求如下:
● 地址位于A的字由地址为A、A+
1、A+2和A+3的字节组成; ● 地址位于A的半字由地址为A和A+1的字节组成;
● 地址位于A+2的半字由地址为A+2和A+3的字节组成; ● 地址位于A的字由地址为A和A+2的半字组成。注:这样并不能完全定义字,半字和字节之间的映射。存储器采用下列映射机制中的一种。
大端存储:字数据的高字节存储在低地址中,而字数据的低字节则存放在高地址中
小端存储:低地址中存放的是字数据的低字节,高地址存放的是字数据的高字节
例如,假设一个32位字长的微处理器上定义一个int类型的常量a,其内存地址位 于0x6000处,其值用十六进制表示为0x23456789。如图1.2.2(a)所示,如果按小端法存储,则其最低字节数据0x89存放在内存低地址0x6000处,最高字 节数据0x23存放在内存高地址0x6003处。如图1.2.2(b)所示,如果按大端法存储,则其最高字节数据0x23存放在内存的低地址0x6000处,而最低字节数据0x89存放在内存的高地址0x6003处。
第三章
一:寻址方式。1.寄存器寻址
操作数的值在寄存器中,指令中的地址码字段给出的是寄存器编号,寄存器的内容是操作数,指令执行时直接取出寄存器值操作。
例如指令:
MOV R1,R2 ;R1←R2 SUB R0,R1,R2 ;R0←R1-R2 2.立即寻址
在立即寻址指令中数据就包含在指令当中,立即寻址指令的操作码字段后面的地址码部分就是操作数本身,取出指令也就取出了可以立即使用的操作数(也称为立即数)。立即数要以“#”为前缀,表示16进制数值时以“0x”表示。
SUBS R0,R0,#1;R0减1,结果放入R0,并且影响标志位 MOV R0,#0xFF000;将立即数0xFF000装入R0寄存器 3.寄存器移位寻址。
寄存器移位寻址是ARM指令集特有的寻址方式。当第2个操作数是寄存器移位方式时,第2个寄存器操作数在与第1个操作数结合之前,选择进行移位操作。寄存器移位寻址指令举例如下:
MOV R0,R2,LSL #3;R2的值左移3位,结果放入R0,即是R0=R2×8 ANDS R1,R1,R2,LSL R3;R2的值左移R3位,然后和R1相“与”操作,结果放入R1 4.寄存器间接寻址
寄存器间接寻址指令中的地址码给出的是一个通用寄存器的编号,所需的操作数保存在寄存器指定地址的存储单元中,即寄存器为操作数的地址指针。寄存器间接寻址指令举例如下:
LDR R1,[R2];将R2指向的存储单元的数据读出保存在R1中
SWP R1,R1,[R2];将寄存器R1的值和R2指定的存储单元的内容交换 5.基址寻址
基址寻址就是将基址寄存器的内容与指令中给出的偏移量相加,形成操作数的有效地址。基址寻址用于访问基址附近的存储单元,常用于查表、数组操作、功能部件寄存器访问等。基址寻址指令举例如下:
LDR R2,[R3,#0x0C];读取R3+0x0C地址上的存储单元的内容,放入R2 STR R1,[R0,#-4]!;先R0=R0-4,然后把R1的值寄存到保存到R0指定的存储单元
6.多寄存器寻址
多寄存器寻址一次可传送几个寄存器值,允许一条指令传送16个寄存器的任何子集或所有寄存器。多寄存器寻址指令举例如下:
LDMIA R1!,{R2-R7,R12};将R1指向的单元中的数据读出到R2~R7、R12中(R1自
动加1)STMIA R0!,{R2-R7,R12};将寄存器R2~R7、R12的值保存到R0指向的存储单元中
R0自动加1 7.堆栈寻址
堆栈是一个按特定顺序进行存取的存储区,操作顺序为“后进先出”。堆栈寻址是隐含的,它使用一个专门的寄存器(堆栈指针)指向一块存储区域(堆栈),指针所指向的存储单元即是堆栈的栈顶。存储器堆栈可分为两种:
向上生长:向高地址方向生长,称为递增堆栈 向下生长:向低地址方向生长,称为递减堆栈 8.块拷贝寻址
多寄存器传送指令用于将一块数据从存储器的某一位置拷贝到另一位置。如: STMIA R0!,{R1-R7};将R1~R7的数据保存到存储器中。
;存储指针在保存第一个值之后增加,;增长方向为向上增长。STMIB R0!,{R1-R7};将R1~R7的数据保存到存储器中。
;存储指针在保存第一个值之前增加,;增长方向为向上增长。9.相对寻址
相对寻址是基址寻址的一种变通。由程序计数器PC提供基准地址,指令中的地址码字段作为偏移量,两者相加后得到的地址即为操作数的有效地址。相对寻址指令举例如下:
BL SUBR1;调用到SUBR1子程序
BEQ LOOP;条件跳转到LOOP标号处
...LOOP MOV R6,#1...SUBR1...二:指令集(LDR STR MOV ADD SUB)
1.ARM指令集 2.Thumb指令集 3.常用指令
a)LDR:加载字数据 b)STR:存储字数据
LDR/STR指令寻址非常灵活,它由两部分组成,其中一部分为一个基址寄存器,可以为任一个通用寄存器;另一部分为一个地址偏移量。地址偏移量有以下3种格式: 立即数。立即数可以是一个无符号的数值。这个数据可以加到基址寄存器,也可以从基址寄存器中减去这个数值。如:LDR R1,[R0,#0x12] 寄存器。寄存器中的数值可以加到基址寄存器,也可以从基址寄存器中减去这个数值。如:LDR R1,[R0,R2] 寄存器及移位常数。寄存器移位后的值可以加到基址寄存器,也可以从基址寄存器中减去这个数值。
如:LDR R1,[R0,R2,LSL #2]
从寻址方式的地址计算方法分,加载/存储指令有以下4种格式: 零偏移。如:LDR Rd,[Rn] 前索引偏移。如:LDR Rd,[Rn,#0x04]!程序相对偏移。如:LDR Rd,labe1 后索引偏移。如:LDR Rd,[Rn],#0x04 c)MOV:数据传送指令
d)ADD:加法运算指令
e)SUB:减法运算指令
第四章
一:最小系统一个嵌入式处理器自己是不能独立工作的,必须给它供电、加上时钟信号、提供复位信号,如果芯片没有片内程序存储器,则还要加上存储器系统,然后嵌入式处理器芯片才可能工作。这些提供嵌入式处理器运行所必须的条件的电路与嵌入式处理器共同构成了这个嵌入式处理器的最小系统。而大多数基于ARM7处理器核的微控制器都有调试接口,这部分在芯片实际工作时不是必需的,但因为这部分在开发时很重要,所以也把这部分也归入最小系统中。
二:时钟产生单元
目前所有的微控制器均为时序电路,需要一个时钟信号才能工作,大多数微控制器具有晶体振荡器。简单的方法是利用微控制器内部的晶体振荡器,但有些场合(如减少功耗、需要严格同步等情况)需要使用外部振荡源提供时钟信号。
三:I2C的概念与应用
I2C BUS(Inter Integrated Circuit BUS,内部集成电路总线)是由Philips公司推出的二线制串行扩展总线,用于连接微控制器及其外围设备。I2C总线是具备总线仲裁和高低速设备同步等功能的高性能多主机总线,直接用导线连接设备,通信时无需片选信号。
如图6.2.1所示,在I2C总线上,只需要两条线—串行数据SDA线和串行时钟SCL线,它们用于总线上器件之间的信息传递。SDA和SCL都是双向的。每个器件都有一个唯一的地址以供识别,而且各器件都可以作为一个发送器或接收器(由器件的功能决定)。2C总线有如下操作模式:主发送模式、主接收模式、从发送模式、从接收模式。下面介绍其通用传输过程、信号及数据格式。
*数据有效:在传输数据的时候,SDA线必须在时钟的高电平周期保持稳定,SDA的高或低电平状态只有在SCL线的时钟信号是低电平时才能改变.*起始停止
当I2C接口处于从模式时,要想数据传输,必须检测SDA线上的启动信号,启动信号由主器件产生。如图6.2.2所示,在SCL信号为高时,SDA产生一个由高变低的电平变化,即产生一个启动信号。当I2C总线上产生了启动信号后,那么这条总线就被发出启动信号的主器件占用了,变成“忙”状态;如图6.2.2所示,在SCL信号为高时,SDA产生一个由低变高的电平变化,产生停止信号。停止信号也由主器件产生,作用是停止与某个从器件之间的数据传输。当I2C总线上产生了一个停止信号后,那么在几个时钟周期之后总线就被释放,变成“闲”状态。主器件产生一个启动信号后,它还会立即送出一个从地址,用来通知将与它进行数据通信的从器件。1个字节的地址包括7位的地址信息和1位的传输方向指示位,如果第7位为“0”,表示马上要进行一个写操作;如果为“1”,表示马上要进行一个读操作。
*传输格式 SDA线上传输的每个字节长度都是8位,每次传输中字节的数量是没有限制的。在起始条件后面的第一个字节是地址域,之后每个传输的字节后面都有一个应答(ACK)位。传输中串行数据的MSB(字节的高位)首先发送。
*应答信号
为了完成1个字节的传输操作,接收器应该在接收完1个字节之后发送ACK位到发送器,告诉发送器,已经收到了这个字节。ACK脉冲信号在SCL线上第9个时钟处发出(前面8个时钟完成1个字节的数据传输,SCL上的时钟都是由主器件产生的)。当发送器要接收ACK脉冲时,应该释放SDA信号线,即将SDA置高。接收器在接收完前面8位数据后,将SDA拉低。发送器探测到SDA为低,就认为接收器成功接收了前面的8位数据。
*I2C总线的数据传输过程
① 开始:主设备产生启动信号,表明数据传输开始。
② 地址:主设备发送地址信息,包含7位的从设备地址和1位的数据方向指示位(读或写位,表示数据流的方向)。
③ 数据:根据指示位,数据在主设备和从设备之间进行传输。数据一般以8位传输,最重要的位放在前面;具体能传输多少量的数据并没有限制。接收器产生1位的ACK(应答信号)表明收到了每个字节。传输过程可以被中止和重新开始。
④ 停止:主设备产生停止信号,结束数据传输。
第五章
一:串口的概念(串行接口)常用的数据通信方式有并行通信和串行通信两种。当两台数字设备之间传输距离较远时,数据往往以串行方式传输。串行通信的数据是一位一位地进行传输的,在传输中每一位数据都占据一个固定的时间长度。与并行通信相比,如果n位并行接口传送n位数据需时间T,则串行传送的时间最少为nT。串行通信具有传输线少、成本低等优点,特别适合远距离传送。
① 串行数据通信模式
串行数据通信模式有单工通信、半双工通信和全双工通信3种基本的通信模式。● 单工通信:数据仅能从设备A到设备B进行单一方向的传输。● 半双工通信:数据可以从设备A到设备B进行传输,也可以从设备B到设备A进行传输,但不能在同一时刻进行双向传输。
● 全双工通信:数据可以在同一时刻从设备A传输到设备B,或从设备B传输到设备A,即可以同时双向传输。
② 串行通信方式 a.异步通信方式
异步通信时数据是一帧一帧传送的,每帧数据包含有起始位(”0”)、数据位、奇偶校验位和停止位(”1”),每帧数据的传送靠起始位来同步。一帧数据的各位代码间的时间间隔是固定的,而相邻两帧的数据其时间间隔是不固定的。在异步通信的数据传送中,传输线上允许空字符。
异步通信对字符的格式、波特率、校验位有确定的要求。● 字符的格式
每个字符传送时,必须前面加一起始位,后面加上1、1.5或2位停止位。例如ASCII码传送时,一帧数据的组成是:前面1个起始位,接着7位ASCII编码,再接着一位奇偶校验位,最后一位停止位,共10位。
● 波特率
传送数据位的速率称为波特率,用位/秒(bit/s)来表示,称之为波特。例如,数据传送的速率为120字符/秒,每帧包括10个数据位,则传送波特率为:
10×120=1200b/s=1200波特
每一位的传送时间是波特的倒数,如1/1200=0.833ms。异步通信的波特率的数值通常为:150、300、600、1200、2400、4800、9600、14400、28800等,数值成倍数变化。
● 校验位
在一个有8位的字节(byte)中,其中必有奇数个或偶数个的“1”状态位。对于偶校验就是要使字符加上校验位有偶数个“1”;奇校验就是要使字符加上校验位有奇数个“1”。例如数据“00010011”,共有奇数个“1”,所以当接收器要接收偶数个“1”时(即偶校验时),则校验位就置为“1”,反之,接收器要接收奇数个“1”时(即奇校验时),则校验位就置为“0”。
一般校验位的产生和检查是由串行通信控制器内部自动产生,除了加上校验位以外,通信控制器还自动加上停止位,用来指明欲传送字符的结束。停止位通常取1、1.5或2个位。对接收器而言,若未能检测到停止位则意味着传送过程发生了错误。
在异步通信方式中,在发送的数据中含有起始位和停止位这两个与实际需要传送的数据毫无相关的位。如果在传送1个8位的字符时,其校验位、起始位和停止位都为1个位,则相当于要传送11个位信号,传送效率只有约80%。
(2)同步通信方式
为了提高通信效率可以采用同步通信方式。同步传输采用字符块的方式,减少每一个字符的控制和错误检测数据位,因而可以具有较高的传输速率。
与异步方式不同的是,同步通信方式不仅在字符的本身之间是同步的,而且在字符与字符之间的时序仍然是同步的,即同步方式是将许多的字符聚集成一字符块后,在每块信息(常常称之为信息帧)之前要加上1~2个同步字符,字符块之后再加入适当的错误检测数据才传送出去。在同步通信时必须连续传输,不允许有间隙,在传输线上没有字符传输时,要发送专用的”空闲”字符或同步字符。
在同步方式中产生一种所谓“冗余”字符,防止错误传送。假设欲传送的数据位当作一被除数,而发送器本身产生一固定的除数,将前者除以后者所得的余数即为该“冗余”字符。当数据位和“冗余”字符位一起被传送到接收器时,接收器产生和发送器相同的除数,如此即可检查出数据在传送过程中是否发生了错误。统计数据表明采用”冗余”字符方法错误防止率可达99%以上。
二:NAND FLASH与NOR FLASH异同.答:不同:
1)NOR Flash把整个存储区分成若干个扇区(Sector),而NAND Flash把整个存储区 分成若干个块(Block),可以对以块或扇区为单位的内存单元进行擦写和再编程。
2)NAND Flash执行擦除操作是十分简单的,而NOR型内存则要求在进行擦除前先 要将目标块内所有的位都写为0。由于擦除NOR Flash时是以64~128KB为单位的块进行的,执行一个写入/擦除操作的时间为5s,与此相反,擦除NAND Flash是以8~32KB的块进行的,执行相同的操作最多只需要4ms。
3)NOR Flash的读速度比NAND Flash稍快一些,NAND Flash的写入速度比NOR Flash 快很多。NAND Flash的随机读取能力差,适合大量数据的连续读取。
4)NOR Flash容量通常在1 MB~8MB之间。而NAND Flash用在8MB以上的产品当 中。NOR Flash主要应用在代码存储介质中,NAND Flash适用于资料存储。
5)在NOR Flash上运行代码不需要任何的软件支持。在NAND Flash上进行同样操作 时,通常需要驱动程序,也就是内存技术驱动程序(MTD)。NAND Flash和NOR Flash在进行写入和擦除操作时都需要MTD。
6)在NAND Flash中每个块的最大擦写次数是一百万次,而NOR Flash的擦写次数是 十万次。
区别:两者工艺不一样,NOR读取速度快,成本高,容量不易做大,NAND读取慢,成本低,容量很容易作大。
相同点:都是采用FLASH技术生产
功能:NOR适合作为芯片程序存储的ROM使用,NAND适合作为非易失性数据存储器 第八章
一:Linux的最常用的命令
答:1)adduser 示例:创建pdr帐户 adduser pdr 2)cat 示例:
cat text 在屏幕上显示文件text的内容;
cat-n textfile1 > textfile2 把 textfile1 的文件内容加上行号后输入 textfile2 这个文件里; 3)cd 示例:假设用户当前目录是 /home/xu 现需要更换到/home/xu/pro 目录中 $ cd pro 4)cp 示例:
$ cp-r /usr/xu/ /usr/liu/ 表示将/usr/xu 目录中的所有文件及其子目录拷贝到目录 /usr/liu中。
5)export 示例:显示当前所有环境变量的设置情况 #export 6)Fdisk 示例:查看当前系统中磁盘的分区状况,包括硬盘、U盘等fdisk-l 7)Ln: 类似windows下的快捷方式
示例:要为当前目录下的file文件建立一个硬链接,名为/home/lbt/doc/file/, 可用如下命令: ln file /home/lbt/doc/file 8)locate 示例:locate filename: 寻找系统中所有叫filename的文件
9)Ls 示例:将 /bin 目录以下所有目录及文件详细资料列出 : ls-lR /bin 10)minicom 示例:开启minicom的配置界面 minicom –s 11)Mkdir 示例:在当前目录中创建嵌套的目录层次inin 和inin下的mail目录权限设置为只有文件拥有者有读、写和执行权限。mkdir-p-m 700./inin/mail/ 12)Mount 示例:挂载ntfs格式的hda7分区到/mnt/cdrom文件夹mount-o iocharset=cp936 /dev/hda7 /mnt/cdrom 13)mv 示例:$ mv /usr/xu/ *.表示将/usr/xu 中的所有文件移到当前目录 用.表示
14)Passwd:passwd 作为普通用户和超级权限用户都可以运行,但作为普通用户只能 更改自己的用户密码,但前提是没有被root用户锁定;如果root用户运 行passwd,可以设置或修改任何用户的密码;passwd 命令后面不接任何参数或用户名,则表示修改当前用户的密码
示例:passwd pengdr 15)ping 示例:ping www.xiexiebang.com 16)pwd:查看”当前工作目录“的完整路径 示例:
[root@localhost ~]# pwd /root 17)reboot:执行reboot指令可让系统停止运作,并重新开机。示例:做个重开机的模拟(只有纪录并不会真的重开机)。reboot –w 18)rmdir 示例:在工作目录下的 BBB 目录中,删除名为 Test 的子目录。若 Test 删 除后,BBB 目录成为空目录,则 BBB 亦予删除。
rmdir-p BBB/Tes [root@localhost ~]# 19)setup 功能说明:设置程序,类似windows控制面板 语法:setup 20)su功能说明:变更用户身份。示例:变更账号为超级用户,并在执行df命令后 还原使用者。su-c df root 21)tar 功能说明:备份或解压文件。示例:压缩目录/etc为tar.gz后缀。# tar cvf backup.tar /etc 解压#tar –zxvf file.tar.gz #tar –jxvf file.tar.bz2 22)umount 功能:卸除文件系统。示例:卸载 /mnt区: umount /mnt/cdrom 23)whereis 功能:查询某个二进制命令文件、帮助文件等所在目录.比如:查找“ls” 这个二进制命令文件所在的目录 whereis ls
第九章
一:ADS编译环境的设置
二:系统启动代码bootloader概念
在嵌入式系统中,通常没有像BIOS那样的固件程序,因此整个系统的加载启动任务就完全由BootLoader来完成。比如在一个基于 ARM7TDMI core的嵌入式系统中,系统在上电或复位时都从地址 0x00000000开始执行。而在这个地址处安排的通常就是系统的BootLoader程序。
BootLoader就是在操作系统运行之前运行的一段小程序。通过它可以初始化硬件设备,从而将系统的软硬件环境设置到一个合适的状态,以便为最终调用操作系统做好准备。Bootloader是在嵌入式系统内核运行之前运行的一段引导加载程序。
作用:将内核映像从硬盘上读到RAM中,然后跳转到内核的入口点去运行,即开始启动操作系统。
嵌入式系统常见的Bootloader有vivi和U-Boot,RedBoot
题目一:简述Bootloader启动过程。
1、第一阶段
(1)、基本的硬件设备初始化(2)、为阶段2代码准备RAM空间(3)、拷贝阶段2代码到RAM空间(4)、设置好堆栈
(5)、跳转到阶段2的C程序入口点
2、第二阶段
(1)、初始化本阶段要使用到的硬件(2)、检测系统内存映射(memory map)(3)、将kernel和根文件系统映像从flash读到RAM空间(4)、为kernel设置启动参数(5)、调用内核
题目二:请简述嵌入式软件Bootloader的两种工作模式。
启动加载模式:启动加载模式称为“自举”(Autonomous)模式。即Bootloader从目标机上的某个固态存储设备上将操作系统加载到 RAM 中运行,整个过程并没有用户的介入。启动加载模式是 Bootloader的正常工作模式,在嵌入式产品发布的时侯,Bootloader必须工作在这种模式下。
下载模式:在这种模式下,目标机上的Bootloader将通过串口连接或网络连接等通信手段从主机下载文件。下载内容及存储:主要是下载内核映像和根文件系统映像等。从主机下载的文件通常首先被Bootloader保存到目标机的RAM中,然后再被 Bootloader写到目标机上的FLASH 类固态存储设备中
三:Makefile文件的用途与写法
1.用途:makefile关系到了整个工程的编译规则。一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为makefile就像一个Shell脚本一样,其中也可以执行操作系统的命令。2.写法: 1)需要由make工具创建的目标体(target),通常是目标文件右可执行文件;2)要创建的目标体所依赖的文件(dependency_file);3)创建每个目标体进需要运行的命令(command)格式:target:dependency_files command 例如,有两个文件分别为hello.c和hello.h,创建的目标体为hello.o,执行的命令为gcc编译指令:gcc –c hello.c,那么,对应的Makefile就可以写为:
#The simplest example hello.o:hello.c hello.h gcc –c hello.c –o hello.o 接着就可以make了。使用make的格式为:#make target,这样make就会自动读入Makefile(也可以是首写字母小写makefile)并执行对应target的commank语句,并会找到相应的依赖文件。如下所示:
[root @localhost makefile] # make hello.o Gcc –c hello.c –o hello.o [root @localhost makefile] # ls Hello,c hello.h hello.o Makefile 可以看到,Makefile执行了”hello.o”对应的命令语句,并生成了”hello.o”的目标体.附:makefile的自动变量:
$* 不包括扩展名的目标文件名称
$+ 所以的依赖文件,以空格分开,并以出现的先后为序,可能包含重复的依赖文件 $< 第一个依赖文件
$? 所以时间戳比目标文件晚的依赖文件,并以空格分开 $@ 目标文件的完整名称
$^ 所有不重复的依赖文件,以空格分开
$% 如果目标是归档成员,则该变量表示目标的归档成员名称
题目一:Makefile和Make各实现什么功能?
Makefile文件内容 按照规则,对系统中本目录下的文件(.c、.s、.o、.h、.lib等)根据相互关系和要求进行组织,设定各自的编译方法,指定所生成的目标。Makefile是一种文本格式文件。
Make是Makefile文件的解释器
Make对Makefile文件解释后,生成Linux的shell命令和gcc编译命令,接着对命令执行,最终生成目标文件。
Makefile是工程系统编译批处理文件。
第十章
一:嵌入式编译环境的概念、建立方法以及步骤
第十一章
一:Linux驱动设备的分类与常用的数据结构
1.Linux系统设备分为三类:字符设备、块设备和网络设备 2.数据结构: 用户应用程序调用设备的功能都是在设备驱动程序中定义的,也就是设备驱动程序中所定义的功能入口点函数(或称为功能接口函数)。这些设备的功能接口函数都被定义在
struct file_operations{ };
struct inode{ };
struct file{ }; 二:内核驱动代码的书写规则
第四篇:嵌入式linu学习心得
嵌入式Linux学习心得
1、Linux命令
ls:查看目录-l以列表方式查看;ls –l 与ll的功能一样 pwd: 查看当前的目录
cd:改变当前操作目录cd /直接跳到根目录 cd..回到上一级目录 cat: 打印显示当前文件的内容信息
mkdir:创建目录
fdisk: 查看硬盘分区信息,-l以列表方式查看
->代表是链接文件,类似window下的快捷方式。
cp: 复制命令,例子cp 文件名 /home/dir/
mv: 移动或改名,如mv sonf.confsonf.txt(改名)移动:mv sonf.conf / rm:删除命令,如rm –f test.c;如删除目录rm –fr d
man:查看某个命令的帮助,man 命令
2、各系统目录的功能
drw—r—w--:d代表是目录,drw代表当前用户的权限,r代表组用户的权限,w代表其它用户的权限。x代表有执行权限。
/boot/gruff.conf: 启动引导程序
/dev:brw—rw--:b代表是块设备。Linux设备有三种,块设备(b开头)、字符设备(c开头)、网络设备。had代表第一个硬盘,hdb代表第二个硬盘。Hdb2代表第二块硬盘的第二个分区。3,67代表主设备为3,从设备为67./etc:存放的是系统的配置文件。Inittab文件存放不同启动方式下必须启动的进程。Inittab文件中有6个启动level,wait中对应着6个level的目录,respawn代表当一个进程被意外终止了,但会自动启动的进程,如守护进程。rc.d目录中存放了一个rc.sysinit文件,里面存放系统初始化配置信息。/etc还有一个vsftpd里面存放tcp、ftp的配置。
/home : 用户目录,存放用户的文件,/lib:存放库文件,后缀为so的文件代表动态链接库。
/lost+found:系统意外终止,存放一些可以找回的文件。
/mnt:挂载外部设备,如挂载光驱:mount –t /dev/cdrom/mnt/cdrom,如
果在双系统中,要查看windows中D盘的文件,首先应该将D盘的文件映射过来,mount –t /dev/hda2/mnt/windows/d
/opt:用户安装的应用程序
/proc:是系统运行的映射,比较重要。里面的文件数字代表进程号。每个进程号目录下包含进程的基本信息。还有其他信息,如cpuinfo等,内核支持的文件系统filesystem等。系统支持的中断interrupts,iomen代表内存分配情况。ioport存放IO端口号。还有分区信息,modole信息,状态信息,版本信息
对于Linux的设备驱动程序,有两种加载模式,一种是直接加载进linux内核,一种是以模块的方式加载到内核。
/sbin: 系统管理的一些工具。如poweroff关机工具。
/usr: 安装系统时很多文件放在此目录下面,包含一些更新等,include包含的头文件,lib 是Linux的库文件,src包含Linux2.4的内核源码
/var:存放是临时变量
3、
第五篇:嵌入式系统设计报告
嵌入式系统设计实验报告
班 级:学 号:姓 名:成 绩:指导教师:
20090612 2009112107 侯金钟 武俊鹏、刘书勇 1.实验一
1.1 实验名称
嵌入式系统硬件开发环境
1.2 实验目的
1.熟悉UP-net3000实验平台。
2.超级终端设置及BIOS 功能使用。
1.3 实验环境
硬件:ARM 嵌入式开发平台、用于ARM7TDMI 的JTAG 仿真器、PC 机Pentium100 以 上、串口线。
软件:PC 机操作系统win98、Win2000 或WinXP、ARM SDT 2.51 或ADS1.2 集成开发 环境、仿真器驱动程序、超级终端通讯程序。
1.4 实验内容及要求
熟悉UP-net3000实验平台的硬件电路和外设,ARM JTAG的安装和使用,利用超级终端检验外设的工作状态。
1.5 实验设计与实验步骤
1.建立工程
(1)运行ARM SDT 2.5 集成开发环境(ARM Project Manager).(2)在新建的工程中,如图1A-2 所示,选中工程树的“根部”。
(3)因为开发板上的嵌入式处理器ARM7TDMI 没有浮点处理器,所以,如图1A-3 所
示,在弹出的对话框中设置Floating Point Processor 为none,并保持其他的设置不变。(4)选中工程树的“根部”,通过菜单Project | Tool Configuration for work1.apj | asmlink | Set,对整个工程的连接方式进行设置。(5)在弹出的对话框中,选中Entry and Base 标签,如图1A-4 所示,设置连接的Read-Only(只读)和Read-Write(读写)地址。
(6)选择Linker Configuration 的ImageLayout 标签,(7)选择Project | Edit Project Tamplete 菜单,弹出Project Template Editor 对话框。
(8)选择Project | Edit Variables for work1.apj,弹出Edit Variables for work1.apj 对话框。
2.进行程序的在线仿真、调试
1.6 实验过程与分析
熟悉UP-net3000实验平台的硬件电路和外设,安装了ARM JTAG,利用超级终端检验了外设的工作状态。
1.7 实验结果总结
软件安装成功,结果显示正常。
1.8 心得体会
通过此次试验,我对ARM的环境的功能有一定的了解与完善。对试验台有了基本的认识与使用。
2.实验二
2.1 实验名称
嵌入式系统软件开发环境
2.2 实验目的
1.熟悉ADS1.2 开发环境,学会ARM 仿真器的使用。
2.使用ADS 编译、下载、调试并跟踪一段已有的程序,了解嵌入式开发的基本思想和过程。
2.3 实验环境
硬件:ARM 嵌入式开发平台、用于ARM7TDMI 的JTAG 仿真器、PC 机Pentium100 以 上、串口线。
软件:PC 机操作系统win98、Win2000 或WinXP、ARM SDT 2.51 或ADS1.2 集成开发 环境、仿真器驱动程序、超级终端通讯程序。
2.4 实验内容及要求
本次实验使用ADS 集成开发环境。新建一个简单的工程文件,并编译这个工程文件。学习ARM 仿真器的使用和开发环境的设置。下载已经编译好的文件到嵌入式控制器中运行。学会在程序中设置断点,观察系统内存和变量。
2.5 实验设计与实验步骤
(1)运行ADS1.2 集成开发环境(CodeWarrior for ARM Developer Suite)。
(2)在新建的工程中,选择Debug 版本,使用Edit | Debug Settings菜单对Debug 版本进行参数设置。(3)在Debug Settings 对话框中选择Target Settings 项。在Post-linker一栏中选择ARM from ELF。
(4)在Debug Settings 对话框中选择ARM Linker 项
(5)在第四步中如果选择简单的地址连接设置,在Debug Settings 对话框中选择ARM Linker 项
(6)回到的工程窗口中,选择Release 版本,使用Edit | Release Settings 菜单对Release 版本进行参数设置。(7)参照第(3)、(4)、(5)、(6)步在Release Settings 对话框中设置Release版本的Post-linker、连接地址范围、入口模块和输出文件。(8)回到如图1B-3 所示的工程窗口中,选择Targets 选项卡,如图1B-11 所示。选中DebugRel 版本,按Del 键将其删除。DebugRel 子树是一个折衷版本,通常用不到,所以在这里删除。
2.6 实验过程与分析
1)回到工程窗口选中Debug 版本,执行菜单Project | Make 对工程进行编译连接。(2)在ADS 中执行菜单Project | Debug 启动ADS1.2 的调试工具AXD。(3)在AXD 中执行菜单Options | Configure Target 对AXD 进行设置。(4)点Select 按钮选择远程连接为ARM ethernet driver,点Configure 按钮输入仿真器的IP 地址。
(5)等待程序装载完毕以后,通过Execute | Go 菜单以及Execute | Stop(或者工具栏中的相应按钮)运行或暂停程序。程序暂停后在窗口中将显示出程序暂停的位置。(6)通过Execute | Step 菜单(或者工具栏中的相应按钮)可以单步运行程序。
(7)程序停止后可以通过Processor Views | Sources 菜单查看源文件,并可在适当位置按F9 设置端点。
(8)使用在Processor View 菜单下的Registers、Variables 和Memory 命令可以查看工作寄存器或者内存变量。读者可以逐一地尝试,为以后调试程序打下基础。
2.7 实验结果总结
超级终端输出“Hello World!”。
2.8 心得体会
基本了解了ADS1.2的配置条件,学会了ARM仿真器的使用方法。
3.实验三
3.1 实验名称
键盘及LED实验
3.2 实验目的
1.学习键盘及LED 驱动原理。
2.掌握ZLG7289芯片串行接口的使用方法,用ZLG7289芯片驱动17键的键盘和8个共阴极LED。
3.3 实验环境
硬件:ARM 嵌入式开发平台、用于ARM7TDMI 的JTAG 仿真器、PC 机Pentium100 以 上、串口线。
软件:PC 机操作系统win98、Win2000 或WinXP、ARM SDT 2.51 或ADS1.2 集成开发 环境、仿真器驱动程序、超级终端通讯程序。
3.4 实验内容及要求
通过ZLG7289芯片驱动17键的键盘和8个共阴极LED,将按键值在LED上显示出来。要求从右至左循环显示至少四位数字。
基本功能实现之后可考虑实现从左至右显示四位及四位以上数字(最大八位),并可设置清零键等扩展功能。
3.5 实验设计与实验步骤
利用所给的基础代码进行调试,观察输出结果,结合指导书和教材掌握基本原理和源代码的编写方式。根据实验的要求设计函数流程,并反复调试,实现功能。1.新建工程,将“Exp3 键盘及LED 驱动实验”中的文件添加到工程。2.定义ZLG7289 寄存器(ZLG7289.h)
#define ZLG7289_CS(0x20)//GPB5 #define ZLG7289_KEY(0x10)//GPG4 #define ZLG7289_ENABLE()do{ZLG7289SIOBand=rSBRDR;ZLG7289SIOCtrl=rSIOCON;rSIOCON=0x31;rSBRDR=0xff;rPDATB&=(~ZLG7289_CS);}while(0)#define ZLG7289_DISABLE()do{rPDATB|=ZLG7289_CS;rSBRDR=ZLG7289SIOBand;rSIOCON=ZLG7289SIOCtrl;}while(0)3.编写ZLG7289 驱动函数(ZLG7289.c)4.定义键盘映射表:(Keyboard16.c)
unsigned char KeyBoard_Map[]= {4,8,11,0,0,0,0,0,5,9,12,15,1,0,0,0,6,10,13,16,2,3,0,0,7,0,14,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};//64 键值映射表,通过查找键盘映射表来确定键盘扫描码对应的按键值。
5.定义键值读取函数。(Keyboard16.c)6.编写主函数,将按键值在数码管上显示。
3.6 实验过程与分析
利用键盘驱动函数实现基本数字输入,然后利用循环左移函数实现输入数字做一样功能,并通过改变函数中相应delay的值来消除键盘按键带来的抖动。
3.7 实验结果总结
按键值可以在LED上显示出来。要求从右至左循环显示八位数字,同时可以复位清零。达到实验的效果。
3.8 心得体会
通过本次实验,我了解了LED的显示屏幕的数字的移位功能,这个功能不止可以用一个方法实现,而循环左移是其中比较巧妙且省力的一种,在遇到类似情况的时候,可以优先考虑能不能利用到文件中已经存在的函数,这样可以不必自己编写函数,省时省力。是一种可靠的方法。4.实验四
4.1 实验名称
电机转动控制及中断实验
4.2 实验目的
1.熟悉ARM本身自带的六路即三对PWM,掌握相应寄存器的配置。
2.编程实现ARM系统的PWM输出和I/O输出,前者用于控制直流电机,后者用于控制步进电机。
3.了解直流电机和步进电机的工作原理,学会用软件的方法实现步进电机的脉冲分配,即用软件的方法代替硬件的脉冲分配器。
4.了解44B0处理器上中断的应用。5.学习在44B0处理器上中断的应用。
6.进一步熟悉平台外围硬件及其驱动程序的编写。
4.3 实验环境
硬件:ARM 嵌入式开发平台、用于ARM7TDMI 的JTAG 仿真器、PC 机Pentium100 以 上、串口线。
软件:PC 机操作系统win98、Win2000 或WinXP、ARM SDT 2.51 或ADS1.2 集成开发 环境、仿真器驱动程序、超级终端通讯程序。
4.4 实验内容及要求
1.学习步进电机和直流电机的工作原理,了解实现两个电机转动对于系统的软件和硬件要求。学习ARM 知识,掌握 PWM 的生成方法,同时也要掌握 I/O的控制方法。
2.编程实现ARM芯片的一对PWM输出用于控制直流电机的转动,通过A/D旋钮控制其转动方式。
3.编程实现ARM的四路I/O通道,实现环形脉冲分配用于控制步进电机的转动,通过A/D旋钮控制步进电机的转角。
4.通过键盘控制直流电机与步进电机的切换。5.设置并启动定时器。
6.设置中断,编写定时器中断服务程序,对中断次数进行计数并在LED上显示结果。
4.5 实验设计与实验步骤
1.添加并打开工程。
2.进行直流电机初始化设置和代码编写。3.进行步进电机初始化设置和代码编写。
4.对Timer3编程,编写定时器中断服务程序,完成对中断次数的计数。5.编写LED计数显示函数,使LED能正确计数并显示0-9999。6.编写中断初始化函数和中断响应函数。7.终端下载测试。
4.6 实验过程与分析 1.对直流电机进行编程和测试,掌握转速和旋转方向的设定方法。
2.对步进电机进行编程和测试,掌握ARM的四路I/O通道,实现环形脉冲分配用于控制步进电机的转动,通过A/D旋钮控制步进电机的转角。
3.对主函数进行编程,用键盘响应直流电机与步进电机的切换控制。
4.掌握中断相关语句的应用,弄清定义的中断向量、中断向量号,编写中断响应函数,并完成中断响应控制。
4.7 实验结果总结
实现了直流电机与步进电机的基本设置和控制,可以通过键盘控制电机之间的切换。完成了中断的响应和定时中断。当对其中一个旋钮转动时,就可以由直流电机转换成步进电机的转换,达到实验的效果。
4.8 心得体会
通过本次实验,我了解了直流电机和步进电机的工作原理,同时也知晓了电机间的转换过程,了解其中的道理内涵,熟悉了ARM自带的A/D转换器的工作原理及编程方法,了解了中断的意义和实现方法,实现了简单了中断处理程序。同时我也收获了很多关于ARM处理机的相关知识。
5.实验五
5.1 实验名称
触摸屏驱动实验
5.2 实验目的
1.了解触摸屏的基本概念与原理。
2.理解触摸屏与LCD的关系。3.编程实现对触摸屏的控制。
4.熟悉用 ARM 内置的 LCD控制器驱动 LCD。
5.3 实验环境
硬件:ARM 嵌入式开发平台、用于ARM7TDMI 的JTAG 仿真器、PC 机Pentium100 以 上、串口线。
软件:PC 机操作系统win98、Win2000 或WinXP、ARM SDT 2.51 或ADS1.2 集成开发 环境、仿真器驱动程序、超级终端通讯程序。
5.4 实验内容及要求
1.了解触摸屏基本原理,理解对触摸屏进行输出标定、与LCD显示器配合的过程。2.通过编程实现触摸两点自动在两点间划直线。3.通过编程实现在触摸屏上动态画出曲线。5.5 实验设计与实验步骤
1.添加并打开工程。
2.在头文件中定义宏和常量及驱动函数。
#define ADS7843_CTRL_START 0x80 #define ADS7843_GET_X 0x50 #define ADS7843_GET_Y 0x10 #define ADS7843_CTRL_12MODE 0x0 #define ADS7843_CTRL_8MODE 0x8 #define ADS7843_CTRL_SER 0x4 #define ADS7843_CTRL_DFR 0x0 #define ADS7843_CTRL_DISPWD 0x3 // Disable power down #define ADS7843_CTRL_ENPWD 0x0 // enable power down #define ADS7843_PIN_CS(1<<6)//GPF6 #define ADS7843_PIN_PEN(1<<5)//GPG5 /////////触摸屏动作//////// #define TCHSCR_ACTION_NULL 0 #define TCHSCR_ACTION_CLICK 1 //触摸屏单击 #define TCHSCR_ACTION_DBCLICK 2 //触摸屏双击 #define TCHSCR_ACTION_DOWN 3 //触摸屏按下 #define TCHSCR_ACTION_UP 4 //触摸屏抬起 #define TCHSCR_ACTION_MOVE 5 //触摸屏移动
#define TCHSCR_IsPenNotDown()(rPDATG&ADS7843_PIN_PEN)(ADS7843_CTRL_START|ADS7843_GET_X|ADS7843_CTRL_12MODE |ADS7843_CTRL_DFR|ADS7843_CTRL_ENPWD)//采样x 轴电压值,数据为12 位,参考电压输入模式为差分模式,允许省电模式
#defineADS7843_CMD_Y(ADS7843_CTRL_START|ADS7843_GET_Y|ADS7843_CTRL_12MODE |ADS7843_CTRL_DFR|ADS7843_CTRL_ENPWD)int TchScr_Xmax=1840,TchScr_Xmin=176, TchScr_Ymax=195,TchScr_Ymin=1910;//触摸屏返回电压值范围 #defineADS7843_CMD_X 3.校准触摸屏坐标,进行坐标转换。
4.实现触屏取点并显示功能。
将触摸动作及触摸点坐标在超级终端上显示出来。5.实现两点间自动划线功能。6.实现触摸屏动态划线功能。
可以使用TchScr_GetScrXY()函数(第三个参数为0)来获得液晶屏的x、y 方向的电压
范围,分别点触摸屏有效面积的左上角和右下角,得到下列参数:
TchScr_Xmax=1840;TchScr_Xmin=176;TchScr_Ymax=195;TchScr_Ymin=1910;//此数值仅供参考,请以实际校对为准
5.6 实验过程与分析 1.在定义触屏响应功能的函数中对点击触屏进行响应函数的修改,在其中添加修改点颜色的函数,修改得到的触摸点的颜色,并显示在LCD上。
2.获取第一个点坐标并储存,获取第二个点坐标并储存,由编写的划线函数取得储存的两点间直线上所有点的坐标,并对其改变颜色,显示在LCD上,即完成划直线功能。
3.将划线函数应用到响应触屏移动消息的函数下,即可对连续获得的触摸坐标进行连续的画短直线,连接成曲线,完成动态划线功能。
5.7 实验结果总结
了解了触摸屏响应动作消息的函数的工作原理,通过修改实现了触摸屏响应不同动作进行画点、划线、动态划线的功能。验证触摸屏的灵敏度的实验。
5.8 心得体会
通过这次实验,我基本掌握了通过编程驱动触摸屏以及触摸屏响应时间,实现了触摸屏对不同动作消息的响应。同时也知晓了在触摸屏上的描点画线的实现,但是由于不知名的原因,描点画线的误差较大,位置偏差较大,同时触摸屏有时会不灵敏,出现时好时坏的现象,但是由于我们的辛勤钻研,最终克服了这个困难,实现了最后的触摸屏的实现。
6.实验六
6.1 实验名称
UCOS-Ⅱ在ARM微处理器上的裁剪
6.2 实验目的
1.了解UCOS-Ⅱ内核的主要结构。
2.掌握UCOS-Ⅱ裁剪的基本原理与嵌入式编程实现方法。3.学习如何根据具体情况对UCOS-Ⅱ操作系统进行裁剪。
4.通过对UCOS-Ⅱ配置文件(OS_CFG.H)中相关的配置常量进行设置,实现对UCOS-Ⅱ的裁剪。
6.3 实验环境
硬件:ARM 嵌入式开发平台、用于ARM7TDMI 的JTAG 仿真器、PC 机Pentium100 以 上、串口线。
软件:PC 机操作系统win98、Win2000 或WinXP、ARM SDT 2.51 或ADS1.2 集成开发 环境、仿真器驱动程序、超级终端通讯程序。
6.4 实验内容及要求
对UCOS-Ⅱ内核进行裁剪并移植到ARM7微处理器上。
6.5 实验设计与实验步骤 1.按照要求,载入STARTUP目录下文件,完成系统初始化、环境配置。2.载入UCOS-Ⅱ的全部源码,与处理器架构相关的文件位于arch目录下。3.在os_cpu.h中编写与处理器和编译器相关的代码。
4.编写os_cpu_c.c等6个与操作系统相关的函数。5.编写os_cpu.asm等4个与处理器相关的函数。
6.6 实验过程与分析
按照实验步骤进行,得到了需要的系统。
6.7 实验结果总结
按照要求进行了裁剪,得到了满足需要又紧凑的应用软件系统。
6.8 心得体会
通过本次实验,我了解了UCOS-Ⅱ内核的主要结构,掌握UCOS-Ⅱ裁剪的基本原理与嵌入式编程实现方法,学会了如何根据具体情况对UCOS-Ⅱ操作系统进行裁剪。
7.实验七
7.1 实验名称
UCOS-Ⅱ在ARM微处理器上的移植和编译
7.2 实验目的
1.了解UCOS-Ⅱ内核的主要结构。
2.掌握将UCOS-Ⅱ内核移植到ARM7处理器上的基本方法。
7.3 实验环境
硬件:ARM 嵌入式开发平台、用于ARM7TDMI 的JTAG 仿真器、PC 机Pentium100 以 上、串口线。
软件:PC 机操作系统win98、Win2000 或WinXP、ARM SDT 2.51 或ADS1.2 集成开发 环境、仿真器驱动程序、超级终端通讯程序。
7.4 实验内容及要求
1.将UCOS-Ⅱ内核进行移植到ARM7微处理器上。
2.编写两个简单任务,在超级终端上观察两个任务的切换。
7.5 实验设计与实验步骤
1.该实验的文件分为两类,其一是 STARTUP 目录下的系统初始化、配置等文件,其二是 UCOS-Ⅱ的全部源码,arch 目录下的 3 个文件是和处理器架构相关的。
2.设置 os_cpu.h 中与处理器和编译器相关的代码。
3.用 C 语言编写 6 个操作系统相关的函数(OS_CPU_C.C)。4.用汇编语言编写 4 个与处理器相关的函数(OS_CPU.ASM)。5.编写一个简单的多任务程序来测试一下移植是否成功。6.编译并下载移植后的 UCOS-Ⅱ。
7.6 实验过程与分析
1.按照实验步骤进行,将µC/OS-II 内核移植到了ARM7 微处理器上。2编写了两个简单任务,在超级终端上观察两个任务的切换。
7.7 实验结果总结
将µC/OS-II 内核顺利移植到了ARM7 微处理器上。
7.8 心得体会
通过本次实验,使我更加了解了µC/OS-II 内核的主要结构,掌握了ARM的C语言和汇编语言的编程方法,了解了ARM7处理器结构,掌握了将µC/OS-II 内核移植到ARM 7 处理器上的基本原理与嵌入式编程实现方法。
8.实验八
8.1 实验名称
综合实验
8.2 实验目的
对前七次实验进行总结,应用之前所学的知识,将前几次实验内容结合起来,完成键盘,LED,触摸屏,直流电机,步进电机各种功能的组合。实现一个较为全面的功能结构。
8.3 实验环境
硬件:ARM 嵌入式开发平台、用于ARM7TDMI 的JTAG 仿真器、PC 机Pentium100 以 上、串口线。
软件:PC 机操作系统win98、Win2000 或WinXP、ARM SDT 2.51 或ADS1.2 集成开发 环境、仿真器驱动程序、超级终端通讯程序。
8.4 实验内容及要求
对前七次实验进行总结,应用之前所学的知识,完成自拟的嵌入式系统,要求综合前期基础实验的各种功能。
8.5 实验设计与实验步骤
1.添加并打开工程。2.进行LCD设计,在LCD显示屏输出文本。
3.进行LED及键盘设计,完成LED输出显示功能和键盘输入功能。4.进行电机控制设计,完成键盘控制电机转动功能。5.进行中断设计,完成定时中断功能。
6.进行触摸屏设计,完成触摸屏感应和划线功能。7.进行裁剪和移植功能设计和完成。
8.6 实验过程与分析
1.完成LCD显示功能,在LCD显示屏上输出文本:“Hello World!”。2.进入界面触屏控制选择功能,实现触屏选择功能。
3.自定义四种种功能,第一为电机控制,从键盘读取命令,并将功能编号显示在LED上,LED显示的是计数的数据,同时旋转按钮完成电机转速的控制选择。
4.第三种功能为划线,功能编号显示在LED高四位上,同时LCD屏幕清屏,为划线功能做准备,可以实现划线功能。
5.第四种功能为定时中断,当由键盘控制时,LED显示数值清零,实现了中断。6.实现裁剪与移植功能。
8.7 实验结果总结
完成了各种基本功能,并通过自拟的系统将各种功能整合起来,完成了一个小的嵌入式系统,对前七次的功能有了更深入的了解。通过LED的计数,当在计数值在前30秒之内,由键盘控制LED的数值及显示,按键盘上的某一个按键,实现对LED上的数值清零,后30秒由触摸屏控制清零,并且在前30秒之内,旋转按钮,实现对直流电机的运转,并且到步进电机的转换。
8.8 心得体会
通过这次实验,我更加深刻地掌握了前几次实验中的基本功能的实现方法,并且把几种功能联合在一起,实现一些功能,把LED 显示屏,LCD触摸屏,键盘,直流电机,步进电机等等设备联合在一起,对该实验有一定的帮助与提高,而我和我的队友也对嵌入式系统有了更深入的了解,在此期间,也学习了关于ARM处理器的开发与实践,了解了关于手机的嵌入式设备的产生过程,我也深深的对此充满了兴趣,对未来的嵌入式课程设计奠定了深厚的基础,可是令我遗憾的是,我和队员的水平所限,没有完成中断优先级的控制。本来想完成更多的功能,可是最后由于时间紧迫,也有一些其他的事情来分神分心,所以就只能完成这些,但是在未来的几周内,嵌入式课程设计也给了我们很大的空间去做未完成的事情。我相信我们会做的更加完美,功能更强大,用于未来的生活中去实践。