嵌入式系统与应用的实验报告材料_第1页
嵌入式系统与应用的实验报告材料_第2页
嵌入式系统与应用的实验报告材料_第3页
已阅读5页,还剩43页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、嵌入式系统与应用实验报告班级:网络111姓名:石长江学号:201100824123实验一汇编指令试验一、实验目的掌握ARM7TMDI 汇编指令的用法,并能编写简单的汇编程序;学习ARM微控制器的16位Thumb汇编指令的使用方法掌握指令的条件执行二、实验设备硬件:嵌入式实验平台一套、仿真器一个、PC机一台。软件:Windows 98/2000/NT/XP操作系统、仿真器驱动程序、ADS开发软件一套。三、实验内容分别使用ARM、Thumb 指令ADD,MOV,CMP,B 计算1 + 2 + 3 + N 的值。四、实验原理ARM处理器共有两种工作状态:ARM 32 位,这种状态下执行字对准的 AR

2、M 指令。Thumb 16 位,这种状态下执行半字对准的 Thumb 指令。注意:ARM 和Thumb 之间状态的切换不影响处理器的模式或寄存器的内容。ARM处理器在两种工作状态之间可以切换。(1)进入Thumb 状态。当操作数寄存器的状态位 0为1时,执行BX指令进入Thumb 状态。如果处理器在 Thumb 状态进入异常,则当从异常出来(IRQ、FIQ、Un def、Abort、SWI)返回时,自动切换到 Thumb 状态。(2)进入ARM 状态。当操作数寄存器的状态位 0为0时,执行BX指令进入ARM 状态。处 理器进行异常处理(IRQ、FIQ、Undef、Abort、SWI )。在此情

3、况下,把 PC放入异常模 式链接寄存器中。从异常向量地址开始执行也可以进入ARM 状态。Thumb 状态下的寄存器集是ARM状态下寄存器集的子集。程序员可以直接访问8个通用寄存器(R0 R7 )、PC、SP、LR和CPSP。每一种特权模式都有一组 SP、LR和SPSR。Thumb 状态的R0-R7与ARM 状态的R0-R7 一致。Thumb 状态的CPSR和SPSR与ARM 状态下的CPSR和SPSR 一致。Thumb 状态的SP映射到ARM 状态的R13。Thumb 状态的LR映射到ARM 状态的R14。Thumb 状态的PC 映射到ARM 状态的PC(R15)。本程序使用R0保存结果,所以

4、一开始就要初始化为0 ;循环执行R0=R0+R1,R1 为循环计数器,从1开始计数,每一次循环 R1加1 ;当循环计数器R1的值到达N时,运算结束。五、实验操作步骤1 .启动 ADS1.2,使用 ARM Execuatable Image工程模板建立一个工程 ASM_Project 。2 .建立源文件test2.s,编写实验程序,然后添加到工程中(ARM 指令和Thumb 指令实验的test2.s程序源码分别见下清单)。3 .设置工程链接地址 RO Base 为0x0C0000004 .编译链接工程,选择【Project】-【Debug】,启动AXD进行调试。5 .打开寄存器窗口( Proce

5、ssor Registers ),选择Current项监视各寄存器的值。6 .单步运行程序,注意执行 BX R0指令前后CPSR寄存器的T位。1,小写字母的位表示该说明:在寄存器窗口的 CPSR寄存器,大写字母的位表示该位为 位为0 (比如“ T”表示T位为1,“ t ”表示T位为0 )。7 .理解并掌握本实验原理及程序,完成练习题六、实验参考程序Thumb 汇编指令实验的参考程序代码清单;文件名:test.s;功能:计算1 + 2 + 3 +N的值NEQU 50AREA testcode,CODE,READONLYENTRYCODE32ARM_CODE LDR SP,=0x40003F00A

6、DR RO,THUMB_CODE+1BX R0LTORGCODE16THUMB_CODELDR R0,=NBL SUM_NBTHUMB_CODE;名称:SUM_N;功能:计算1 + 2 + 3 +N 的值;入口参数:R0 ( N的值);岀口参数:R0 (运算结果)SUM_NPUSH R1-R7,LRMOVS R2,R0BEQ SUM_ENDCMP R2,#1BEQ SUM_ENDMOV R1,#1MOV R0,#0SUM_L1 ADD R0,R1BCS SUM_ERRCMP R1,R2BHS SUM_ENDADD R1,#1B SUM_L1SUM_ERR MOV R0,#0_SUM_END P

