北理工嵌入式系统实验报告.docx

上传人:b****8 文档编号:9168114 上传时间:2023-05-17 格式:DOCX 页数:45 大小:474.27KB
下载 相关 举报
北理工嵌入式系统实验报告.docx_第1页
第1页 / 共45页
北理工嵌入式系统实验报告.docx_第2页
第2页 / 共45页
北理工嵌入式系统实验报告.docx_第3页
第3页 / 共45页
北理工嵌入式系统实验报告.docx_第4页
第4页 / 共45页
北理工嵌入式系统实验报告.docx_第5页
第5页 / 共45页
北理工嵌入式系统实验报告.docx_第6页
第6页 / 共45页
北理工嵌入式系统实验报告.docx_第7页
第7页 / 共45页
北理工嵌入式系统实验报告.docx_第8页
第8页 / 共45页
北理工嵌入式系统实验报告.docx_第9页
第9页 / 共45页
北理工嵌入式系统实验报告.docx_第10页
第10页 / 共45页
北理工嵌入式系统实验报告.docx_第11页
第11页 / 共45页
北理工嵌入式系统实验报告.docx_第12页
第12页 / 共45页
北理工嵌入式系统实验报告.docx_第13页
第13页 / 共45页
北理工嵌入式系统实验报告.docx_第14页
第14页 / 共45页
北理工嵌入式系统实验报告.docx_第15页
第15页 / 共45页
北理工嵌入式系统实验报告.docx_第16页
第16页 / 共45页
北理工嵌入式系统实验报告.docx_第17页
第17页 / 共45页
北理工嵌入式系统实验报告.docx_第18页
第18页 / 共45页
北理工嵌入式系统实验报告.docx_第19页
第19页 / 共45页
北理工嵌入式系统实验报告.docx_第20页
第20页 / 共45页
亲,该文档总共45页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

北理工嵌入式系统实验报告.docx

《北理工嵌入式系统实验报告.docx》由会员分享,可在线阅读,更多相关《北理工嵌入式系统实验报告.docx(45页珍藏版)》请在冰点文库上搜索。

北理工嵌入式系统实验报告.docx

北理工嵌入式系统实验报告

 

嵌入式系统实验报告

 

实验二…………………………………………………………………1

实验三…………………………………………………………………4

实验四…………………………………………………………………7

实验六…………………………………………………………………17

填充三角形实验………………………………………………………24

 

实验二基于ARM的汇编语言程序设计简介

一、实验目的

1.了解ARM汇编语言的基本框架,学会使用ARM的汇编语言编程

二、实验内容

1.用汇编语言编写一个简单的应用程序

三、实验设备

1.EL-ARM-830教学实验箱,PentiumII以上的PC机,仿真调试电缆,串口电缆。

2.PC操作系统WIN98或WIN2000或WINXP,ADS1.2集成开发环境,仿真调试驱动

程序

四、汇编语言简介

1.ARM汇编的一些简要的书写规范

ARM汇编中,所有标号必须在一行的顶格书写,其后面不要添加“:

”,而所有指

令均不能顶格书写。

ARM汇编对标识符的大小写敏感,书写标号及指令时字母大

小写要一致。

在ARM汇编中,ARM指令、伪指令、寄存器名等可以全部大写或者

全部小写,但不要大小写混合使用。

注释使用“;”号,注释的内容由“;”号起

到此行结束,注释可以在一行的顶格书写。

详细的汇编语句及规范请参照ARM汇编的相关书籍、文档,也可参照我们提供的

文档。

2.ARM汇编语言程序的基本结构

在ARM汇编语言程序中,是以程序段为单位来组织代码。

段是相对独立的指令或

数据序列,具有特定的名称。

段可以分为代码段的和数据段,代码段的内容为执

行代码,数据段存放代码运行时所需的数据。

一个汇编程序至少应该有一个代码

段,当程序较长时,可以分割为多个代码段和数据段,多个段在程序编译链接时

最终形成一个可执行文件。

可执行映像文件通常由以下几部分构成:

