ARM嵌入式系统与应用实验报告.doc

上传人:爱问知识人 文档编号:5013863 上传时间:2020-01-28 格式:DOC 页数:26 大小:600.50KB
返回 下载 相关 举报
ARM嵌入式系统与应用实验报告.doc_第1页
第1页 / 共26页
ARM嵌入式系统与应用实验报告.doc_第2页
第2页 / 共26页
ARM嵌入式系统与应用实验报告.doc_第3页
第3页 / 共26页
ARM嵌入式系统与应用实验报告.doc_第4页
第4页 / 共26页
ARM嵌入式系统与应用实验报告.doc_第5页
第5页 / 共26页
点击查看更多>>
资源描述

《ARM嵌入式系统与应用实验报告.doc》由会员分享,可在线阅读,更多相关《ARM嵌入式系统与应用实验报告.doc(26页珍藏版)》请在三一文库上搜索。

1、信息科学与技术系ARM嵌入式系统与应用实验报告专业班级 _电信0803班_ 学 号 _ 姓 名 _ _ 实验老师 _ _ 总 成 绩 _20112012学年(1) 实验一 通用 IO 口试验一、实验目的 熟悉ARM 芯片I/O口编程配置方法; 掌握ARM芯片I/O口控制LED显示的方法。 二、实验设备 硬件:嵌入式实验平台一套、仿真器一个、PC 机一台。 软件:Windows 98/2000/NT/XP 操作系统、仿真器驱动程序、ADS 开发软件一套。 三、实验内容 控制嵌入式实验箱上的LED轮流点亮。 四、实验原理 S3CRRB0X 芯片上共有71 个多功能I/O 引脚,他们分别为7 组I/

2、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 芯片中,大部分引脚是使用多路复用的,所以要确定每个引脚的功能。PCONn(端口控制寄存器)能

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

4、的需求,将中断触发信号配置为低电平触发,高电平触发,下降沿触发,上升沿触发和边沿触发几种方式。 五、实验操作步骤 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理解并掌握本实验原理及程序,完成

5、练习题 六、实验参考程序 #include option.h #include def.h #include 44b.h #include 44blib.h void Isr_Init(void); void HaltUndef(void); void HaltSwi(void); void HaltPabort(void); void HaltDabort(void); void Main(void) rSYSCFG=SYSCFG_8KB; #if (PLLON 1) ChangePllValue(PLL_M,PLL_P,PLL_S); #endif Isr_Init(); 中断初始化 Po

6、rt_Init(); 端口初始化 Uart_Init(0,115200); 波特率为115200 Uart_Select(0); 选择串口0 Delay(0); /calibrate Delay() 延时 Led_Display(7); 0111三个灯全亮 Delay(1000); /calibrate Delay() Led_Display(0); 三个灯全灭 Delay(5000); /calibrate Delay() Led_Display(7); Uart_Printf(n start n); 在终端打印start while(1) Delay(5000); /calibrate D

7、elay() Led_Display(1); 点亮第一个灯,其他灭 Delay(5000); /calibrate Delay() Led_Display(2); 点亮第二个灯,其他灭 Delay(5000); /calibrate Delay() Led_Display(4); 点亮第三个灯,其他灭 void Isr_Init(void) U32 i; pISR_UNDEF=(unsigned)HaltUndef; pISR_SWI =(unsigned)HaltSwi; pISR_PABORT=(unsigned)HaltPabort; pISR_DABORT=(unsigned)Halt

8、Dabort; for(i=_RAM_STARTADDRESS;i(_RAM_STARTADDRESS+0x20);i+=4) *(volatile unsigned *)i)=0xEA000000+0x1FFE; rINTCON=0x5; / Non-vectored,IRQ enable,FIQ disable rINTMOD=0x0; / All=IRQ mode rINTMSK|=BIT_GLOBAL|BIT_EINT3; / All interrupt is masked. void HaltUndef(void) Uart_Printf(Undefined instruction

9、exception!n); while(1); void HaltSwi(void) Uart_Printf(SWI exception!n); while(1); void HaltPabort(void) Uart_Printf(Pabort exception!n); while(1); void HaltDabort(void) Uart_Printf(Dabort exception!n); while(1); 七、思考题 1、在原程序的基础上改变led灯的闪烁方式。将其中部分程序改为以下程序,使其变为每次两个灯一起亮 Uart_Printf(n start n); while(1)