7、OP R1-R7,PCENDARM汇编指令实验的参考程序代码清单:;文件名:add.s;功能:计算1 + 2 + 3 +N 的值定义N的值为50区域名为testcode,代码,只读入口sp=0x40003F00将分支目标地址送 R0,使R1的bit0=1分支并且转换为thumb状态汇编以下代码为thumb指令伪指令R0=50跳转到SUM_N执行跳转至U THUMB_CODE , thumb 模式R0的内容放入R2相等转至U SUM_ENDR2与 1比较,设置标志位相等转至U SUM_END将1送入R1将0送入R0R0=R0+R1R1与R2比较,设置标志位R0=R0+1转到SUM_L1将0送入R

8、0定义N的内容为5NEQU 5;AREA Example,CODE,READONLYENTRYCODE32STARTLDR R0,=NMOV R2,R0MOV R0,#0MOV R1,#0LOOPCMP R1,R2BHI ADD_ENDADD R0,R0,R1ADD R1,R1,#1B LOOPADD_ENDB STARTEND定义区域,区域名为Example,代码,只读入口R0=5R2=R0R0=0R1=0比较R1与R2R0=R0+R1R1=R1+1转至U loop转至U start实验二ARM微处理器工作模式实验一、实验目的通过实验掌握学会使用 MSR/MRS 指令实现ARM处理器工作模式

9、的切换,观察不同模式下的寄存器,加深对 CPU结构的理解。二、实验设备硬件:嵌入式实验平台一套、仿真器一个、PC机一台。软件:Windows 98/2000/NT/XP操作系统、仿真器驱动程序、ADS开发软件一套。三、实验内容通过ARM 汇编指令,在各种处理器模式下切换并观察各种模式下寄存器的区别;掌握ARM不同模式的进入与退出。四、实验原理1 . ARM处理器模式ARM体系结构支持表1-所示的7种处理器模式。处理器模式说明用户usr正常程序执行模式FIQ fiq支持告诉数据传送或通道处理IRQ irq 用于通用中断处理 管理svc操作系统保护模式 中止abt实现虚拟存储器和/或存储器 保护未

10、定义und支持硬件协处理器的软件仿真系统sys运行特权操作系统任务表1-处理器模式在软件控制下也可以改变模式,外部中断或异常处理也可以引起模式发生改变。大多数应用程序在用户模式下执行。 当处理器工作在用户模式时, 正在执行的程序不能访问某些被 保护的系统资源,也不能改变模式,除非异常发生。这允许适当编写操作系统来控制系统资 源的使用。除用户模式外的其他模式成为特权模式。它们可以自由地访问系统资源和改变模式。其中5种称为异常模式,即:FIQ (Fast In terrupt Request);IRQ (In terrupt Request) ;管理(Supervisor);中止(Abort);未

11、定义(Undefined)当特定的异常出现时,进入相应的模式。每种模式都有某些附加的寄存器,以避免异常出现时用户模式的状态不可靠。剩下的模式是系统模式。仅ARM 体系结构V4以及以上的版本有该模式。不能由于任何异常而进入该模式。它与用户模式有相同的寄存器, 但它是特权模式,不受用户模式的限制。 它供需要访问系统资源的操作系统任务使用,但希望避免使用与异常模式有关的附加寄存器。 避免使用附加寄存器保证了当任何异常出现时,都不会使任务的状态不可靠。2 .程序状态寄存器在所有处理模式下,都可以访问当前程序状态寄存器CPSR。CPSR包含条件码标志、中断禁止位、当前处理器模式以及其他状态和控制信息。每