◆一个或多个代码段,代码段为只读属性。

◆零个或多个包含初始化数据的数据段,数据段的属性为可读写。

◆零个或多个不包含初始化数据的数据段,数据段的属性为可读写。

链接器根据系统默认或用户设定的规则,将各个段安排在存储器中的相应位

EL-ARM-830实验指导书39

置。

源程序中段之间的相邻关系与执行的映象文件中的段之间的相邻关系不一定

相同。

五、实验步骤

1.本实验仅使用实验教学系统的CPU板,串口。

在进行本实验时,LCD电源开关、

音频的左右声道开关、AD通道选择开关、触摸屏中断选择开关等均应处在关闭状态。

2.在PC机并口和实验箱的CPU板上的JTAG接口之间,连接仿真调试电缆,以及串

口间连接公/母接头串口线。

3.检查连接是否可靠,可靠后,接入电源线,系统上电。

4.打开ADS1.2开发环境,从里面打开\实验程序\HARDWARE\ADS\实验二\asm.mcp项

目文件,进行编译。

EL-ARM-830实验指导书40

5.编译通过后,进入ADS1.2调试界面,加载\实验程序\HARDWARE\ADS\实验二

\asm_Data\Debug中的映象文件程序映像asm.axf。

6.打开超级终端,配置波特率为115200,校验位无,数据位为8,停止位为1。

后,在ADS调试环境下全速运行映象文件,应出现图2-2-1界面:

图2-2-1

六、所用主程序:

//呼叫主应用程序

bUART

UART

ldrr0,=GPHCON;//设置GPIO(RxD0,TxD0引脚)

ldrr1,=0x2afaaa

strr1,[r0]

ldrr0,=GPHUP

ldrr1,=0x7ff

strr1,[r0];//GPH[10:

0]禁止上拉

ldrr0,=UFCON0;//禁用FIFO

EL-ARM-830实验指导书41

ldrr1,=0x0

strr1,[r0]

ldrr0,=UMCON0;//禁用AFC

ldrr1,=0x0

strr1,[r0]

ldrr0,=ULCON0;//设置线寄存器

ldrr1,=0x3;//正常模式,无奇偶校验,一个停止位,8个数据位

strr1,[r0]

ldrr0,=UCON0;//设置Uart0控制器

ldrr1,=0x245;//RX边沿触发,TX电平触发,禁用延时中断,使用RX错误中断,

正常操作模式,中断请求或表决模式

strr1,[r0]

ldrr0,=UBRDIV0;//设置波特率为115200

ldrr1,=0x1a;//int(50700000/16/115200)-1=26

strr1,[r0]

movr1,#100

Delay

subr1,r1,#0x1

bneDelay

;//开中断

ldrr0,=INTMSK

ldrr1,[r0]

andr1,r1,#0xefffffff

strr1,[r0]

MOVR5,#127;//设置要打印的字符的个数

MOVR1,#0x0;//设置要打印的字符

LOOP

LDRR3,=UTRSTAT0

LDRR2,[R3]

TSTR2,#0x04;//判断发送缓冲区是否为空

BEQLOOP;//为空则执行下边的语句,不为空则跳转到LOOP

LDRR0,=UTXH0

STRR1,[R0];//向数据缓冲区放置要发送的数据

ADDR1,R1,#1

EL-ARM-830实验指导书42

SUBR5,R5,#0x01;//计数器减一

CMPR5,#0x0

BNELOOP

LOOP2BLOOP2

分析清楚之后,我们改变R1的数据,换成其他的数据,然后保存、编译、调试。

察结果,比如0xaa,0x01等等。

七、实验总结

经过该实验,我们了解了EL-ARM-830型教学实验系统属于一种综合的教学实验系统,ARM程序的结构,并学习ARM与上位机通讯的相关知识。

同时学习了codewarrior和超级终端以及调试程序的使用,对三星的2410ARM处理器基本架构和外设有了一定程度的了解。

实验三(辅助实验:

基于ARM的C语言程序设计简介)

一、实验目的