10、 Delay(5000); /calibrate Delay() Led_Display(5); ;灯r5、r7 亮 Delay(5000); /calibrate Delay() Led_Display(3); ;灯r5、r6 亮 Delay(5000); /calibrate Delay() Led_Display(6); ;灯r6、r7 亮 2 、用汇编语言实现led灯的闪烁。ORG 0000H MOV P2,#0FFH ;全灭LOOP: MOV P2,#00H ;全亮 ACALL DELAY ;延时300ms MOV P2,#0FFH ;全灭 ACALL DELAY;延时300ms,A

11、CALL 绝对寻址的跳转指令 AJMP LOOP ;AJMP 绝对转移指令 DELAY: MOV R5,#3 ;延时300ms 1+(1*3)+(1*200*3)+(2*248*200*3)+(2*200*3)+(2*3)+2 =299412us=300msDEL1: MOV R6,#200 ;12M晶振DEL2: MOV R7,#230DEL3: DJNZ R7,DEL3 ;DJNZ 循环控制指令DJNZ R6,DEL2DJNZ R5,DEL1RETEND ;结束 实验二 串口试验一、实验目的 1. 掌握ARM的串行口工作原理 2. 学习编程实现ARM的UART 通讯 3. 掌握CPU利用串

12、口通讯的方法 二、实验设备 硬件:ARM嵌入式开发板、用于ARM7TDMI的JTAG仿真器、PC、串口线。 软件:PC机操作系统win98、Win2000或WinXP、ARM SDT 2.51或ADS1.2 集成开发环境、仿真器驱动程序、超级终端通讯程序。三、预备知识 1. 用ARM ADS1.2集成开发环境,编写和调试程序的基本过程 2. ARM应用程序的框架结构 3. 了解串行总线 四、实验内容 学习串行通讯原理,了解串行通讯控制器,阅读ARM芯片文档,掌握ARM的UART相关寄存器的功能,熟悉ARM系统硬件的UART相关接口。编程实现ARM和计算机实现串行通讯。 ARM监视串行口,将接收

13、到的字符再发送给串口(计算机与开发板是通过超级终端通讯的),即按PC键盘通过超级终端发送数据,开发板将接收到的数据再返送给PC,在超级终端上显示。 五、 实验原理 串行通讯是微计算机之间 种常见的近距离通讯手段,因使用方便、编程简单而广泛使用,几乎所有的微控制器、PC都提供串行通讯接口。 1. 异步串行I/0 异步串行方式是将传输数据的每个字符 位接 位(例如先低位、后高位)地传送。数据的各不同位可以分时使用同传输通道,因此串行I/0 可以减少信号连线,最少用对线即可进行。接收方对于同 根线上 连串的数字信号,首先要分割成位,再按位组成字符。为了恢复发送的信息,双方必须协调工作。在微型计算机中

14、大量使用异步串行I/0方式,双方使用各自的时钟信号,而且允许时钟频率有定误差,因此实现较容易。但是由于每个字符都要独立确定起始和结束(即每个字符都 要重新同步),字符和字符间还可能有长度不定的空闲时间,因此效率较低。 图4.1 串行通信字符格式 图4.1给出异步串行通信中 个字符的传送格式。开始前,线路处于空闲状态,送出连续1”。传送开始时首先发 个 ”作为起始位,然后出现在通信线上的是字符的二进制编码数据。每个字符的数据位长可以约定为5 位、6 位、7位或8位,一般采用ASCII编码。 后面是奇偶校验位,根据约定,用奇偶校验位将所传字符中为1”的位数凑成奇数个或偶数个。也可以约定不要奇偶校验

15、,这样就取消奇偶校验位。最后是表示停 止位的1”信号,这个停止位可以约定持续1 位、1.5 位或2 位的时间宽度。至此 个字符传送完毕,线路又进入空闲,持续为1”。经过 段随机的时间后,下个字符开始传送才又发出起始位每 个数据位的宽度等于传送波特率的倒数。微机异步 串行通信中,常用的波特率为2400,4800,9600,19200bps 等。 接收方按约定的格式接收数据,并进行检查,可以查出以下三种错误: 1)奇偶错:在约定奇偶检查的情况下,接收到的字符奇偶状态和约定不符。 2)帧格式错: 个字符从起始位到停止位的总位数不对。 3)溢出错:若先接收的字符尚未被微机读取,后面的字符又传送过来,则

16、产生 溢出错。每 种错误都会给出相应的出错信息,提示用户处理。 2. ARM自带的串行口寄存器 S3C4510B的UART单元提供两个独立的异步串行I/O口(Asynchronous Serial I/O,SIO),每个通讯口均可工作在中断模式或DMA模式,也即UART能产生内部中断请求或DMA请求在CPU和串行I/O口之间传送数据。 S3C4510B的UART单元特性包括: 1)波特率可编程 2)支持红外发送与接收 3) 12个停止位 4) 5、6、7或8个数据位 5)奇偶校验 每一个异步串行通讯口都具有独立的波特率发生器、发送器、接收器和控制单元波特率发生器可由片内系统时钟MCLK驱动,或