12、种异常模式都有一个程序状态保 存寄存器SPSR。当异常出现时,SPSR用于保存CPSR的状态。CPSR和SPSR的格式如下:(1 )条件码标志N、Z、C、V :大多数指令可以检测这些条码标志,以决定程序指令如何执行。(2) 控制位最低8位I、F、T和M位用作控制位。当异常出现时改变控制位。当处理器在特权模式 下时也可以由软件改变。I中断禁止位:I置1则禁止IRQ中断;F置1则禁止FIQ中断。I T位:T = 0指示ARM 执行;T = 1指示Thumb 执行。在这些体系结构的系统中,可自 由地使用能在ARM 和Thumb 状态之间切换的指令。l模式位:MO、M1、M2、M3和M4(M4 : 0

13、)是模式位。这些位决定处理器的工作模(3) 其他位程序状态寄存器的其他位保留,用作以后扩展。五、实验操作步骤1启动ADS1.2,建立一个新的工程;2.建立汇编源程序文件 TEST3.S,编写实验程序,添加到工程中;3编译链接工程,点击 Debug 按钮,启动AXD进行调试;4. 点击【Processor Views】-【Registers】,打开Current 项监视个寄存器的值;5单步运行程序,注意观察 CPSR、SPSR以及R0寄存器值得变化。说明:CPSR寄存器显示方式如图1-所示。显示分为两部分,一部分是各个标志位,另一部分是工作模式。标志位 NZCVQ 为条件码标志N、Z、C、V、Q