1.了解ARMC语言的基本框架,学会使用ARM的C语言编程

二、实验内容

1.用C语言编写一个简单的应用程序

三、实验设备

1.EL-ARM-830教学实验箱,PentiumII以上的PC机,仿真调试电缆,串口电缆。

2.PC操作系统WIN98或WIN2000或WINXP,ADS1.2集成开发环境,仿真调试驱动程

四、ARMC语言简介与使用规则

1.ARM使用C语言编程是大势所趋

在应用系统的程序设计中,若所有的编程任务均由汇编语言来完成,其工作

量巨大,并且不易移植。

由于ARM的程序执行速度较高,存储器的存储速度和存

储量也很高,因此,C语言的特点充分发挥,使得应用程序的开发时间大为缩短,

代码的移植十分方便,程序的重复使用率提高,程序架构清晰易懂,管理较为容

易等等。

因此,C语言的在ARM编程中具有重要地位。

2.ARMC语言程序的基本规则

在ARM程序的开发中,需要大量读写硬件寄存器,并且尽量缩短程序的执行

时间的代码一般使用汇编语言来编写,比如ARM的启动代码,ARM的操作系统的

移植代码等,除此之外,绝大多数代码可以使用C语言来完成。

C语言使用的是标准的C语言,ARM的开发环境实际上就是嵌入了一个C语

言的集成开发环境,只不过这个开发环境和ARM的硬件紧密相关。

在使用C语言时,要用到和汇编语言的混合编程。

当汇编代码较为简洁,则

可使用直接内嵌汇编的方法,否则,使用将汇编文件以文件的形式加入项目当中,

通过ATPCS的规定与C程序相互调用与访问。

ATPCS,就是ARM、Thumb的过程调用标准(ARM/ThumbProcedureCall

Standard),它规定了一些子程序间调用的基本规则。

如寄存器的使用规则,堆

栈的使用规则,参数的传递规则等。

EL-ARM-830实验指导书44

在C程序和ARM的汇编程序之间相互调用必须遵守ATPCS。

而使用ADS的C

语言编译器编译的C语言子程序满足用户指定的ATPCS的规则。

但是,对于汇编

语言来说,完全要依赖用户保证各个子程序遵循ATPCS的规则。

具体来说,汇编

语言的子程序应满足下面3个条件:

●在子程序编写时,必须遵守相应的ATPCS规则;

●堆栈的使用要遵守相应的ATPCS规则;

●在汇编编译器中使用-atpcs选项。

基本的ATPCS规定,请详见提供的相关PDF文档。

汇编程序调用C程序

汇编程序的设置要遵循ATPCS规则,保证程序调用时参数正确传递。

在汇编程序中使用IMPORT伪指令声明将要调用的C程序函数。

在调用C程序时,要正确设置入口参数,然后使用BL调用。

C程序调用汇编程序

汇编程序的设置要遵循ATPCS规则,保证程序调用时参数正确传递。

在汇编程序中使用EXPORT伪指令声明本子程序,使其他程序可以调用此子

程序。

在C语言中使用extern关键字声明外部函数(声明要调用的汇编子程序)。

在C语言的环境内开发应用程序,一般需要一个汇编的启动程序,从汇编的

启动程序,跳到C语言下的主程序,然后,执行C程序,在C环境下读写硬件的

寄存器,一般是通过宏调用,在每个项目文件的Startup2410/INC目录下都有一

个2410addr.h的头文件,那里面定义了所有关于2410的硬件寄存器的宏,对宏

的读写,就能操作2410的硬件。

具体的编程规则同标准C语言。

五、实验步骤

1.本实验仅使用实验教学系统的CPU板,串口。

在进行本实验时,LCD电源开关、音

频的左右声道开关、AD通道选择开关、触摸屏中断选择开关等均应处在关闭状态。

2.在PC机并口和实验箱的CPU板上的JTAG接口之间,连接仿真调试电缆,以及串

口间连接公/母接头串口线。

3.检查连接是否可靠,可靠后,接入电源线,系统上电。