17、由外部时钟UCLK(Pin64)驱动;发送器和接收器都有独立的数据缓冲寄存器和数据移位器。 待发送的数据首先传送到发送缓冲寄存器,然后拷贝到发送移位器并通过发送数数据引脚 UATXDn发送出去。接收数据首先从接收数据引脚UARXDn移入移位器,当接收到一个字节时就拷贝到接收缓冲寄存器。 SIO的控制单元通过软件控制工作模式的选择、状态和中断产生。 当使用UART的发送中断功能时,应在初始化UART之前先写一个字节数据到UART的发送缓冲寄存器,这样,当发送缓冲寄存器空时就可以产生UART的发送中断。 图4.2 串行口功能模块 表4.1为UART特殊功能寄存器描述 UART行控制寄存器(UART

18、 Line Control Registers,ULCON0、ULCON1):下面简要介绍UART操作。关于数据发送、数据接收、中断产生、波特率产生、回环模式和自动流控制的详细介绍,请参考数据手册及其他相关资料。 发送数据帧是可编程的。1个数据帧包含1个起始位、5-8个数据位、1个可选的奇偶校验位和12个停止位。停止位通过行控制寄存器ULCONn配置。 与发送帧类似,接收帧也是可编程的。接收帧由1个起始位、5-8个数据位、 1个可选的奇偶校验位和12个行控制寄存器ULCONn中的停止位组成。接收器还可以检测过速错误、奇偶校验错误、帧错误和传输中断。每一个错误均可以设置一个错误标志。 过速错误指

19、已接收到的数据在读取之前被新接收的数据覆盖。 奇偶校验错误指接收器检测到的校验和与设置的不相符。 帧错误指没有接收到有效的停止位。 传输中断指接收数据RxDn保持逻辑0超过1帧的传输时间。 在FIFO模式下,如果RxFIFO非空,而在3个字的传输内没有接收到数据,那么产生超时。 与UART有关的寄存器主要有以下几个: (1)UART行控制寄存器ULCONn。该寄存器的位6决定是否使用红外模式,位5位3决定校验方式,位2决定停止位长度,位1和位0决定每帧的数据位数。 (2)UART控制寄存器UCONn。该寄存器决定UART的各种模式。UART FIFO控制寄存器UFCONn和UART MODEM

20、控制寄存器,分别用来决定UART FIFO和MODEM的模式。其中UFCONn的第0位决定是否启用FIFO,UMCONn的第0位是请求发送位。另外,读/写状态寄存器UTRSTAT以及错误状态寄存器UERSTAT,可以反映芯片目前的读写状态以及错误类型。FIFO状态寄存器UFSTAT和MODEM状态寄存器UMCONn,通过前者可以读出目前FIFO是否已满足其中的字节数;通过后者可以读出目前MODEM的CTS状态。 (3)发送寄存器UnRegisteredUTXH和接收寄存器URXH。这个寄存器存放发送和接收的数据,当然只有个字节位数据。需要注意的是,在发生溢出错误时,接收的数据必须被读出来;否则

21、会引发下次溢出错误。 (4)波特率分频寄存器UBRDIV UART的波特率发生器的输入时钟可以为系统时钟,也可以从外部引入时钟信号。 若选用系统时钟为波特率发生器的输入时钟,当系统时钟为50MHz时,则最大的波特率时钟输出为MCLK2/16(= 1.5625MHz),其中MCLK2为系统时钟MCLK除以2。 UCLK引脚为UART0、UART1的外部时钟输入引脚。UART波特率发生器的输入时钟MCLK2或UCLK,由寄存器UCCON6选择。 图4.2、图4.3为UART波特率发生器的结构图和典型的波特率。六 实验步骤 1新建工程文件。 2定义与UART有关的各个寄存器地址和 些特殊的位命令。

22、3编写串口驱动函数: 4在主函数中实现将从串口0 接收到的数据发送到串口0 实验参考程序: (Main.c): #include option.h #include def.h #include 44b.h #include 44blib.h void Isr_Init(void); void HaltUndef(void); void HaltSwi(void); void HaltPabort(void); void HaltDabort(void); void Main(void) U8 aa; 定义一个变量 rSYSCFG=SYSCFG_8KB; #if (PLLON=1) Chang

