ImageVerifierCode 换一换
格式:DOCX , 页数:24 ,大小:510.42KB ,
资源ID:22560155      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/22560155.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(ZF嵌入式实验Word文档格式.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

ZF嵌入式实验Word文档格式.docx

1、段可以分为代码段的和数据段,代码段的内容为执行代码,数据段存放代码运行时所需的数据。一个汇编程序至少应该有一个代码段,当程序较长时,可以分割为多个代码段和数据段,多个段在程序编译链接时最终形成一个可执行文件。可执行映像文件通常由以下几部分构成: 一个或多个代码段,代码段为只读属性。 零个或多个包含初始化数据的数据段,数据段的属性为可读写。 零个或多个不包含初始化数据的数据段,数据段的属性为可读写。链接器根据系统默认或用户设定的规则,将各个段安排在存储器中的相应位置。源程序中段之间相邻关系与执行的映象文件中的段之间的相邻关系不一定相同。实验三:1. ARM使用C语言编程是大势所趋在应用系统的程序

2、设计中,若所有的编程任务均由汇编语言来完成,其工作量巨大,并且不易移植。由于ARM的程序执行速度较高,存储器的存储速度和存储量也很高,因此,C语言的特点充分发挥,使得应用程序的开发时间大为缩短,代码的移植十分方便,程序的重复使用率提高,程序架构清晰易懂,管理较为容易等等。因此,C语言的在ARM编程中具有重要地位。2. ARM C语言程序的基本规则在ARM程序的开发中,需要大量读写硬件寄存器,并且尽量缩短程序的执行时间的代码一般使用汇编语言来编写,比如ARM的启动代码,ARM的操作系统的移植代码等,除此之外,绝大多数代码可以使用C语言来完成。C语言使用的是标准的C语言,ARM的开发环境实际上就是

3、嵌入了一个C语言的集成开发环境,只不过这个开发环境和ARM的硬件紧密相关。在使用C语言时,要用到和汇编语言的混合编程。当汇编代码较为简洁,则可使用直接内嵌汇编的方法,否则,使用将汇编文件以文件的形式加入项目当中,通过ATPCS的规定与C程序相互调用与访问。ATPCS,就是ARM、Thumb的过程调用标准(ARM/Thumb Procedure Call Standard),它规定了一些子程序间调用的基本规则。如寄存器的使用规则,堆栈的使用规则,参数的传递规则等。在C程序和ARM的汇编程序之间相互调用必须遵守ATPCS。而使用ADS的C语言编译器编译的C语言子程序满足用户指定的ATPCS的规则。

4、但是,对于汇编语言来说,完全要依赖用户保证各个子程序遵循ATPCS的规则。具体来说,汇编语言的子程序应满足下面3个条件: 在子程序编写时,必须遵守相应的ATPCS规则; 堆栈的使用要遵守相应的ATPCS规则; 在汇编编译器中使用-atpcs选项。基本的ATPCS规定,请详见提供的相关PDF文档。汇编程序调用C程序汇编程序的设置要遵循ATPCS规则,保证程序调用时参数正确传递。在汇编程序中使用IMPORT伪指令声明将要调用的C程序函数。在调用C程序时,要正确设置入口参数,然后使用BL调用。C程序调用汇编程序在汇编程序中使用EXPORT伪指令声明本子程序,使其他程序可调用此子程序。在C语言中使用e

5、xtern关键字声明外部函数(声明要调用的汇编子程序)。在C语言的环境内开发应用程序,一般需要一个汇编的启动程序,从汇编的启动程序,跳到C语言下的主程序,然后,执行C程序,在C环境下读写硬件的寄存器,一般是通过宏调用,在每个项目文件的Startup2410/INC目录下都有一个2410addr.h的头文件,那里面定义了所有关于2410的硬件寄存器的宏,对宏的读写,就能操作2410的硬件。具体的编程规则同标准C语言。在ARM中,有两类中断,一类是IRQ,一类是FIQ,IRQ是普通中断FIQ是快速中断,在进行大批量的复制、数据转移等工作时,常使用此类中断。FIQ的优先级高于IRQ。同时,它们都属于

6、ARM的异常模式,当一旦有中断发生,不管是外部中断,还是内部中断,正在执行的程序都会停下,PC指针进而跳入异常向量的地址处,若是IRQ中断,则PC指针跳到0x18处,若是FIQ中断,则跳到0x1C处。异常向量地址处,一般存有中断服务子程序的地址,所以,接下来PC指针跳入中断服务子程序中。当完成中断服务子程序后,PC指针会返回到被打断的程序的下一条地址处,继续执行程序。这就是ARM中断操作的基本原理。但是,通常由于生产ARM处理器的各厂家都集成了很多中断请求源,比如,串口中断、AD中断、外部中断、定时器中断、DMA中断等等,所以,很多中断可能同时请求中断,因此,为区分它们,更准确的完成任务,这些

7、中断都有相应的优先级别,以及当发生中断时,它们都有相应的中断标志位,通过在发生中断是判断中断优先级,和访问中断标志位的状态来识别到底哪一个中断发生了。三 仪器设备:实验二1. EL-ARM-830+教学实验箱,PentiumII以上的PC机,仿真调试电缆,串口直连电缆;2. PC操作系统WIN98或WIN2000或WINXP, ADS1.2集成开发环境,仿真调试驱动程序。1. EL-ARM-830+教学实验箱,PentiumII以上的PC机,仿真调试电缆,串口直连电缆;2. PC操作系统WIN98或WIN2000或WINXP,ADS1.2集成开发环境,仿真调试驱动程序。1. EL-ARM-83

8、0+教学实验箱,PentiumII以上的PC机,仿真调试电缆;2. PC操作系统WIN98或WIN2000或WINXP,ADS1.2集成开发环境,仿真调试驱 动程序。实验步骤:本实验仅使用实验教学系统的核心CPU板。在进行本实验时,LCD电源开关,音频的左右声道开关、AD通道选择开关、触摸屏中断选择开关等均应处在关闭状态。2在PC机并口和实验箱的CPU板上的JTAG接口之间,连接仿真调试电缆以及串口间连接公/母接头串口线。3打开超级终端,配置串口的属性(如COM1),配置波特率为115200,校验位无,数据位为8,停止位为1,数据控制流为无;检查连接是否可靠,可靠后,接入电源线,系统上电,同时

9、按住“空格”键,进入VIVI状态。4打开ADS1.2开发环境,从里面打开实验程序HARDWAREADS实验六Interrupt.mcp项目文件,进行编译。5编译通过后,进入ADS1.2调试界面,加载实验程序HARDWAREADS实验六Interrupt_DataDebug中的映象文件程序映像Interrupt.axf。6在ADS调试环境下全速运行映象文件。观察LED1和LED2的变化!LED1和LED2灯会由于定时中断的1秒钟发生一次,而一秒钟闪烁一次!也可以改变闪烁的频率,即改变Startup2410target.c文件内的void Timer1_init(void)函数里的rTCNTB1

10、= 48828;的赋值,数字量越小,闪烁频率越快。编译全速运行,观看结果,看闪烁频率是否发生了改变!这是对GPIO口操作的结果。具体实现见程序。1本实验仅使用实验教学系统的CPU板,串口。在进行本实验时,LCD电源开关、音频的左右声道开关、AD通道选择开关、触摸屏中断选择开关等均应处在关闭状态。2在PC机并口和实验箱的CPU板上的JTAG接口之间,连接仿真调试电缆,以及串口间连接公/母接头串口线。4打开ADS1.2开发环境,从里面打开实验程序HARDWAREADS实验三C.mcp项目文件,进行编译。5编译通过后,进入ADS1.2调试界面,加载实验程序HARDWAREADS实验三C_DataDe

11、bug中的映象文件程序映像C.axf。6在ADS调试环境下全速运行映象文件,之后,关闭超级终端,打开/实验软件/tools/目录下的串口调试助手工具,配置为波特率为115200,校验位无,数据位为8,停止位为1。不要选十六进制显示,应出现图2-3-1 界面。本程序连续发送55。图2-3-1下边分析主程序的源码:在C程序前的部分为系统的初始化,这在后边BOOTLOADER的章节里,要详细介绍。#include .incconfig.h /嵌入包括硬件的头文件unsigned char data; /定义全局变量void Main(void) Target_Init(); /目标板初始化,定义串口

12、的硬件初始化在/target.c中定义 Delay(10); /延时 data = 0x55; /给全局变量赋值 while(1) Uart_Printf(%x ,data); /串口0输出 1本实验仅使用实验教学系统的核心CPU板。五 实验源代码1.实验二:基于ARM的汇编语言程序设计在UART前的部分为系统的初始化,这在后边BOOTLOADER的章节里,要详细介绍。UART后的程序为主程序,在程序中找到下面这部分的代码,/呼叫主应用程序 b UART UART ldr r0, =GPHCON ;/设置GPIO(RxD0,TxD0引脚) ldr r1, =0x2afaaa str r1, r

13、0 ldr r0, =GPHUP ldr r1, =0x7ff str r1, r0 ; /GPH10:0禁止上拉 ldr r0, =UFCON0 ;/禁用FIFO ldr r1, =0x0 ldr r0, =UMCON0 ;/禁用AFC ldr r0, =ULCON0 ;/设置线寄存器 ldr r1, =0x3 ; /正常模式,无奇偶校验,一个停止位,8个数据位 ldr r0, =UCON0 ;/设置Uart0控制器 ldr r1, =0x245;/RX边沿触发,TX电平触发,禁用延时中断,使用RX 错误中断,正常 操作模式,中断请求或表决模式 ldr r0, =UBRDIV0 ;/设置波特

14、率为115200 ldr r1, =0x1a ;/int(50700000 / 16 / 115200) - 1 = 26 mov r1, #100Delay sub r1, r1, #0x1 bne Delay ;/开中断 ldr r0, =INTMSK ldr r1, r0 and r1, r1, #0xefffffff MOV R5 , #127 ; /设置要打印的字符的个数 MOV R1 , #0x0 ; /设置要打印的字符LOOP LDR R3 , =UTRSTAT0 LDR R2 , R3 TST R2 ,#0x04 ; /判断发送缓冲区是否为空 BEQ LOOP ;/为空则执行下

15、边的语句,不为空则跳转到LOOP LDR R0 , =UTXH0 STR R1 ,R0 ;/向数据缓冲区放置要发送的数据 ADD R1, R1, #1 SUB R5 ,R5, #0x01 ;/计数器减一 CMP R5 ,#0x0 BNE LOOP LOOP2 B LOOP2 2.基于ARM的C语言程序设计 puts(“hello,world”);3.ARM的中断实验#include string.h.Applicationincconfig.hvoid HaltUndef(void)Undefined instruction exception.n); while(1);void HaltSw

16、i(void)SWI exception.nvoid HaltPabort(void)Pabort exception.nvoid HaltDabort(void)Dabort exception.nvoid Isr_Init(void) pISR_UNDEF = (unsigned)HaltUndef; pISR_SWI = (unsigned)HaltSwi; pISR_PABORT = (unsigned)HaltPabort; pISR_DABORT = (unsigned)HaltDabort; rINTMOD = 0x0; /Interrupt mode regiseter. 0

17、= IRQ mode 1 = FIQ moderINTMSK = BIT_ALLMSK; /Determine which interrupt source is masked. The masked interrupt source will not be serviced. 0 = Interrupt service is available. 1 = Interrupt service is masked. rINTSUBMSK = BIT_SUB_ALLMSK; /Determine which interrupt source is masked.The masked interru

18、pt source will not be serviced. 1 = Interrupt service is masked. void Target_Init(void) MMU_Init(); ChangeClockDivider(1,1); / 1:2:4 ChangeMPllValue(0xa1,0x3,0x1); / FCLK=202.8MHz Port_Init(); Isr_Init(); Uart_Init(0,115200); Uart_Select(0);六实验现象1基于ARM的汇编语言程序设计2基于ARM的C语言程序设计3. ARM的中断实验在该实验中,按下程序启动后,

19、初始化定时器1,设定定时器的中断时间,然后,等待定时器中断,当定时器中断到来时,就会进入定时器中断服务子程序,而中断服务子程序会把LED1和LED2灯熄灭或点亮,从现象中看到LED1和LED2 灯忽闪一次,则说明定时器发生了一次中断。最后,关闭中断请求,等待下一次的中断的到来。为使CPU响应中断,在中断服务子程序执行之前,必须打开ARM920T的CPSR中的I位,以及相应的中断屏蔽寄存器中的位。七、实验体会1.基于ARM的汇编语言程序设计1.1 S3C2410的串口UART概述(1)S3C2410异步串行通信(UART)单元S3C2410 UART单元提供3个独立的异步串行通信接口,皆可工作于

20、查询、中断和DMA模式。使用系统时钟最高波特率达230. 4 kb/s,如果使用外部设备提供的时钟,可以达到更高的速率。每一个UART单元包含一个16字节的FIFO(First Input First Output,先进先出移位寄存器),用于数据的接收和发送。S3C2410 UART支持可编程波特率、红外发送/接收( UART2 )、1个或2个停止位、5位/6位/7位/8位数据宽度和奇偶校验。(2) 波特率的产生波特率由一个专用的UART波特率分频寄存器(UBRDIVn)控制,UBRDIVn值计算公如下: UBRDIVn=(int)ULK/(波特率 16)1或者 UBRDIVn=(int) P

21、LK/(波特率式中:时钟选用ULK还是PLK由UART控制寄存器UCONn10的状态决定。如果UCONn10=0,则用PLK作为波特率发生器的时钟源频率;否则选用ULK作为波特率发生器的时钟源频率。UBRDIVn的值必须在1(2161)之间。例如:若ULK或者PLK等于40 MHz,当波特率为115200 b/s时,则UBRDIVn=(int)40 000 000/(115 200 16)一1=int(21. 7)1= 211=20(3) UART通信操作下面简略介绍UART操作,关于数据发送、数据接收、中断产生、波特率产生、查询检测模式。发送数据帧是可编程的。一个数据帧包含1个起始位、58个

22、数据位、1个可选的奇偶校验位和12位停止位,停止位通过行控制寄存器ULCONn配置。与发送数据帧类似,接收数据帧也是可编程的。接收帧由1个起始位、58个数据位、l个可选的奇偶校验位以及12位行控制寄存器ULCONn中设定的停止位组成。接收器还可以检测溢出错、奇偶校验错、帧错误和传输中断,每一个错误均可以设置一个错误标志。1.2 UART的控制寄存器(1) UART行控制寄存器ULCONn 该寄存器的位6决定是否使用红外模式,位5、位4和位3决定校验方式,位2决定停止位长度,位1和位0决定每帧的数据位数。具体如下:ULCONn7 保留;ULCONn6 红外线模式,0:正常模式;1:红外线模式;U

23、LCONn5:3 校验模式,0xx:无校验;100:奇校验;101:偶校验;ULCONn2 停止位,0:一个停止位;二个停止位;ULCONn1:0 数据位,00:5位;01:6位;10:7位;11:8位。(2) UART控制寄存器UCONn该寄存器决定UART的各种模式。UCONn10 1:ULK做波特率发生器;0:PLK做波特率发生器。UCONn9 1:Tx中断电平触发;Tx中断脉冲触发。UCONn8 1:Rx中断电平触发;Rx中断脉冲触发。UCONn7 1:接收超时中断允许;接收超时中断禁止。UCONn6 1:产生接收错误中断;不产生接收错误中断。UCONn5 l:发送直接传给接收方式(l

24、oopback);正常模式。UCONn4 1:发送间断信号;正常模式发送。UCONn3:2 发送模式选择: 00:禁止发送; 01:中断或查询模式; 10:DMA0请求(UART0 ) , DMA3请求(UART2); 11:DMAl请求(UART1)。UCONn1:0 接收模式选择。禁止接收; 10 : DMA0请求UART0,DMA2请求UART2;DMAl请求UART1。(3)UART FIFO控制寄存器UFCONnUFCONn7:6Tx FIFO寄存器中有0字节就触发中断;Tx FIFO寄存器中有4字节就触发中断;Tx FIFO寄存器中有8字节就触发中断;Tx FIFO寄存器中有12字节就触发中断。UFCONn5:4Rx FIFO寄存器中有4字节就触发中断;Rx FIFO寄存器中有8字节就触发中断;Rx FIFO寄存器中有12字节就触发中断;Rx FIFO寄存器中有16字节就触发中断。UFCONn3 保留。UFCONn2 1: FIFO复位清零Tx

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1