14、,显示为大写字母,表 示该位为1 ;显示为小写字母, 表示该位为0。Q标志在ARM 体系结构v5及以上版本的E变量 中才有效。标志位IFT为IRQ中断禁止位I、FIQ中断禁止位F、ARM 微控制器状态位T,显 示为大写字母,表示该位为1 ;显示为小写字母,表示该位为0。T标志在ARM 体系结构v4及 以上版本的T变量中才有效。寄存器显示窗口一d -ErLrHE1VbjiB Luu:in=I - JEHEjUUl !1JI W-r3财al-jS(MwoaicoillMlinii444L啊 UUOdlULsrJLlMUIV-wriiTfww 归xiiEd EX!耳 TO*-CPSEM目|罪_阿=f

15、eii.Srji . i mIilxRp ncii!PnVIA ETIFf3d!l-.i-.Mr!.伍frE 尸I.4 uMfcl.晒b-piih.ehj.ekl f HxizU-UH M u u _ V4 VHn I ru EN c t E t z f 第囂rnlrm Hz比 * * N #:r-.s-m rrr-nz_5lDlELE -Hl杵胪怦f 列匚基六、实验参考程序ARM微控制器工作模式实验的参考程序如下:定义各块的长度USR_STACK_LEGTH EQU 64SVC STACK LEGTH EQU 0FIQ_STACK_LEGTH EQU 16IRQ_STACK_LEGTH EQ

16、U 64ABT_STACK_LEGTH EQU 0UND_STACK_LEGTH EQU 0AREA Example3,C0DE,READ0NLYENTRYCODE32START MOV R0,#0MOV R1,#1MOV R2,#2MOV R3,#3MOV R4,#4MOV R5,#5MOV R6,#6MOV R7,#7MOV R8,#8MOV R9,#9MOV R10,#10MOV R11,#11MOV R12,#12BL InitStackMRS R0,CPSRBIC R0,R0,#0X80MSR CPSR_cxsf,ROMSR CPSR_c,#0xd0MRS R0,CPSRMSR CP

17、SR_c,#0xd0MRS R0,CPSRHALT B HALT;名称:InitStack;功能:堆栈初始化,即初始化各模式下下的堆栈指针。;入口参数:无;出口参数:无InitStackMOV R0,LRMSR CPSR_c,#0xd3LDR SP,StackSvcMSR CPSR_c,#0xd2LDR SP,StacklrqMSR CPSR_c,#0xd1LDR SP,StackFiqMSR CPSR_c,#0xd7LDR SP,StackAbtMSR CPSR_c,#0xdb定义区域,区域名为 Example3,代码,只读 入口R0=0R1=1R2=2R3=3R4=4R5=5R6=6R7=

18、7R8=8R9=9R10=10R11=11R12=12R0的内容送入CPSRCPSR_cxsf =R0CPSR_c=0xd0R0的内容送入CPSRCPSR_c=0xd0R0的内容送入CPSR暂停LR=R0CPSR_c=0xd3SP= StackSvc,指针指到 StackSvcCPSR_c=0xd2SP= StackIrq ,指针指到 StackIrqCPSR_c=0xd1SP= StackFiq,指针指到 StackFiqCPSR_c=0xd7SP= StackAbt ,指针指到 StackAbtCPSR_c=0xdbLDR SP,StackUndMSR CPSR_c,#OxdfLDR SP

19、,StackUsrSP= StackUnd ,指针指到 StackUndCPSR_c=OxdfSP= StackUsr,指针指到 StackUsrMOV PC,R0PC=R0StackUsr DCD UsrStackSpace+(USR_STACK_LEGTH-1)*4StackSvc DCD SvcStackSpace+(SVC_STACK_LEGTH-1)*4StackIrq DCD lrqStackSpace+(IRQ_STACK_LEGTH-1)*4StackFiq DCD FiqStackSpace+(FIQ_STACK_LEGTH-1)*4StackAbt DCD AbtStack

20、Space+(ABT_STACK_LEGTH-1)*4StackUnd DCD UndStackSpace+(UND_STACK_LEGTH-1)*4AREA MyStacks,DATA,NOINIT,ALIGN=2字定义区域名为MyStacks,数据,UsrStackSpace SPACE USR_STACK_LEGTH*4SvcStackSpace SPACE SVC_STACK_LEGTH*4IrqStackSpace SPACE IRQ_STACK_LEGTH*4FiqStackSpace SPACE FIQ_STACK_LEGTH*4AbtStackSpace SPACE ABT_S

21、TACK_LEGTH*4UndStackSpace SPACE UND_STACK_LEGTH*4END各模式下cpsr的值的含义及相关寄存器的值的变化。VhI-ukflilDMflWdirJFDs;rrait4EWRIDDMF |PsrtPCUB DQ5cdEb0: :d3C DOE0tea回匸dohts卜KlO咖祸D-kLI-til.(WJUOODR刖BpZftXlL UJOiJ_L4W-iJKa1.-)B-fio4jptlOiTllirurnnimni细n#. | mu |埶却沁| V1MA9-Cih-|:hii4r in卜tltafiMioaojrnrmnaansz2toOMfCifi

22、Oa卜14卜iJ卜m血上皿即丄卜诃卜sflKiEimOO卜曲価W曲越rwnnrwT nnnri-iii卜-T13ttr-HMIE JEEC卜14pCTSE-nPTjFJrMMhtfVCLl抚戶El* Uli订STMb-4实验三通用10 口试验一、实验目的熟悉ARM芯片I/O口编程配置方法;掌握ARM芯片I/O口控制LED显示的方法。二、实验设备硬件:嵌入式实验平台一套、仿真器一个、PC机一台。软件:Windows 98/2000/NT/XP操作系统、仿真器驱动程序、ADS开发软件一套。三、实验内容控制嵌入式实验箱上的LED轮流点亮。四、实验原理S3CRRB0X 芯片上共有71 个多功能I/O引

23、脚,他们分别为 7组I/O端口:2个9位I/O端口(端口 E和F)2个8位I/O端口(端口 D和G)1 个16位I/O端口(端口C)1 个10位I/O端口(端口A)1 个11位I/O端口(端口B)每组端口都可以通过软件配置寄存器来满足不同系统合设计的需要。在运行主程序之前,必须先对每一个用到的引脚的功能进行设置。如果某些引脚的附庸功能没有使用,那么可以先将该引脚设置为 I/O 口。S3C44B0X芯片与端口相关的寄存器(1 )端口控制寄存器(PCONAG ):在S3C44B0X 芯片中,大部分引脚是使用多路复用的,所以要确定每个引脚的功能。PCO Nn (端口控制寄存器)能够定义引脚功能。如果

24、PG0PG7作为掉电模式下的唤醒信号,那么这些端口必须配置成中断模式。(2 )端口数据寄存器(PDATAG):如果端口定义为输出口,那么输出数据可以写入PDAT n 中相应的位;如果端口定义为输入口,那么输入数据可以从PDATn 相应的位中读入。(3)端口上拉寄存器(PUPCG):通过配置端口上拉寄存器,可以使该组端口与上拉 电阻连接或断开。当寄存器中相应位配置为0时,该引脚接上拉寄存器;当寄存器中相应位 配置为1时,该引脚不接上拉电阻。(4 )外部中断寄存器 (EXTINT ):通过不同的信号方式可以使8 个外部中断被请求。EXTINT 寄存器可以根据外部中断的需求,将中断触发信号配置为低电

25、平触发,高电平触发,下降沿触发,上升沿触发和边沿触发几种方式。五、实验操作步骤1. 启动 ADS1.2,使用ARM Execuatable Image工程模板新建一个工程 ;2 .添加两个组INC和SRC;3 .将INC文件夹下所有文件添加到组INC中;4 .将SRC文件夹下所有文件添加到组 SRC中;5. 建立源文件test5.C,编写实验程序,添加到工程中;6 编译链接选项的设置同前面实验;7 .编译链接工程,点击Debug 按钮,启动AXD进行调试;8 .连续点击step in 按钮,单步运行程序,主板上的三个LED灯循环点亮。9 理解并掌握本实验原理及程序,完成练习题六、实验参考程序#

26、include option.h#include def.h#include 44b.h#include 44blib.hvoid lsr_lnit(void);void HaltUndef(void);void HaltSwi(void);void HaltPabort(void);void HaltDabort(void);void Main(void)rSYSCFG=SYSCFG_8KB;,PLL_S);波特率是115200延迟0111三个灯全亮#if (PLLON 1)ChangePIIValue(PLL_M,PLL_P #endifIsr_Init();Port_Init();Uar

27、t_lnit(0,115200);Uart_Select(0);Delay(0); /calibrate Delay()Led_Display(7);Delay(1000);/calibrate Delay()Led_Display(0);Delay(5000);/calibrate Delay()Led_Display(7);Uart_Printf(n start n);while(1)亮第一个灯,其他灭亮第二个灯,其他灭亮第三个灯,其他灭Delay(5000); /calibrate Delay()Led_Display(1);Delay(5000);/calibrate Delay()L

28、ed_Displa y(2);Delay(5000);/calibrate Delay()Led_Display(4);void lsr_lnit(void)U32 i;plSR_UNDEF=(unsigned)HaltUndef;plSR_SWI =(unsigned)HaltSwi;plSR_PABORT=(unsigned)HaltPabort; plSR_DABORT=(unsigned)HaltDabort;for(i=_RAM_STARTADDRESS;i(_RAM_STARTADDRESS+0x20);i+=4) *(volatile unsigned *)i)=0xEA0000