4.打开ADS1.2开发环境,从里面打开\实验程序\HARDWARE\ADS\实验三\C.mcp项目

文件,进行编译。

EL-ARM-830实验指导书46

5.编译通过后,进入ADS1.2调试界面,加载\实验程序\HARDWARE\ADS\实验三

\C_Data\Debug中的映象文件程序映像C.axf。

6.打开/实验软件/tools/目录下的串口调试助手工具,配置为波特率为115200,

校验位无,数据位为8,停止位为1。

不要选十六进制显示。

之后,在ADS调试环境下全

速运行映象文件,应出现图2-3-1界面。

本程序连续发送55。

图2-3-1

下边分析一下主程序的源码。

在C程序前的部分为系统的初始化,这在后边BOOTLOADER的章节里,要详细介

绍。

#include"..\inc\config.h"//嵌入包括硬件的头文件

unsignedchardata;//定义全局变量

voidMain(void)

{

Target_Init();//目标板初始化,定义串口的硬件初始化在

//target.c中定义

Delay(10);//延时

data=0x55;//给全局变量赋值

while

(1)

EL-ARM-830实验指导书47

{

Uart_Printf("%x",data);//串口0输出

Delay(10);

}

}

把data=0x55;语句中的0x55,换成其他8位数,重新编译,下载,看看串口工

具上输出是什么内容。

6、实验总结

由于该实验的例程存在问题,故和大家一样无法做出实验结果,尽管没有结果,但试验的时候我详细阅读了指导书相关内容,故对ARMC有了一个比较深入的了解,提高了自己对ARM的认识。

实验四ARM的中断实验

一、实验目的

1.掌握ARM9的中断原理,能够对S3C2410的中断资源及其相关中断寄存器的进行合

理配置

2.掌握对S3C2410的中断的编程的方法

二、实验内容

1.学习响应外部中断请求的配置方法,并通过响应定时器中断,执行中断服务子程

序使CPU板上的LED指示灯LED1、LED2闪烁。

三、实验设备

1.EL-ARM-830教学实验箱,PentiumII以上的PC机,仿真调试电缆。

2.PC操作系统WIN98或WIN2000或WINXP,ADS1.2集成开发环境,

仿真调试驱动程序

四、ARM的中断原理

在ARM中,有两类中断,一类是IRQ,一类是FIQ,IRQ是普通中断,FIQ是快

速中断,在进行大批量的复制、数据转移等工作时,常使用此类中断。

FIQ的优先

级高于IRQ。

同时,它们都属于ARM的异常模式,当一旦有中断发生,不管是外部

中断,还是内部中断,正在执行的程序都会停下,PC指针进而跳入异常向量的地址

处,若是IRQ中断,则PC指针跳到0x18处,若是FIQ中断,则跳到0x1C处。

常向量地址处,一般存有中断服务子程序的地址,所以,接下来PC指针跳入中断

服务子程序中。

当完成中断服务子程序后,PC指针会返回到被打断的程序的下一条

地址处,继续执行程序。

这就是ARM中断操作的基本原理。

但是,通常由于生产ARM处理器的各厂家都集成了很多中断请求源,比如,串

口中断、AD中断、外部中断、定时器中断、DMA中断等等,所以,很多中断可能同

时请求中断,因此,为区分它们,更准确的完成任务,这些中断都有相应的优先级

别,以及当发生中断时,它们都有相应的中断标志位,通过在发生中断是判断中断

优先级,和访问中断标志位的状态来识别到底哪一个中断发生了。

五、三星的2410ARM处理器的中断的使用

首先,ARM920TCPU的PSR寄存器中的F位为1,则CPU不会响应中断控制器

的FIQ中断,同样,ARM920TCPU的PSR寄存器中的I位为1,则CPU也不会响应

EL-ARM-830实验指导书60

中断控制器的IRQ中断,为使CPU响应中断,须在启动代码中将其设为0,以及使

INTMSK寄存器中的相应位置0。

S3C2410共有56个中断源,有26个中断控制器,外部中断EXTIN8~23共用一