23、ePllValue(PLL_M,PLL_P,PLL_S); #endif Isr_Init(); 中断初始化 Port_Init(); 端口初始化 Uart_Init(0,115200); 设置串口波特率115200 Uart_Select(0); 选择串口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 st

24、art n); 终端打印start Uart_Printf(nHello,FS44B0X!); 终端打印hello,FS44BOX Uart_Printf(nPlease Press aorborc);打印Press aorborc while(1) aa= Uart_Getch(); 键盘输入的值赋给变量aa switch(aa) case a: 当输入的值为a时,终端打印You Pressed a Uart_Printf(nYou Pressed a); Led_Display(0x1); 点亮第一盏灯 break; case b: 当输入的值为b时,终端打印You Pressed b U

25、art_Printf(nYou Pressed b); Led_Display(0x2); 点亮第二盏灯 break; case c: 当输入的值为c时,终端打印You Pressed c Uart_Printf(nYou Pressed c); Led_Display(0x4); 点亮第三盏灯 break; case 0x1b: 当输入的值不为a,b,c时,灯都不亮 Led_Display(0x0); break; default : break; void Isr_Init(void) U32 i; pISR_UNDEF=(unsigned)HaltUndef; pISR_SWI =(un

26、signed)HaltSwi; pISR_PABORT=(unsigned)HaltPabort; pISR_DABORT=(unsigned)HaltDabort; for(i=_RAM_STARTADDRESS;i(_RAM_STARTADDRESS+0x20);i+=4) *(volatile unsigned *)i)=0xEA000000+0x1FFE; /rINTCON=0x1; / Vectored Int. IRQ enable,FIQ disable rINTCON=0x5; / Non-vectored,IRQ enable,FIQ disable rINTMOD=0x0;

27、 / All=IRQ mode rINTMSK|=BIT_GLOBAL|BIT_EINT3; / All interrupt is masked. void HaltUndef(void) Uart_Printf(Undefined instruction exception!n); while(1); void HaltSwi(void) Uart_Printf(SWI exception!n); while(1); void HaltPabort(void) Uart_Printf(Pabort exception!n); while(1); void HaltDabort(void) U

28、art_Printf(Dabort exception!n); while(1); 七、思考题1、 串行通讯最少需要几根线,分别如何连接?答:最少2根线,一个接收一个发送,电脑端9针接口,2接收(RXD),3发送端(TXD),最好再加一个5接地端(GND)2、 ARM 的串行口有几个,相应的寄存器是什么?答:3个;线性控制寄存器 ULCONn,控制寄存器 UCONn, FIFO 控制寄存器 UFCONn,控制寄存器UMCONn,状态寄存器UTRSTAT,错误状态寄存器UERSTAT, FIFO状态寄存器UFSTAT,发送寄存器UTXH和接收寄存器URXH,波特率因子寄存器UBRDIV。实验三

29、查询和中断方式键盘试验一、实验目的 通过实验了解ARM的查询和中断的方式及原理。 通过实验掌握ARM的编程方法。 二、实验设备 硬件:嵌入式实验平台 套、仿真器 个、PC 机 台。 软件:Windows 98/2000/NT/XP 操作系统、仿真器驱动程序、ADS 开发软件一套。 三、实验内容 掌握ARM中断工作原理,了解S3C44B0X的中断寄存器,掌握常用的中断的编程方法。 编写中断处理程序实现: 1.使用按钮K2触发EINT5,LED2亮 2.使用按钮K3触发EINT6,LED3 亮 3.使用按钮K4触发EINT7,LED4 亮 四、实验原理 S3C44B0X 的中断控制器可以接受来自3

30、0 个中断源的中断请求。这些中断源来自DMA,UART,SIO 等芯片内部外围或外部引脚。在这些中断源中,有4 个外部中断(EINT4/5/6/7)是逻辑“或“的关系。 中断控制器的任务是在片内外围和外部中断源组成的多重中断发生时,选择其中一个中断,通过FIQ 或IRQ 向ARM7TMDI 内核发出中断请求。实际最初的ARM7TMDI 内核只有FIQ(快速中断请求)和IRQ(通用中断请求)2 种中断,其他中断都是各个芯片厂家在设计芯片的时候定义的。对这些中断根据其优先级高低来进行处理。例如,如果定义所有的中断为IRQ 中断(通过中断模式设置),并且同时有10个中断发出请求,那么可以通过读中断优