29、00+0x1FFE;rlNTCON=0x5; / Non-vectored,IRQ enable,FIQ disable rlNTMOD=0x0; / All=IRQ mode rlNTMSK|=BIT_GLOBAL|BIT_EINT3;/ All interrupt is masked.void HaltUndef(void)Uart_Printf(Undefined instruction exception!);while(1);void HaltSwi(void)Uart_Printf(SWI exception!、);while(1);void HaltPabort(void)Uar

30、t_Printf(Pabort exception!、”);while(1);void HaltDabort(void)Uart_Printf(Dabort exception!、);while(1);思考题1 本试验中共用到了那些寄存器,他们的作用是什么?2 在原程序的基础上改变led灯的闪烁方式。将其中部分程序改为以下程序,使其变为每次两个灯一起亮Uart_Printf(n start n);while(1)Delay(5000);/calibrate Delay()Led_Display(3);Delay(5000);/calibrate Delay()Led_Display(5);De

31、lay(5000);/calibrate Delay()Led_Display(6);实验四串口试验一、实验目的1. 掌握ARM的串行口工作原理2. 学习编程实现 ARM的UART通讯3. 掌握CPU利用串口通讯的方法二、实验设备硬件:ARM嵌入式开发板、用于 ARM7TDMI的JTAG仿真器、PC、串口线。软件:PC 机操作系统 win98、Win2000 或 WinXP、ARM SDT 2.51 或 ADS1.2 集 成开发环境、仿真器驱动程序、超级终端通讯程序三、预备知识1. 用ARM ADS1.2 集成开发环境,编写和调试程序的基本过程2. ARM应用程序的框架结构3. 了解串行总线四

32、、实验内容学习串行通讯原理,了解串行通讯控制器,阅读ARM芯片文档,掌握 ARM的UART相关寄存器的功能,熟悉 ARM系统硬件的UART相关接口。编程实现 ARM 和计算机实现串行通讯。ARM 监视串行口,将接收到的字符再发送给串口(计算机与开发板是通过超级终端通讯的),即按PC键盘通过超级终端发送数据,开发板将接收到的数 据再返送给PC,在超级终端上显示。五、实验原理串行通讯是微计算机之间种常见的近距离通讯手段,因使用方便、编程简单而广泛使用,几乎所有的微控制器、PC都提供串行通讯接口。1. 异步串行I /O异步串行方式是将传输数据的每个字符 位接位(例如先低位、后高位)地传送。数据的各不