个中断控制器,外部中断EXTIN4~7共用一个中断控制器,9个UART中断分成3组,

共用3个中断控制器,ADC和触摸屏共用一个中断控制器。

见表2-6-2

中断的优先级是由主组号和从ID号的级别控制的。

中断优先级产生模块如下图所示:

图2-6-1

从上图可以看出,中断优先级产生模块共有7个判优器,每个判优器是否使能

由寄存器PRIORITY[6:

0]决定,每个判优器下面有4~6个中断源,这些中断源对应着

REQ0~REQ5这6个优先级,这些优先级由寄存器PRIORITY[20:

7]的相应位决定。

要正确使用S3C2410的中断控制器,必须设置如下的寄存器,如下表2-6-1所示:

EL-ARM-830实验指导书61

SRCPND0x4a000000R/W中断源挂起寄存器,当中断产生后,相应位置

INTMOD0x4a000004R/W中断模式寄存器,设定IRQ或FIQ模式

INTMSK0x4a000008R/W中断屏蔽寄存器,如果相应位置位则该中断被

屏蔽

PRIORITY0x4a00000cR/W中断优先级控制寄存器,设置中断优先级

INTPND0x4a000010R/W中断挂起寄存器,相应位对应正在执行的中断

服务

INTOFFSET0x4a000014R中断源请求偏移寄存器

SUBSRCPND0x4a000018R/W子中断源挂起寄存器

INTSUBMSK0x4a00001cR/W子中断屏蔽寄存器

中断挂起寄存器主要是提供哪个中断有请求的标志寄存器,相应位置1,则说明有该

中断请求产生。

若相应位为0,则无该中断请求产生。

中断模式寄存器主要是配置该中断是IRQ型中断,还是FIQ型中断。

中断屏蔽寄存器的主要功能是屏蔽相应中断的请求,即使中断挂起寄存器的相应位已

经置1,若中断屏蔽寄存器相应位置1,则中断控制器屏蔽该中断请求,也无法让CPU响应

该中断。

INTPND为向量IRQ中断服务挂起状态寄存器,当向量IRQ中断发生时,该寄存器内只

有一位被设置,即只有当前要服务的中断标志位置位。

通过读它的值,就能判断出哪个中

断发生了。

在INTPND中相应位写入数据,就能清除掉中断挂起寄存器中的中断请求标志

位,以使CPU不再响应中断,其实,CPU响应中断是看中断挂起寄存器中的请求标志位有

没有置位,若置位,又屏蔽位打开,ARM920T的PSR的F或I为也打开,那么,CPU就响

应中断,否则,有一个条件不成立,则CPU无法响应中断。

EL-ARM-830实验指导书62

六、中断编程实例

在ADS1.2的开发环境下,打开HARDWARE/ADS/实验六目录下的Interrupt.mcp

项目,在Application/SRC/Main.c中可以看到,主程序中,在进行目标板初始化

后,程序进入死循环,等待中断!

在Startup2410/src/target.C文件中包括对要

使用的中断控制器的初始化程序,CPU响应了该中断后的中断服务子程序。

该项目的程序流程是,按下程序启动后,初始化定时器1,设定定时器的中断时

间,然后,等待定时器中断,当定时器中断到来时,就会进入定时器中断服务子程

序,而中断服务子程序会把LED1和LED2灯熄灭或点亮,从现象中看到LED1和LED2

灯忽闪一次,则说明定时器发生了一次中断。

最后,关闭中断请求,等待下一次的

EL-ARM-830实验指导书63

中断的到来。

为使CPU响应中断,在中断服务子程序执行之前,必须打开ARM920T

的CPSR中的I位,以及相应的中断屏蔽寄存器中的位。

打开相应的中断屏蔽寄存器中的位,是在target.C中的voidTimer1INT_Init(void)

函数中,在做了这些准备后,就可以等待中断的到来了。