31、先级寄存器来确定哪一个中断将被优先执行。 一般的中断模式在进入所需的服务程序之前,需要很长的中断反应时间。为了解决这个问题,S3C440X 提供了一种新的中断模式。叫做中断向量模式。它具有CISC 结构为控制器的特征,能够降低中断反应时间。也就是说,S3C44B0X 的中断控制器硬件本身直接提供了对向量中断服务的支持。 当众多中断源请求中断时,硬件优先级逻辑会判断哪一个中断将被执行;同时,硬件逻辑自动执行0x18(或0x1c)地址到各个中断源向量地址的跳转指令;然后再由中断源向量进入相应的中断处理程序。与原来软件实现的方法相比,这种方法可以显著的减少中断反应时间。1中断控制器的操作 1) 程序

32、状态寄存器的F 位到1 位 如果CPSR程序状态寄存器的F位被置位1,那么CPU将不接受来自中断控制器的FIQ;如果CPSR程序状态控制器的I位被置为1,那么CPUJ将不接受来自中断控制器的IRQ。因此,为了使能FIQ和IRQ,必须先将CPSR程序状态寄存器的F位和I位清0,并且中断屏蔽寄存器的INTMSK 中相应的位也要清0。 2)中断模式(INTMOD) ARM7TMDI提供了2 种中断模式,FIQ和IRQ模式。所有中断源在中断请求时都要确定使用了哪一种中断模式。 3)中断挂起寄存器(INTPND) 用于指示对应的中断是否被激活。如果挂起位被置位1,那么无论标志I 和标志F 是否被清0,都

33、会执行相应的中断服务程序。中断挂起寄存器为只读寄存器,所以在中断服务程序中必须加入I_ISPC 和F_ISPC 写1 的操作来清除挂起条件。 4)中断屏蔽寄存器(INTMSK) 当INTMSK寄存器的屏蔽位为1时,对应的中断被禁止;当INTMSK寄存器的屏蔽位为0时,对应的中断正常执。如果一个中断的屏蔽位为1,那么在该中断发出请求的时候挂起位还是会被置位1。如果中断屏蔽寄存器的GLOBAL位被设置为1,那么中断挂起位在中断请求时还会被设置,但所有的中断请求都不会被受理 2中断源 在30 个中断源中,有26 个中断源单独提供中断控制器,4 个外部中断(ENT4/5/6/7)是逻辑“或“的关系,他

34、们共享同一个中断控制器。另外2 个UART 错误中断(UERROR0/1)也是共同一个中断控制器 4 .中断控制专用寄存器 1) 中断控制寄存器(见表5-1 和5-2)表5-1 中断控制寄存器2)中断挂起寄存器 中断挂起寄存器INTPND共有26 位,每 位对应 个中断源,当中断请求产生时,相 应的位被置为1。该寄存器为只读寄存器,所以在中断服务程序中必须加入I-ISPC和F-ISPC写1 的操作来清除挂起条件。 如果有几个中断源同时发出中断请求,那么不管他们 否被屏蔽,他们相应的挂起位都会被置1。只 优先级寄存器会根据其优先级的设置来响应当前优先级最高的中断。 3)中断模式寄存器 中断模式寄

35、存器INTMOD 共有26 位,每 位对应一个中断源。当中断源的模式位设置 为1,对应的中断会由ARM7TDMI的内核以FIQ 模式处理。相反地,当模式位设置为0时, 中断会以IRQ 模式处理。 4) 中断屏蔽寄存器 在中断屏蔽寄存器INTMSK中,除了全屏蔽位global mask外,其余的26 位都分别对应一个中断源。当屏蔽位为1 时,对应的中断源被屏蔽;当屏蔽位为0时,该中断可以正常使用。如果全屏蔽位global mask被设置为1,则所有的中断都不执行。 5)RQ向量模式相关寄存器 S3C44B0X中的优先级产生模块包含5个单元,1个主单元和4个从单元。每 优先级产生单元管理6个中断源

36、。主优先级产生单元管理4个从单元和2个中断源。每个从单元有优先级中断源(sGn)和2个固定优先级中断源(kn ).这4个中断源的优先级 由I_PSLV 寄存器决定的。另外2个固定优先级中断源在6个中断源的优先级最低。 6)IRQ/FIQ中断源挂起清0寄存器 通过对IRQ/FIQ中断挂起清0寄存器I_ISPC/F_ISPC相应的位写1 来清除中断挂起INTPND。 五、实验参考程序 #include option.h #include def.h #include 44b.h #include 44blib.h void Isr_Init(void); void HaltUndef(void); void HaltSwi(void); void HaltPabort(void); void HaltDabort(void); void Main(v

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 研究报告 > 商业贸易


经营许可证编号:宁ICP备18001539号-1