33、同位可以分时使用同传输通道,因此串行I / O 可以减少信号连线,最少用 对线即可进行。接收方对于同根线上 连串的数字信号,首先要分割成位,再按位组成字符。为了恢复发送的信息,双方必须协调工作。在微型计算机中大量使用异步串行I /O方式,双方使用各自的时钟信号,而且允许时钟频率有定误差,因此实现较容易。但是由于每个字符都要独立确定起始和结束(即每个字符都要重新同步),字符和字符间还可能有长度不定的空闲时间,因此效率较低。IP时了帶Ot Dh Q;Dr Qi Dr1 I 0111 D空空 E II P?2闲闭第k散网住H A iktn佗牠何ii恆柚植图4.1串行通信字符格式图4.1给出异步串行通

34、信中个字符的传送格式。开始前,线路处于空闲状态,送出连续1”。传送开始时首先发 个0”作为起始位,然后出现在通信线上的是字符的二进制编码数据。每个字符的数据位长可以约定为5位、6位、7位或8位,般采用ASCII编码。后面是奇偶校验位,根据约定,用奇偶校验位将所传字符中为1 ”的位数凑成奇 数个或偶数个。也可以约定不要奇偶校验,这样就取消奇偶校验位。最后是表示停止位的1 ”信号,这个停止位可以约定持续1 位、1.5 位或2位的时间宽度。至此个字符传送完毕,线路又进入空闲,持续为 1 ”。经过 段随机的时间后,下个字 符开始传送才又发出起始位每个数据位的宽度等于传送波特率的倒数。微机异步 串行通信

35、中,常用的波特率为2400,4800,9600,19200bps 等。接收方按约定的格式接收数据,并进行检查,可以查出以下三种错误:1) 奇偶错:在约定奇偶检查的情况下,接收到的字符奇偶状态和约定不符。2) 帧格式错:个字符从起始位到停止位的总位数不对。3) 溢出错:若先接收的字符尚未被微机读取,后面的字符又传送过来,则产生 溢出错。每 种错误都会给出相应的出错信息,提示用户处理。2. ARM自带的串行口寄存器S3C4510B 的UART单元提供两个独立的异步串行I/O 口(Asynchronous Serial I/O,SIO),每个通讯口均可工作在中断模式或DMA模式,也即UART能产生内

36、部中断请求或DMA请求在CPU和串行I/O 口之间传送数据。S3C4510B 的UART单元特性包括:1) 波特率可编程2) 支持红外发送与接收3) 12个停止位4) 5、6、7或8个数据位5) 奇偶校验每个异步串行通讯口都具有独立的波特率发生器、发送器、接收器和控制单元。波特率发生器可由片内系统时钟MCLK 驱动,或由外部时钟UCLK (Pin 64)驱动;发送器和接收器都有独立的数据缓冲寄存器和数据移位器。待发送的数据首先传送到发送缓冲寄存器,然后拷贝到发送移位器并通过发送数数据引脚UATXDn发送出去。接收数据首先从接收数据引脚UARXDn移入移位器,当接收到 个字节时就拷贝到接收缓冲寄