voidTimer1INT_Init(void){//定时器接口使能

if((rINTPND&BIT_TIMER1)){

rSRCPND|=BIT_TIMER1;

}

pISR_TIMER1=(int)Timer1_ISR;

rINTMSK&=~(BIT_TIMER1);//开中断;

}

TIMER1INT_Init()函数已在Target_Init()中调用。

详见/实验程序/HARDWARE/ADS/实验六目录下的Interrupt.mcp源代码注释。

七、实验步骤

1.本实验仅使用实验教学系统的核心CPU板。

在进行本实验时,LCD电源开关,音频

的左右声道开关、AD通道选择开关、触摸屏中断选择开关等均应处在关闭状态。

2.在PC机并口和实验箱的CPU板上的JTAG接口之间,连接仿真调试电缆。

3.检查连接是否可靠,可靠后,接入电源线,系统上电。

4.打开ADS1.2开发环境,从里面打开\实验程序\HARDWARE\ADS\实验六

\Interrupt.mcp项目文件,进行编译。

5.编译通过后,进入ADS1.2调试界面,加载\实验程序\HARDWARE\ADS\实验六

\Interrupt_Data\Debug中的映象文件程序映像Interrupt.axf。

6.在ADS调试环境下全速运行映象文件。

观察LED1和LED2的变化!

LED1和LED2灯

会由于定时中断的1秒钟发生一次,而一秒钟闪烁一次!

也可以改变闪烁的频率,即改变

Startup2410\target.c文件内的voidTimer1_init(void)函数里的rTCNTB1=48828;的

赋值,数字量越小,闪烁频率越快。

编译全速运行,观看结果,看闪烁频率是否发生了改

变!

这是对GPIO口操作的结果。

具体实现见程序。

8、实验总结

观察到实验所述现象,经过仔细阅读实验指导书,我们对ARM中断有了一个更为深入的了解。

实验十二

表2-12-5

对于STNLCD,需要设置下面几个位:

INVVCLK[10]STN/TFT:

这个位设置VCLK活动边缘的极性

EL-ARM-830实验指导书65

0=在VCLK下降沿视频数据被取走

1=在VCLK上升沿视频数据被取走

INVVLINE[9]STN/TFT:

这个位设置行脉冲的极性

0=Normal

1=Inverted

INVVFRAME[8]STN/TFT:

这个位设置VFRAME脉冲的极性

0=Normal

1=Inverted

INVVD[7]STN/TFT:

这个位设置VD(videodata)脉冲的极性

0=Normal

1=VDisinverted.

INVPWREN[5]STN/TFT:

这个位设置PWREN信号的极性

0=Normal

1=Inverted

BSWP[1]STN/TFT:

字节交换控制位

0=SwapDisable

1=SwapEnable

HWSWP[0]STN/TFT:

半字交换控制位

0=SwapDisable

1=SwapEnable

表2-12-6为LCD的帧缓冲区开始地址寄存器1的的配置说明。

表2-12-6

EL-ARM-830实验指导书66

LCDBANK:

[29:

21]指示视频缓冲区在系统存储器的段地址A[30:

22]

LCDBANK在视点移动时不能变化,LCD帧缓冲区应当与4M区

域对齐,因此在分配存储区应当注意

LCDBASEU:

[20:

0]指示帧缓冲区或在双扫描LCD时的高帧缓冲区的开始地址

A[21:

1]

注:

1.LCDBANK在ENVID=1时不能变化.

2.如果LCDBASEU,LCDBASEL在ENVID=1时变化,新的量将在下一帧起作用,

表2-12-7为LCD的帧缓冲区开始地址寄存器2的的配置说明。

表2-12-7

LCDBASEL[20:

0]指示在使用双扫描LCD时的低帧存储区的开始地址A[21:

1]

公式如下:

LCDBASEL=LCDBASEU+(PAGEWIDTH+OFFSIZE)x(LINEVAL+1)

注:

用户通过改变LCDBASEU和LCDBASEL的值来滚动屏幕,但在帧结束时,不能改

变LCDBASEU和LCDBASEL的值

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

当前位置:首页 > 求职职场 > 面试

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2