37、存器。SIO的控制单元通过软件控制工作模式的选择、状态和中断产生。当使用UART的发送中断功能时,应在初始化UART之前先写个字节数据到UART的发送缓冲寄存器,这样,当发送缓冲寄存器空时就可以产生UART的发送中断。jxrF.-iflrB(irrELmg rr.i f -i:IfitTiIfiTi:i 咆以llP4nlUSfXTnjI rR I |氈AI rR I I图4.2 串行口功能模块表4.1为UART特殊功能寄存器描述表4.1 UART特殊功能寄存器描述HRC;1 LCMS.OxBDOOLAfcTifiifel 疔控制躍存轄OxfnLCCJNUUkLXJI.ULARTKtJOkIJO

38、CCONICART i 1 聲;切由却却OMOTLSTATOLAftTjlttO 或眾珂样厲QkCOLSTATI狀总硏厅植OxCflUTXEMJHIihUUK:LAHTifilfiu料木定乂UTXBUFI(kEnOCUARTiglftlLrkXtlUFdQk.IX)IOUAELTigJt*)VRXtsur lUJttUlOLNKl堆退1hDOMS/HOjvOO(mEUUDMUART 行控制寄存器(UART Line Control Registers , ULCONO 、ULCON1 ):下 面简要介绍 UART操作。关于数据发送、数据接收、中断产生、波特率产生、回环模式和自动流控制的详细介绍

39、,请参考数据手册及其他相关资料。发送数据帧是可编程的。1个数据帧包含1个起始位、5-8个数据位、1个可选的奇 偶校验位和12个停止位。停 止位通过行控制寄存器 ULCONn配置。与发送帧类似,接收帧也是可编程的。接收帧由1 个起始位、5-8个数据位、1个可选的奇偶校验位和 12个行控制寄存器ULCONn中的停 止位组成。接收器还可以检测过速错误、奇偶校验错误、帧错误和传输中断。每个错误均可以设置个错误标志。?过速错误指已接收到的数据在读取之前被新接收的数据覆盖。?奇偶校验错误指接收器检测到的校验和与设置的不相符。?帧错误指没有接收到有效的停止位。?传输中断指接收数据 RxDn保持逻辑0超过1帧

40、的传输时间。在FIFO模式下,如果 RxFIFO非空,而在3个字的传输内没有接收到数据,那么产 生超 时。与UART有关的寄存器主要有以下几个:(1) UART行控制寄存器 ULCONn。该寄存器的位 6决定是否使用红外模式,位 5位3 决定校验方式,位 2决定停止位长度,位1和位0决定每帧的数据位数。(2) UART控制寄存器 UCONn 。该寄存器决定 UART的各种模式。 UART FIFO 控制寄存器 UFCONn 和 UARTMODEM 控制寄存器, 分别用来决定 UART FIFO和 MODEM 的模式。其中 UFCONn 的第0位决定是否启用 FIFO , UMCONn 的第 0

41、位是请 求发送位。另外,读/写状态寄存器 UTRSTAT以及错误状态寄存器 UERSTAT, 可以反映芯片目前的读/写状态以及错误类型。FIFO状态寄存器UFSTAT和MODEM 状态寄存器UMCONn,通过前者可以读出目前 FIFO是否已满足其中的字节数;通过后者可 以读出目前MODEM 的CTS状态。(3 )发送寄存器UTXH和接收寄存器 URXH。这个寄存器存放发送和接收的数据,当然 只有1个字节8位数据。 需要注意的是,在发生溢出错误时, 接收的数据必须被读出来;否 则会引发下次溢出错误。(4 )波特率分频寄存器 UBRDIVUART的波特率发生器的输入时钟可以为系统时钟,也可以从外部

42、引入时钟信号。若选用系统时钟为波特率发生器的输入时钟,当系统时钟为50MHz时,最大的波特率时钟输出为MCLK2/ 16( = 1.5625MHz),其中 MCLK2 为系统时钟 MCLK 除以 2。UCLK引脚为UART0、UART1的外部时钟输入引脚。 UART波特率发生器的输入 时钟MCLK2或UCLK,由寄存器 UCCON6选择。图4.2、图4.3为UART波特率发生器的结构图和典型的波特率。NOTE: CN10 qCl广 1 - UBRDlUh SC ULJSH 构六.实验步骤1 新建工程文件。2 .定义与UART有关的各个寄存器地址和些特殊的位命令。3 编写串口驱动函数:4 .在主

43、函数中实现将从串口 0 接收到的数据发送到串口 0(Main.c ):试验参考程序:#include option.h#include def.h#include 44b.h#include 44blib.h void lsr_lnit(void);void HaltUndef(void);void HaltSwi(void);void HaltPabort(void);void HaltDabort(void);void Main(void)U8 aa; rSYSCFG=SYSCFG_8KB;#if (PLLON=1)ChangePIIValue(PLL_M,PLL_P ,PLL_S); #

44、endifIsr_Init();Port_Init();Uart_Init(0,115200);Uart_Select(0);Delay(O); /calibrate Delay()Led_Display(7);Delay(IOOO);/calibrate Delay()Led_Display(0);Delay(5000);/calibrate Delay()Led_Display(7);Uart_Printf(n start n);Uart_Printf(nHello,FS44B0X!);Uart_Printf(nPlease Press aorborc”);while(1)aa= Uart_Getch();switch(aa)case a:Uart_Printf(nYou Pressed a);Led_Display(0x1);break;case b:Uart_Printf(nYou Pressed b);Led_Display(0x2);break;case c:Uart_Printf(nYou Pressed c);Led_Display(0x4);break;case 0x1b

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论