当前位置:文档之家› 北理工嵌入式系统实验报告

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

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

嵌入式系统实验报告

目录

实验二 (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 开发环境,从里面打开\实验程序\HARDW ARE\ADS\实验二\asm.mcp 项目文件,进行编译。

EL - ARM - 830 实验指导书40

5.编译通过后,进入ADS1.2 调试界面,加载\实验程序\HARDW ARE\ADS\实验二\asm_Data\Debug 中的映象文件程序映像asm.axf。

6.打开超级终端,配置波特率为115200,校验位无,数据位为8,停止位为1。之后,在ADS 调试环境下全速运行映象文件,应出现图2-2-1 界面:

图2-2-1

六、所用主程序:

//呼叫主应用程序

b UART

UART

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

ldr r1, =0x2afaaa

str r1, [r0]

ldr r0, =GPHUP

ldr r1, =0x7ff

str r1, [r0] ; //GPH[10:0]禁止上拉

ldr r0, =UFCON0 ;//禁用FIFO

EL - ARM - 830 实验指导书41

ldr r1, =0x0

str r1, [r0]

ldr r0, =UMCON0 ;//禁用AFC

ldr r1, =0x0

str r1, [r0]

ldr r0, =ULCON0 ;//设置线寄存器

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

str r1, [r0]

ldr r0, =UCON0 ;//设置Uart0 控制器

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

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

str r1, [r0]

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

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

str r1, [r0]

mov r1, #100

Delay

sub r1, r1, #0x1

bne Delay

;//开中断

ldr r0, =INTMSK

ldr r1, [r0]

and r1, r1, #0xefffffff

str r1, [r0]

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

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

LOOP

LDR R3 , =UTRSTA T0

LDR R2 , [R3]

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

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

LDR R0 , =UTXH0

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

ADD R1, R1, #1

EL - ARM - 830 实验指导书42

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

CMP R5 ,#0x0

BNE LOOP

LOOP2 B LOOP2

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

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

七、实验总结

经过该实验,我们了解了EL-ARM-830 型教学实验系统属于一种综合的教学实验系统,ARM 程序的结构,并学习ARM与上位机通讯的相关知识。同时学习了codewarrior和超级终端以及调试程序的使用,对三星的2410 ARM处理器基本架构和外设有了一定程度的了解。

实验三(辅助实验:基于ARM的C语言程序设计简介)

一、实验目的

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

二、实验内容

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

三、实验设备

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

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

四、ARM C语言简介与使用规则

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

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

量巨大,并且不易移植。由于ARM 的程序执行速度较高,存储器的存储速度和存

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

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

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

2. ARM C语言程序的基本规则

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

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

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

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

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

在使用C 语言时,要用到和汇编语言的混合编程。当汇编代码较为简洁,则

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

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

ATPCS,就是ARM、Thumb 的过程调用标准(ARM/Thumb Procedure Call Standard),它规定了一些子程序间调用的基本规则。如寄存器的使用规则,堆

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

EL - ARM - 830 实验指导书44

在C 程序和ARM 的汇编程序之间相互调用必须遵守A TPCS。而使用ADS 的C

语言编译器编译的C 语言子程序满足用户指定的ATPCS 的规则。但是,对于汇编

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

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

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

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

●在汇编编译器中使用-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 开发环境,从里面打开\实验程序\HARDW ARE\ADS\实验三\C.mcp 项目文件,进行编译。

EL - ARM - 830 实验指导书46

5.编译通过后,进入ADS1.2 调试界面,加载\实验程序\HARDW ARE\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" //嵌入包括硬件的头文件

unsigned char data; //定义全局变量

void Main(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 位数,重新编译,下载,看看串口工

具上输出是什么内容。

六、实验总结

由于该实验的例程存在问题,故和大家一样无法做出实验结果,尽管没有结果,但试验的时候我详细阅读了指导书相关内容,故对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 中断等等,所以,很多中断可能同

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

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

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

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

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

的FIQ 中断,同样,ARM920T CPU 的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

SRCPND 0x4a000000 R/W 中断源挂起寄存器,当中断产生后,相应位置

INTMOD 0x4a000004 R/W 中断模式寄存器,设定IRQ 或FIQ 模式

INTMSK 0x4a000008 R/W 中断屏蔽寄存器,如果相应位置位则该中断被

屏蔽

PRIORITY 0x4a00000c R/W 中断优先级控制寄存器,设置中断优先级

INTPND 0x4a000010 R/W 中断挂起寄存器,相应位对应正在执行的中断

服务

INTOFFSET 0x4a000014 R 中断源请求偏移寄存器

SUBSRCPND 0x4a000018 R/W 子中断源挂起寄存器

INTSUBMSK 0x4a00001c R/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 的开发环境下,打开HARDW ARE/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 中的void Timer1INT_Init(void)

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

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

if ((rINTPND & BIT_TIMER1)) {

rSRCPND |= BIT_TIMER1;

}

pISR_TIMER1 = (int)Timer1_ISR;

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

}

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

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

七、实验步骤

1.本实验仅使用实验教学系统的核心CPU 板。在进行本实验时,LCD 电源开关,音频的左右声道开关、AD 通道选择开关、触摸屏中断选择开关等均应处在关闭状态。

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

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

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

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

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

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

6.在ADS 调试环境下全速运行映象文件。观察LED1 和LED2 的变化!LED1 和LED2 灯

会由于定时中断的1 秒钟发生一次,而一秒钟闪烁一次!也可以改变闪烁的频率,即改变Startup2410\target.c 文件内的void Timer1_init(void)函数里的rTCNTB1 = 48828;的

赋值,数字量越小,闪烁频率越快。编译全速运行,观看结果,看闪烁频率是否发生了改变!这是对GPIO 口操作的结果。具体实现见程序。

八、实验总结

观察到实验所述现象,经过仔细阅读实验指导书,我们对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 (video data)脉冲的极性

0 = Normal

1 = VD is inverted.

INVPWREN [5] STN/TFT: 这个位设置PWREN信号的极性

0 = Normal

1 = Inverted

BSWP [1] STN/TFT: 字节交换控制位

0 = Swap Disable

1 = Swap Enable

HWSWP [0] STN/TFT: 半字交换控制位

0 = Swap Disable

1 = Swap Enable

表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 (LINEV AL +1)

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

变LCDBASEU 和LCDBASEL的值,因为预取下一帧的数据优先于改变帧,如果这时改变帧, 预取的数据将无效和将显示不正确.为了检查LINECNT,中断应当被屏蔽,否则如果在

读LINECNT 后,任意中断刚好执行,因为ISR 的执行,LINECNT 的值可能是旧的。

表2-12-8 为LCD 的帧缓冲区开始地址寄存器3 的的配置说明。它主要是进行虚

拟屏幕地址设置。

OFFSIZE:[21:11] 虚拟屏幕偏移量(半字的数量),该值定义前一显示行的最后

的半字和新的显示一行首先的半字之间的距离

PAGEWIDTH:[10:0] 虚拟屏幕宽度(半字的数量),该值定义帧的观察区域的宽度

注: PAGEWIDTH 和OFFSIZE 必须在ENVID = 0 时变

EL - ARM - 830 实验指导书67

表2-12-8

表2-12-9为LCD的RGB查找表寄存器3的的配置说明。在这三个寄存器中,我们要

设定使用的8种红色,8种绿色,4种蓝色。

表2-12-9

EL - ARM - 830 实验指导书68

其实,不同红色的差异,是通过时间抖动的算法及帧率控制的方法来实现的。对于绿、

蓝也同样。因此,还要设置一下有关抖动模式寄存器。详细请看下面关于初始化S3C2410 的LCD 控制器的程序。

#define M5D(n) ((n) & 0x1fffff)

#define MV AL (13)

#define MV AL_USED (0)

#define MODE_CSTN_8BIT (0x2001)

#define LCD_XSIZE_CSTN (320)

#define LCD_YSIZE_CSTN (240)

#define SCR_XSIZE_CSTN (LCD_XSIZE_CSTN*2) //虚拟屏幕大小

#define SCR_YSIZE_CSTN (LCD_YSIZE_CSTN*2) //

#define HOZV AL_CSTN (LCD_XSIZE_CSTN*3/8-1)// Valid VD data line number is 8.

#define LINEVAL_CSTN (LCD_YSIZE_CSTN-1)

#define WLH_CSTN (0)

#define WDL Y_CSTN (0)

#define LINEBLANK_CSTN (16 &0xff)

#define CLKVAL_CSTN (6)

// 130hz @50Mhz,WLH=16hclk,WDL Y=16hclk,LINEBLANK=16*8hclk,VD=8

#define LCDFRAMEBUFFER 0x33800000 //_NONCACHE_STARTADDRESS

void LCD_Init(int type) {

//Save the wasted power consumption on GPIO.

rIISPSR=(2<<5)|(2<<0); //IIS_LRCK=44.1Khz @384fs,PCLK=50Mhz.

rGPHCON = rGPHCON & ~(0xf<<18)|(0x5<<18);

//CLKOUT 0,1=OUTPUT to reduce the power consumption.

switch(type){

case MODE_CSTN_8BIT:

frameBuffer8Bit=(U32 (*)[SCR_XSIZE_CSTN / 4])LCDFRAMEBUFFER;

// Packed Type : The L.C.M of 12 and 32 is 96.

rLCDCON1=(CLKV AL_CSTN<<8)|(MV AL_USED<<7)|(2<<5)|(3<<1)|0;

// 8-bit single scan,8bpp CSTN,ENVID=off

rLCDCON2=(0<<24)|(LINEV AL_CSTN<<14)|(0<<6)|0;

rLCDCON3=(WDL Y_CSTN<<19)|(HOZV AL_CSTN<<8)|(LINEBLANK_CSTN<<0); rLCDCON4=(MV AL<<8)|(WLH_CSTN<<0);

rLCDCON5= 0;

//BPP24BL:x,FRM565:x,INVVCLK:x,INVVLINE:x,INVVFRAME:x,INVVD:x,

//INVVDEN:x,INVPWREN:x,INVLEND:x,PWREN:x,ENLEND:x,BSWP:x,HWSWP:x rLCDSADDR1=(((U32)frameBuffer8Bit>>22)<<21)|M5D((U32)frameBuffer8Bit>>1); rLCDSADDR2=M5D(((U32)frameBuffer8Bit+((SCR_XSIZE_CSTN)*LCD_YSIZE_CSTN))>> 1);

EL - ARM - 830 实验指导书69

rLCDSADDR3=(((SCR_XSIZE_CSTN-LCD_XSIZE_CSTN)/2)<<11)|(LCD_XSIZE_CSTN / 2); rDITHMODE=0;

rREDLUT =0xfdb96420;

rGREENLUT=0xfdb96420;

rBLUELUT =0xfb40;

break;

default:

break;

}

}

LCD 控制器对彩色256 色的初始配置完成,即可在LCD 上显示了。下面简要介绍

一下绘图的API 函数,具体的使用介绍见第4 章实验五。

U32 GUI_Init (void); //GUI 初始化

void Draw_Point (U16 x, U16 y); //绘制点API

U32 Get_Point (U16 x, U16 y); //得到点API

void Draw_HLine (U16 y0, U16 x0, U16 x1); //绘制水平线API

void Draw_VLine (U16 x0, U16 y0, U16 y1); //绘制竖直线API

void Draw_Line (I32 x1,I32 y1,I32 x2,I32 y2); //绘制线API

void Draw_Circle (U32 x0, U32 y0, U32 r); //绘制圆API

void Fill_Circle (U16 x0, U16 y0, U16 r); //填充圆API

void Fill_Rect (U16 x0, U16 y0, U16 x1, U16 y1); //填充区域API

void Set_Color (U32 color); //设定前景颜色API

void Set_BkColor (U32 color); //设定背景颜色API

void Set_Font (GUI_FONT* pFont); //设定字体类型API

void Disp_String (const I8 *s, I16 x, I16 y); //显示字体API

详细具体的应用,请参见\实验程序\HARDW ARE\ADS\实验十二目录下的LCD.mcp 项目文件。请详细阅读代码注释。

五、实验步骤

1.本实验使用实验教学系统的CPU 板,LCD 单元。

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

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

4.打开ADS1.2 开发环境,从里面打开\实验程序\HARDW ARE\ADS\实验十二\Lcd.mcp EL - ARM - 830 实验指导书70

项目文件,进行编译。

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

\Lcd_Data\Debug 中的映象文件程序映像Lcd.axf。

6.在ADS 调试环境下全速运行映象文件到主函数Main(),然后单步运行,观察液晶

屏的反应!

7.在Main()函数中改动某些GUI 的API 函数,重新装入映像文件,运行程序,观察

液晶屏的显示的效果。重复实验。

8.实验完毕,先关闭LCD 电源开关,再关闭ADS 开发环境,再关闭电源。

六、实验总结

通过该试验,我学习了如何用ARM在液晶屏上绘制图形。对于各类LCD屏上绘图的命令有了形象直观的认识。

实验六触摸屏实验

一、实验目的

1. 了解触摸屏工作的基本原理;

2. 理解LCD 如何和触摸屏相配合;

3. 通过编程实现对触摸屏的控制。

二、实验内容

1. 在320X240 的彩色LCD 上显示触摸点的坐标。

三、实验设备

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

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

仿真调试驱动程序。

四、实验原理

1.触摸屏原理

触摸屏附着在显示器的表面,与显示器相配合使用,如果能测量出触摸点在屏幕

上的坐标位置,则可根据显示屏上对应坐标点的显示内容或图符获知触摸者的意图。

触摸屏按其技术原理可分为五类:矢量压力传感式、电阻式、电容式、红外线式、

表面声波式,其中电阻式触摸屏在嵌入式系统中用的较多。电阻触摸屏是一块4 层的

透明的复合薄膜屏,最下面是玻璃或有机玻璃构成的基层,最上面是一层外表面经过

硬化处理从而光滑防刮的塑料层,中间是两层金属导电层,分别在基层之上和塑料层

内表面,在两导电层之间有许多细小的透明隔离点把它们隔开。当手指触摸屏幕时,

两导电层在触摸点处接触。如图2-13-1。

触摸屏的两个金属导电层是触摸屏的两个工作面,在每个工作面的两端各涂有一

条银胶,称为该工作面的一对电极,若给一个工作面的电极对施加电压,则在该工作

面上就会形成均匀连续的平行电压分布。当给X方向的电极对施加一确定的电压,而Y

方向电极对不加电压时,在X平行电压场中,触点处的电压值可以在Y+(或Y-)电极上

反映出来,通过测量Y+电极对地的电压大小,通过A/D转换,便可得知触点的X坐标值。同理,当给Y电极对施加电压,而X电极对不加电压时,通过测量X+电极的电压,通过A/D转换便可得知触点的Y坐标。

电阻式触摸屏有四线和五线两种。四线式触摸屏的X工作面和Y工作面分别加在两

EL - ARM - 830 实验指导书72

个导电层上,共有四根引出线:X+、X-、Y+、Y-,分别连到触摸屏的X电极对和Y

电极对上。五线式触摸屏把X工作面和Y工作面都加在玻璃基层的导电涂层上,但工作时,仍是分时加电压的,即让两个方向的电压场分时工作在同一工作面上,而外导电

层则仅仅用来充当导体和电压测量电极。因此,五线式触摸屏的引出线需为5根。

北京理工大学汇编语言实验六磁盘文件存取实验报告

第六章磁盘文件存取实验(设计性实验) 一、实验要求和目的 1.理解文件、目录的概念; 2.了解FCB(文件控制块)方式文件管理方法; 3.掌握文件代号式文件存取方式; 4.学习使用文件指针读取文件 二、软硬件环境 1.硬件环境:计算机系统windows; 2.软件环境:装有MASM、DEBUG、LINK、等应用程序。 三、实验涉及的主要知识单元 DOS功能调用中断(INT 21H)提供了两类磁盘文件管理功能,一类是FCB(文件控制块)方式,另一类是文件代号式存取方式。 对于文件的管理,实际上是对文件的读写管理,DOS 设计了四种存取文件 方式:顺序存取方式、随机存取方式、随机分块存取方式和代号法存取方式。文件的处理步骤 A)写之前必须先建立文件、读之前必须先打开文件。 B)写文件之后一定要关闭文件。通过关闭文件,使操作系统确认此 文件放在磁盘哪一部分,写后不关闭会导致写入文件不完整。 1、文件代号式存取方式: 当用户需要打开或建立一个文件时,必须提供文件标识符。文件标识符用ASCII Z 字符串表示。ASCII Z 字符串是指文件标识符的ASCII 字符串后面再加1 个“0”字符。文件标识符的字符串包括驱动器名、路径名和文件名。其格式为 [d:][path]filename[.exe] 其中d 为驱动器名,path 为路径名,.exe 为文件名后缀。 中断 21H 提供了许多有关目录和文件操作的功能,其中文件代号式存取方式常用的功能如下: 2、操作目录的常用功能 39H——创建目录 3BH——设置当前目录 3AH——删除目录 47H——读取当前目录 有关中断功能的详细描述和调用参数在此从略,需要查阅者可参阅相关资料 之目录控制功能。 3、用文件句柄操作文件的常用功能 3CH——创建文件 4EH——查找到第一个文件 3DH——打开文件 4FH——查找下一个文件 3EH——关闭文件 56H——文件换名 3FH——读文件或设备 57H——读取/设置文件的日期和时间 40H——写文件或设备 5AH——创建临时文件 41H——删除文件 5BH——创建新文件

嵌入式操作系统实验报告

中南大学信息科学与工程学院实验报告 姓名:安磊 班级:计科0901 学号: 0909090310

指导老师:宋虹

目录 课程设计内容 ----------------------------------- 3 uC/OS操作系统简介 ------------------------------------ 3 uC/OS操作系统的组成 ------------------------------ 3 uC/OS操作系统功能作用 ---------------------------- 4 uC/OS文件系统的建立 ---------------------------- 6 文件系统设计的原则 ------------------------------6 文件系统的层次结构和功能模块 ---------------------6 文件系统的详细设计 -------------------------------- 8 文件系统核心代码 --------------------------------- 9 课程设计感想 ------------------------------------- 11 附录-------------------------------------------------- 12

课程设计内容 在uC/OS操作系统中增加一个简单的文件系统。 要求如下: (1)熟悉并分析uc/os操作系统 (2)设计并实现一个简单的文件系统 (3)可以是存放在内存的虚拟文件系统,也可以是存放在磁盘的实际文件系统 (4)编写测试代码,测试对文件的相关操作:建立,读写等 课程设计目的 操作系统课程主要讲述的内容是多道操作系统的原理与技术,与其它计算机原理、编译原理、汇编语言、计算机网络、程序设计等专业课程关系十分密切。 本课程设计的目的综合应用学生所学知识,建立系统和完整的计算机系统概念,理解和巩固操作系统基本理论、原理和方法,掌握操作系统开发的基本技能。 I.uC/OS操作系统简介 μC/OS-II是一种可移植的,可植入ROM的,可裁剪的,抢占式的,实时多任务操作系统内核。它被广泛应用于微处理器、微控制器和数字信号处理器。 μC/OS 和μC/OS-II 是专门为计算机的嵌入式应用设计的,绝大部分代码是用C语言编写的。CPU 硬件相关部分是用汇编语言编写的、总量约200行的汇编语言部分被压缩到最低限度,为的是便于移植到任何一种其它的CPU 上。用户只要有标准的ANSI 的C交叉编译器,有汇编器、连接器等软件工具,就可以将μC/OS-II嵌入到开发的产品中。μC/OS-II 具有执行效率高、占用空间小、实时性能优良和可扩展性强等特点,最小内核可编译至2KB 。μC/OS-II 已经移植到了几乎所有知名的CPU 上。 严格地说uC/OS-II只是一个实时操作系统内核,它仅仅包含了任务调度,任务管理,时间管理,内存管理和任务间的通信和同步等基本功能。没有提供输入输出管理,文件系统,网络等额外的服务。但由于uC/OS-II良好的可扩展性和源码开放,这些非必须的功能完全 可以由用户自己根据需要分别实现。 uC/OS-II目标是实现一个基于优先级调度的抢占式的实时内核,并在这个内核之上提供最基本的系统服务,如信号量,邮箱,消息队列,内存管理,中断管理等。 uC/OS操作系统的组成 μC/OS-II可以大致分成核心、任务处理、时间处理、任务同步与通信,CPU的移植等5个部分。如下图:

嵌入式实验报告二

实习二建立交叉编译环境 实习内容: 本次实验主要包括二部分内容:开发环境配置,主要有配置NFS,Samba和超级终端;编写编译程序。 1、配置NFS(实现宿主机和目标机的信息共享) 打开Linux虚拟机,点击主菜单运行系统设置->服务器设置->NFS 服务器,点击增加,在出现的界面中的目录中填入需要共享的路径,在主机中填入允许进行连接的主机的IP地址(注意:这里主机IP指的是开发板的IP)。并选择允许客户对共享目录的操作为只读或读写(注意:实验中选的是读写,一定不能忽略),如下图: 对客户端存取服务器的一些其他设置,一般不需要设置,取默认值。然后退出,完成了NFS配置。 2、配置Samba(实现Windows和Linux系统的文件共享) ①关闭防火墙,这个地方和上面的NFS的配置是一样的。 ②配置Samba服务器 选择“系统设置”—>“服务器配置”—>“Samba服务”,进行Samba 服务器配置。首先创建Samba共享,选择“基本”选项卡,在“目录”

的文本框中输入要共享的文件,基本权限设为读/写。在“访问”选项卡中选择“允许所有用户访问”选项,通过“首选项”进行服务器配置。在“基本”选项卡中设置工作组和描述,在“安全性”选项卡中设置“验证模式”为共享,“加密口令”为否,“来宾账号”为无来宾账号。 ③设置Samba服务器IP地址(与前面的NFS的设置相同) ④启动Samba服务器 在命令行中输入service smb start,即可启动Samba服务器。 ⑤配置Windows下的IP地址 将Windows下的IP地址和Samba服务器IP地址设置在同一网段中即可(注意:这里设置IP时一定要注意在同一网段) ⑥在Windows下访问共享 在Windows中的“运行”窗口中输入Samba服务器的IP地址,就可以看见在虚拟机中共享的文件。 3、配置超级终端 ①在linux操作系统Xwindow界面下建立终端,在终端的命令行提示符后输入minicom,回车,然后就会看见minicom的启动画面,若没有启动Xwindow则在命令行提示符后直接输入minicom即可。 ② minicom启动后,先按Ctrl+A键,然后按Z键进入主配置界面,按“O”进入配置界面,按上下键选择Serial port setup,进入端口设置界面,然后按照指导书中的指示修改几个重要选项。 ③选好后按ESC键退出端口设计界面,选择Save setup as df1保存

北京理工大学汇编实验五

一、实验目的 1、掌握子程序有关基本知识,学会子程序设计方法; 2、掌握主程序与子程序之间的调用关系及调用方法; 3、掌握汇编语言字符串处理方法; 4、掌握字符串的输入输出程序设计方法; 5、掌握数制转换程序实现方法。 二、实验软硬件环境 1、硬件环境:惠普64 位一体化计算机及局域网; 2、软件环境:windows 8,红蜘蛛管理系统,MASM for Windows。 三、实验相关知识 把功能相对独立的程序段单独编写和调试,作为一个相对独立的模块供程序使用,就性成子程序。子程序可以实现源程序的模块化,可简化源程序结构,可以提高编程效率。 1) 子程序的定义语句格式 汇编语言子程序以proc 语句行开始,以endp 语句行结束。如: 过程名PROC near[或far] 过程体 .......................... 过程名ENDP 在主程序中用CALL 过程名调用。主程序和子程序之间传递参数通常通过栈来进行,当然也可以用某些缺省的寄存器或内存来传递。但以通过栈来传递参数程序的通用性最强。 2) 子程序调用说明 子程序从PROC 语句开始,以ENDP 语句结束,程序中至少应当包含一条RET 语句用以返回主程序。在定义子程序时,应当注意其距离属性:当子程序和调用程序在同一代码段中时,用NEAR 属性;当子程序及其调用程序不在同一个代码段中时,应当定义为FAR 属性。当由DOS 系统进入子程序时,子程序应当定义为FAR 属性。为执行子程序后返回操作系统,在子程序的前几条指令中设置返回信息。 3) 子程序使用中的问题 A、主程序调用子程序是通过CALL 指令来实现的。子程序执行后,通过RET 指令, 返回主程序调用指令CALL 的下一条指令,继续执行主程序。一个子程序可以由 主程序在不同时刻多次调用。如果在子程序中又调用了其他的子程序,则称为子程 序的嵌套。特别是当子程序又能调用子程序本身时,这种调用称为递归。 B、调用子程序时寄存器及所用存储单元内容的保护。如果子程序中要用到某些寄存器 或存储单元时,为了不破坏原有的信息,要将寄存器或存储单元的原有内容压栈保 护,或存入子程序不用的寄存器或存储单元中。 C、用于中断服务的子程序则一定要把保护指令安排在子程序中,这是因为中断是随机 出现的,因此无法在主程序中安排保护指令。 D、调用程序在调用子程序时需要传送一些参数给子程序,这些参数是子程序运算中所 需要的原始数据。子程序运行后要将处理结果返回调用程序。原始数据和处理结果 的传递可以是数据,也可以是地址,统称为参数传递。 E、参数传递必须事先约定,子程序根据约定从寄存器或存储单元取原始数据(称入口 参数);进行处理后将处理结果(称出口参数)送到约定的寄存器或存储单元,返回到调用程序。参数传递一般有下面三种方法:用寄存器传递:适用于参数传递较少、

嵌入式操作系统实验报告

中南大学信息科学与工程学院实验报告 :安磊 班级:计科0901 学号: 0909090310 指导老师:宋虹

目录 课程设计容 ----------------------------------- 3 uC/OS操作系统简介 ------------------------------------ 3 uC/OS操作系统的组成 ------------------------------ 3 uC/OS操作系统功能作用 ---------------------------- 4 uC/OS文件系统的建立 ---------------------------- 6 文件系统设计的原则 ------------------------------ 6 文件系统的层次结构和功能模块 --------------------- 6 文件系统的详细设计 -------------------------------- 8 文件系统核心代码 --------------------------------- 9 课程设计感想 ------------------------------------- 11 附录 -------------------------------------------------- 12

课程设计容 在uC/OS操作系统中增加一个简单的文件系统。 要求如下: (1)熟悉并分析uc/os操作系统 (2)设计并实现一个简单的文件系统 (3)可以是存放在存的虚拟文件系统,也可以是存放在磁盘的实际文件系统 (4)编写测试代码,测试对文件的相关操作:建立,读写等 课程设计目的 操作系统课程主要讲述的容是多道操作系统的原理与技术,与其它计算机原理、编译原理、汇编语言、计算机网络、程序设计等专业课程关系十分密切。 本课程设计的目的综合应用学生所学知识,建立系统和完整的计算机系统概念,理解和巩固操作系统基本理论、原理和方法,掌握操作系统开发的基本技能。 I.uC/OS操作系统简介 μC/OS-II是一种可移植的,可植入ROM的,可裁剪的,抢占式的,实时多任务操作系统核。它被广泛应用于微处理器、微控制器和数字信号处理器。 μC/OS 和μC/OS-II 是专门为计算机的嵌入式应用设计的,绝大部分代码是用C语言编写的。CPU 硬件相关部分是用汇编语言编写的、总量约200行的汇编语言部分被压缩到最低限度,为的是便于移植到任何一种其它的CPU 上。用户只要有标准的ANSI 的C交叉编译器,有汇编器、连接器等软件工具,就可以将μC/OS-II嵌入到开发的产品中。μC/OS-II 具有执行效率高、占用空间小、实时性能优良和可扩展性强等特点,最小核可编译至 2KB 。μC/OS-II 已经移植到了几乎所有知名的CPU 上。 严格地说uC/OS-II只是一个实时操作系统核,它仅仅包含了任务调度,任务管理,时间管理,存管理和任务间的通信和同步等基本功能。没有提供输入输出管理,文件系统,网络等额外的服务。但由于uC/OS-II良好的可扩展性和源码开放,这些非必须的功能完全可以由用户自己根据需要分别实现。 uC/OS-II目标是实现一个基于优先级调度的抢占式的实时核,并在这个核之上提供最基本的系统服务,如信号量,,消息队列,存管理,中断管理等。 uC/OS操作系统的组成 μC/OS-II可以大致分成核心、任务处理、时间处理、任务同步与通信,CPU的移植等5个部分。如下图:

嵌入式实验报告

嵌入式实验报告 学院:信息工程学院 专业:计算机科学与技术班级:计算机班 姓名: 学号: 指导老师:

实验目录 实验一嵌入式系统开发环境实验 (2) 实验二系统节拍定时器实验 (12) 实验三 GPIO控制实验 (16) 实验四外部中断实验 (19) 实验五串口通讯实验 (23)

实验一嵌入式系统开发环境实验 【实验目的】 1.熟悉RealView MDK集成开发环境以及使用方法。 2.熟悉嵌入式系统软件设计方法和流程。 【实验内容】 1. 通过例程熟悉、掌握嵌入式系统的编辑、编译、调试、下载及运行过程。 2. 建立自己的工程文件,在开发板板上调试程序。 【实验步骤】 (一)程序安装 1. 建议在安装之前关闭所有的应用程序,双击安装文件,弹出如图对话框,Next 2.默认选择C盘文件下安装。

3.这样就在c盘底下出现keil文件夹。 4.单击选择菜单“File”-->"License Management" 将弹出下面一张图的界面:复制其中CID号,以便在粘贴到下一步中的破解软件。 5.复制CID

6.运行破解软件,将出现下面一张图的界面,把上步复制的CID号粘贴到相应位置,其他选项如图,然后点击“Generate”按钮,然后复制产生的序列号,粘贴到上一步的下面一张图的LIC输入框中,然后点击右侧的Add LIC,即可完成破解。 7.安装文件夹中的jlink驱动。 (二)工程创建、编译 使用Realview MDK创建、完成一个新的工程只需要以下几个环节: →创建工程并选择处理器→选择工具集→创建源文件→配置硬件选项→配置对应启动代码→编译链接→下载→调试。 1.创建工程并选择处理器 选择Project→New Project…,输入创建的新工程的文件名,即可创建一个新的工程。 2.创建一个新工程时,需要为工程选择一款对应处理器,在NXP 列表下选择LPC1768 芯片。然后点击OK。接下来出现的对话框选择“是或者也可以通过单击Project→Select Device for Target…在本次课程中,我们选择

北京理工大学开题报告模板

附录一:计算机类开题报告模板 开题报告参考模板 一. 课题的背景及意义 二. 课题的基本内容与构想 2.1 课题的基本内容 2.2 课题的构想 三. 系统相关技术与开发环境概述 3.1 系统的相关技术 3.2 系统的开发环境 四. 系统需求分析与概要设计 4.1 系统业务流程图分析与设计 4.2 系统数据流程图分析与设计 4.3 系统功能结构分析与设计 4.4 数据库概念模型设计(图中要标出主、外键;E-R 总图中要标出联系的类型,对于联系转化为表的方法与表示法参考附录三) 4.5 数据字典 4.5.1 定义数据库表(表中要标出主、外键) 4.5.2 定义数据流 4.5.3 定义数据处理 五.总结 5.1 已完成部分 5.2 未完成部分 5.3 遇到的问题及解决方法 六.参考文献(请按照论文写作标准中的参考文献格式进行写作) 要根据软件的功能、性能需求和主、客观方面的基础、条件选择恰当的相关技术、环境和开发工具。

附录二:管理类开题报告模板 北京理工大学远程教育学院 毕业设计(论文)开题报告 论文题目: 教学站: 专业: 学生姓名: 指导教师:

附录三:机械类开题报告样例 北京理工大学现代远程教育学院 毕业设计开题报告 题目:六自由度平台的运动学及动力学分析 专业:____________________________ 班级(教学站) :____________________________ 学生姓名:____________________________ 指导教师:____________________________ 日期:____________________________

北京理工大学汇编语言实验报告实验五 子程序设计实验

实验五子程序设计实验(设计性实验) 一、实验要求和目的 1.熟悉汇编语言程序设计结构; 2.熟悉汇编语言子程序设计方法; 3.熟悉利用汇编语言子程序参数传递方法; 4.熟悉汇编语言字符串处理基本指令的使用方法; 5.掌握利用汇编语言实现字符串的输入输出程序设计方法; 6.掌握数制转换程序实现方法。 二、软硬件环境 1、硬件环境:计算机系统windows; 2、软件环境:装有MASM、DEBUG、LINK、等应用程序。 三、实验涉及的主要知识 A)子程序知识要点: 1、掌握子程序的定义语句; 过程名 PROC [near/far] 过程体 RET 过程名 ENDP 2.子程序结构形式 一个完整的子程序一般应包含下列内容: 1. )子程序的说明部分 在设计了程序时,要建立子程序的文档说明,使用户能清楚此子程序的功能和调用方法. 说明时,应含如下内容: .子程序名:命名时要名中见意. .子程序的功能:说明子程序完成的任务; .子程序入口参数:说明子程序运行所需参数及存放位置; .子程序出口参数:说明子程序运行结果的参数及存放位置; .子程序所占用的寄存器和工作单元; .子程序调用示例; 2、)掌握子程序的调用与返回 在汇编语言中,子程序的调用用CALL,返回用RET 指令来完成。 .段内调用与返回:调用子程序指令与子程序同在一个段内。因此只修改IP; .段间调用与返回:调用子程序与子程序分别在不同的段,因此在返回时,需同时修改CS:IP。 3.)子程序的现场保护与恢复 保护现场:在子程序设计时,CPU 内部寄存器内容的保护和恢复。 一般利用堆栈实现现场保护和恢复的格式: 过程名PROC [NEAR/FAR]

嵌入式系统实验报告

实验报告 课程名称:嵌入式系统 学院:信息工程 专业:电子信息工程 班级: 学生姓名: 学号: 指导教师: 开课时间:学年第一学期

实验名称:IO接口(跑马灯) 实验时间:11.16 实验成绩: 一、实验目的 1.掌握 STM32F4 基本IO口的使用。 2.使用STM32F4 IO口的推挽输出功能,利用GPIO_Set函数来设置完成对 IO 口的配置。 3.控制STM32F4的IO口输出,实现控制ALIENTEK 探索者STM32F4开发板上的两个LED实现一个类似跑马灯的效果。 二、实验原理 本次实验的关键在于如何控制STM32F4的IO口输出。IO主要由:MODER、OTYPER、OSPEEDR、PUPDR、ODR、IDR、AFRH和AFRL等8个寄存器的控制,并且本次实验主要用到IO口的推挽输出功能,利用GPIO_Set函数来设置,即可完成对IO口的配置。所以可以通过了开发板上的两个LED灯来实现一个类似跑马灯的效果。 三、实验资源 实验器材: 探索者STM32F4开发板 硬件资源: 1.DS0(连接在PF9) 2.DS1(连接在PF10) 四、实验内容及步骤 1.硬件设计 2.软件设计 (1)新建TEST工程,在该工程文件夹下面新建一个 HARDWARE文件夹,用来存储以后与硬件相关的代码。然后在 HARDWARE 文件夹下新建一个LED文件夹,用来存放与LED相关的代码。 (2)打开USER文件夹下的test.uvproj工程,新建一个文件,然后保存在 LED 文件夹下面,保存为 led.c,在led.c中输入相应的代码。

(3)采用 GPIO_Set 函数实现IO配置。LED_Init 调用 GPIO_Set 函数完成对 PF9 和 PF10 ALIENTEK 探索者 STM32F407 开发板教程 119 STM32F4 开发指南(寄存器版) 的模式配置,控制 LED0 和 LED1 输出 1(LED 灭),使两个 LED 的初始化。 (4)新建一个led.h文件,保存在 LED 文件夹下,在led.h中输入相应的代码。 3.下载验证 使用 flymcu 下载(也可以通过JLINK等仿真器下载),如图 1.2所示: 图1.2 运行结果如图1.3所示:

嵌入式实验报告

嵌入式技术 实验报告 系别:计算机与科学技术系 班级:计12-1班 姓名:刘杰 学号:12101020128 总成绩: 评语: 日期:

2.在弹出的对话框中依次选择“cedevice emulator emulator kdstub”。 3.选择“Build OS”菜单的“sysgen”开始构建平台。 1.1.4连接,下载和运行平台 1.选择“Target”菜单下的“Connection option”菜单项。 2.在新的对话框中,配置连接关系 3.选择“Target”菜单下的“attach”菜单项,开始下载。 ?实验结果 操作系统定制成功,能正常运行。 ?结果截图 ?问题总结 由于对实验平台了解不够,致使操作过程中添加和删除组件时不知道该如何下手,影响整个实验进度。 实验1.2: 1.打开Platform Builder,并且打开实验1的工程,在实验1的工程基础上做本实验。

进程显示 IE信息查看

报文监测 实验1.3使用Platform Builder开发应用程序 简单实验步骤 1.打开Platform Builder。 2.选择“File”菜单下的“Open Workspace…”,然后打开实验1中创建的平台,本实验要基于 上面的实验的基础上做。 3.选择“File”菜单下的“New Project or File…”,打开“New Project or File”对话框。 4.在“Projects”选项页中选择“WCE Application”;在“Project Name”中输入项目的名字,例 如“MyApp”。 5.在“New Project Wizard – step 1 of 1”中选择“A typical Hello World Application”,点击“Finish” 按钮。 6.选择“Build”菜单中的“Build MyApp.exe”来编译应用程序。

北京理工大学汇编试题

一、数制转换,以下数为带符号数,表达成字节或字的形式:(10分) (-327)10 = ()2 (70b6)16=()10 (11010001)2 =()10 (0101010101011001)2=()10 ( 2572)10 =()16 二、指出划线部分的寻址方式,并计算其物理地址:(10分) 已知: (CS)=2100H, (DS)=2400H, (ES)=2800H, (SS)=2600H, (BX)=0600H, (DI)=0200H, (SI)= 0300H, (BP)=0400H, BUF=1000H 1、MOV CL ES:[1500H] ;寻址方式:物理地址: 2、CMP SI, [DI] ;寻址方式:物理地址: 3、ADD AX, BUF [BP] [SI] ;寻址方式:物理地址: 4、CALL WORD PTR CS:[SI] ;寻址方式:物理地址: 5、LEA DX, [BX+SI] ;寻址方式:物理地址: 三、已知一程序数据段如下,请在右边表格中填写该数据段数据存储的形式。(12 分,未初始化的单元填写“xx”) DATA SEGMENT Array C=50H BUFFER DB 'B',0BH, B_BYTE LABEL BYTE DATA1 DW 0FFAAH ORG $+1 DATA2 DW B_BYTE DATA3 DW C DATA4 DB 3 DUP(20H),0FFH DATA ENDS 四、写出下列程序段的运行结果,并逐条注释每条指令。

1. 该程序段执行后,BX= .,为什么?(用图表示)(9分)ADDR DW PROC0,PROC1,PROC2,PROC3,PROC4,PROC5,PROC6 DW PROC7,PROC8,PROC9 LEA SI,ADDR ADD SI,2 MOV BX,[SI] INC SI INC SI PUSH BX MOV AX,[SI] INC SI INC SI PUSH AX PUSH BP MOV BP,SP MOV DX,[BP+2] CALL [SI] … PROC1 PROC MOV BX,1 RET PROC1 ENDP PROC2 PROC MOV BX,2 RET PROC2 ENDP PROC3 PROC MOV BX,3 RET PROC3 ENDP 余此类推… (9分)2. 下面这段程序的功能是。

南邮嵌入式系统B实验报告2016年度-2017年度-2

_* 南京邮电大学通信学院 实验报告 实验名称:基于ADS开发环境的程序设计 嵌入式Linux交叉开发环境的建立 嵌入式Linux环境下的程序设计 多线程程序设计 课程名称嵌入式系统B 班级学号 姓名 开课学期2016/2017学年第2学期

实验一基于ADS开发环境的程序设计 一、实验目的 1、学习ADS开发环境的使用; 2、学习和掌握ADS环境下的汇编语言及C语言程序设计; 3、学习和掌握汇编语言及C语言的混合编程方法。 二、实验内容 1、编写和调试汇编语言程序; 2、编写和调试C语言程序; 3、编写和调试汇编语言及C语言的混合程序; 三、实验过程与结果 1、寄存器R0和R1中有两个正整数,求这两个数的最大公约数,结果保存在R3中。 代码1:使用C内嵌汇编 #include int find_gcd(int x,int y) { int gcdnum; __asm { MOV r0, x MOV r1, y LOOP: CMP r0, r1 SUBLT r1, r1, r0 SUBGT r0, r0, r1 BNE LOOP MOV r3, r0 MOV gcdnum,r3 //stop // B stop // END } return gcdnum; } int main() { int a; a = find_gcd(18,9);

printf("gcdnum:%d\n",a); return 0; } 代码2:使用纯汇编语言 AREA example1,CODE,readonly ENTRY MOV r0, #4 MOV r1, #9 start CMP r0, r1 SUBLT r1, r1, r0 SUBGT r0, r0, r1 BNE start MOV r3, r0 stop B stop END 2、寄存器R0 、R1和R2中有三个正整数,求出其中最大的数,并将其保存在R3中。 代码1:使用纯汇编语言 AREA examp,CODE,READONL Y ENTRY MOV R0,#10 MOV R1,#30 MOV R2,#20 Start CMP R0,R1 BLE lbl_a CMP R0,R2 MOVGT R3,R0 MOVLE R3,R2 B lbl_b lbl_a CMP R1,R2 MOVGT R3,R1 MOVLE R3,R2 lbl_b B . END 代码2:使用C内嵌汇编语言 #include int find_maxnum(int a,int b,int c)

嵌入式实验报告二work2.

实验报告 课程名称嵌入式系统编程实践 实验仪器清华同方辰源嵌入式系统实验箱 实验名称实验二:利用中断实现OLED动态显示实验 系别__计算机学院_ 专业___ __ 班级/学号_ 学生姓名___ __ ___ _ _ 实验日期_ 2013年9月22日 成绩___________________ 指导教师_ _ 朱敏玲 ___

实验二:利用中断实现OLED动态显示实验 一、实验问题回答 (1)ISR是什么?简述一下中断的作用和使用方法 答:ISR是中断服务程序。作用是通过处理器执行事先编好的某个特定的程序。使用方法就是在main中写一个中断程序,然后在startup.s中进行注册。 (2)嵌入式系统中有哪些应用有定时性循环处理的要求?举几个例子答:在各种网络的应用中,设计的一些部件,如计数器,时钟等。 (3)定时时间间隔如何修改? 答:通过改变SysTickPeriodSet(SysCtlClockGet()/100)后面的100这个参数。(4)选作内容5-8的编程思路是什么?若做的话应该怎样实现? 答:编程思路:先画直线和竖线,组成一个正方形,将各个参数填写到函数RIT128x96x4ImageDraw(buf,,,,);第6个选作:判断画的原点x,原点y,和画原点x+的长,画原点y+画宽的值要在0-128和0-96。第7个选作:把RIT128x96x4StringDraw("hello",,,);就是把画的灰度定义为一个变量x。最后就会出现由不同的亮度而形成的波浪。第8个就是利用随机函数产生画的原点,随机的在屏幕上进行显示。 (5)拖影现象如何解决?计数值显示为什么没有拖影? 答:在程序结束后执行清屏语句:计数显示是每次重新赋值,所以不会出现拖影。 二、实验目的和效果(效果即是否达到实验目的,达到的程度如何) (1)深入学习、理解、掌握OLED字符显示方法 (2)深入学习、理解、掌握OLED图形显示方法 (3)学习、理解、掌握中断使用方法 实验效果图: 三、实验内容和步骤(重点阐述自己的思路及遇到的问题)

北京理工大学汇编实验二报告

北京理工大学汇编实验二报告

本科实验报告实验名称:算术运算类操作实验

一、实验要求和目的 1、了解汇编语言中的二进制、十六进制、十进制、BCD 码的表示形式; 2、掌握各类运算类指令对各状态标志位的影响及测试方法; 3、熟悉汇编语言二进制多字节加减法基本指令的使用方法; 4、熟悉无符号数和有符号数乘法和除法指令的使用; 5、掌握符号位扩展指令的使用。 6、掌握 BCD 码调整指令的使用方法 二、软硬件环境 1、硬件环境:计算机系统 windows; 2、软件环境:装有 MASM、DEBUG、LINK、等应用程序。 三、实验涉及的主要知识 1、加减法处理指令 主要有加法指令 ADD,带进位加法 ADC,减法指令 SUB,带进位减法指令 SBB。 2.乘除法指令和符号位扩展指令 主要有无符号数乘法指令MUL,带符号数乘

法指令IMUL,无符号数除法指令DIV,带符号数除法指令 IDIV,以及符号位从字节扩展到字的指令 CBW 和从字扩展到双字的指令 CWD。 3.BCD 码的调整指令 主要有非压缩的BCD 码加法调整指令DAA,压缩的 BCD 码减法调整指令 DAS,非压缩的 BCD 码加法调整指令 AAA,非压缩的 BCD 码减法调整指令 AAS,乘法的非压缩 BCD码调整指令 AAM,除法的非压缩 BCD 码调整指令 AAD。 8088/8086 指令系统提供了实现加、减、乘、除运算的上述基本指令,可对表 1 所示的数据类型进行数据运算。 表 1-2-1 数据类型数据运算表

四、实验内容与步骤 1、对于两组无符号数,087H 和 034H,0C2H 和5FH,试编程求这两组数的和差积商,并考虑计算结果对标志寄存器中状态标志位的影响:(1)实验流程 将一组 操作数 分别用 ADD,SUB,MUL,DIV 运算 (2)实验代码: DATAS SEGMENT BUF1 DB 087H BUF2 DB 034H BUF3 DB 4 DUP(?);此处输入数据段代码 DATAS ENDS

嵌入式系统实验实验报告

嵌入式系统实验实验报告 一、实验目的 1.基本实验

. Word 资料搭建PXA270嵌入式LINUX开发软硬件环境;安装LINUX操 作系统;安装与配置建立宿主机端交叉编译调试开发环境;配置宿主机 PC 机端的minicom(或超级终端)、TFTP服务、NFS服务,使宿主PC机与PXA270开发板可以通过串口通讯,并开通TFTP 和NFS服务。 2.人机接口 键盘驱动;LCD控制;触摸屏数据采集与控制实验; 3.应用实验 完成VGA显示;Web服务器实验;网络文件传输实验;多线程应用实验。 4.扩展应用实验 完成USB摄像头驱动与视频采集;GPS实验;GSM/GPRS通讯;视频播放移植;USB蓝牙设备无线通讯;NFS文件服务器;蓝牙视频文件服务器。 5.QT实验 完成基本嵌入式图形开发环境搭建;“Hello world!”QT初探;创建一个窗口并添加按钮;对象通信:Signal和Slot;菜单和快捷键;工具条和状态栏;鼠标和键盘事件;对话框;QT的绘图;俄罗斯方块;基于QT的GSM手机在嵌入式LINUX下的设计与实现。 二、实验内容 1.人机接口实验 实验十九键盘驱动实验 ?实验目的:矩阵键盘驱动的编写

?实验内容:矩阵键盘驱动的编写 ?作业要求:完成键盘加减乘除运算 ?实验作业源码及注释: #INCLUDE #INCLUDE #INCLUDE #INCLUDE #INCLUDE #INCLUDE #DEFINE DEVICE_NAME “/DEV/KEYBOARD” INT MAIN(VOID){ INT FD; INT RET; UNSIGNED CHAR BUF[1]; INT I,F,J; DOUBLE X; INT A[2]={0}; CHAR PRE_SCANCODE=0XFF; FD=OPEN(DEVICE_NAME,O_RDWR); IF(FD==-1)PRINTF(“OPEN DEVICE %S ERROR\N”,DEVICE_NAME); ELSE{ BUF[0]=0XFF; I=0;F=0; WHILE(1){ READ(FD,BUF,1);

嵌入式实验报告

目录 实验一跑马灯实验 (1) 实验二按键输入实验 (3) 实验三串口实验 (5) 实验四外部中断实验 (8) 实验五独立看门狗实验 (11) 实验七定时器中断实验 (13) 实验十三ADC实验 (15) 实验十五DMA实验 (17) 实验十六I2C实验 (21) 实验十七SPI实验 (24) 实验二十一红外遥控实验 (27) 实验二十二DS18B20实验 (30)

实验一跑马灯实验 一.实验简介 我的第一个实验,跑马灯实验。 二.实验目的 掌握STM32开发环境,掌握从无到有的构建工程。 三.实验内容 熟悉MDK KEIL开发环境,构建基于固件库的工程,编写代码实现跑马灯工程。通过ISP 下载代码到实验板,查看运行结果。使用JLINK下载代码到目标板,查看运行结果,使用JLINK在线调试。 四.实验设备 硬件部分:PC计算机(宿主机)、亮点STM32实验板、JLINK。 软件部分:PC机WINDOWS系统、MDK KEIL软件、ISP软件。 五.实验步骤 1.熟悉MDK KEIL开发环境 2.熟悉串口编程软件ISP 3.查看固件库结构和文件 4.建立工程目录,复制库文件 5.建立和配置工程

6.编写代码 7.编译代码 8.使用ISP下载到实验板 9.测试运行结果 10.使用JLINK下载到实验板 11.单步调试 12.记录实验过程,撰写实验报告 六.实验结果及测试 源代码: 两个灯LED0与LED1实现交替闪烁的类跑马灯效果,每300ms闪烁一次。七.实验总结 通过本次次实验我了解了STM32开发板的基本使用,初次接触这个开发板和MDK KEILC 软件,对软件操作不太了解,通过这次实验了解并熟练地使用MDK KEIL软件,用这个软件来编程和完成一些功能的实现。作为STM32 的入门第一个例子,详细介绍了STM32 的IO口操作,同时巩固了前面的学习,并进一步介绍了MDK的软件仿真功能。

德育开题报告(北京理工大学)

无悔的象牙塔 05011406 冯钰坤1120141263 踏入校门之前,曾以为大学生活会很长很长,但是转眼之间,却又大半年已过去。过去还带着一分稚嫩,一分天真,一分无知的我,经过这半年的锻炼和学习,已经多了一分成熟,一分稳重,一分缜密。所以我希望记录下这大半年来的学习、生活的感触,以及对未来的期望和规划。 有多少个今天 今天我在北京理工大学学习,今天我在徐特立图书馆自习,今天我在理科教学楼上课,今天我在球场打球。 这是我大半年来每天的生活。看似寻常,实则丰富多彩。 从上课来说,除了正常上课,我还会去蹭听其他老师的课程,或者上慕课网听网络课程,来帮助我理解老师讲的知识。大学老师讲课的速度总是很快,一个知识点过去就是下一个,很少有缓冲、理解的时间。自从这个学期每节课的时间从50分钟改到45分钟,老师也无奈地表示讲课快并非他们本意,而是课时所迫。像工科数学分析,大学物理这些比较难的课程,我只好课下再多下功夫自习。所以大学课程安排看似没有高中那么满,但是每天的学习却感觉更加辛苦。 我的爱好很多,在大学期间我准备继续将它们发扬光大,所以一开学,我就报名了一个钢琴班,每周去学两次钢琴。别的同学在休息,在娱乐,我的休息和娱乐方式就是去练习弹钢琴。音乐能带给我平静的心情,所以每次面对钢琴的时候,我总是能表现出不寻常的耐心。 我没有参加学生组织,参加的唯一一个社团就是排球社从小学起,个子高的我就参加过很多体育活动,那时候,我接触了排球。在中学沉寂了6年,我的排球细胞终于找到了组织。我早早地加入了排球社,并进入校队。其实我没有接触过系统训练,基础并不是很好,但是经过半年的练习,我的水平终于得到了肯定,能代表学校去参加北京市的排球赛,帮助女排队获得了好成绩。运动带给我的,是我在心情低落、烦闷的时候,无尽的激情与动力。 大学的生活虽然充满了竞争,但是在竞争的路上,也有美丽的风景。沉迷于路边风景,可能会失去目标;但是一味地追求成绩,追逐目标,生活又失去了很多滋味。 做什么也好,别为着得到赞赏 我着实是一个心脏很大,适应力很强的人。尽管18年来从未独自在外生活过,但是我竟然几乎没有任何不适,就习惯了宿舍生活。进入大学,我更多地看到了它的好:校园空旷,广大,抬头能看到无穷无尽的天空;校内设施几乎应有尽有,食堂更是超过其他学校良多,价钱还便宜;老师讲课也不是传说中的照本宣科,反而声情并茂,知识点都讲得透彻清晰;甚至不用走出学校门,我就可以上钢琴课,上托福课……这是我的大学,一个五脏俱全的小城市。 可是仍然会有些迷惘。 在三更半夜仍然奋笔疾书的时候,皱着眉头翻来覆去看高数书的时候,敲打键盘对付C 语言的时候,偶尔我也会停下来问自己:怎么会比高三还忙碌?忙碌,又在忙碌些什么? 有一句话理很歪,但又真实到让人无奈:学了不一定会,会了不一定考,考了不一定过,过了不一定毕业,毕业不一定有工作,有工作不一定挣钱……未来没有一定的量度,社会没有统一的标准,都靠人与人竞争,一切都那么模糊,飘忽不定。甚至一种感觉,越到人数众多,越到精英云集的时候就越清晰:感觉付出了同等的努力,但是就是没有别人成绩出色;甚至觉得别人并没有学的如自己痛苦,但是却轻轻松松拿了高分,附带各种竞赛奖项。你也

北京理工大学汇编实验五实验报告概要

本科实验报告实验名称:子程序设计实验

实验五子程序设计实验(设计性实验) 一、实验要求和目的 1.熟悉汇编语言程序设计结构; 2.熟悉汇编语言子程序设计方法; 3.熟悉利用汇编语言子程序参数传递方法; 4.熟悉汇编语言字符串处理基本指令的使用方法; 5.掌握利用汇编语言实现字符串的输入输出程序设计方法; 6.掌握数制转换程序实现方法。 二、软硬件环境 1、硬件环境:计算机系统windows; 2、软件环境:装有MASM、DEBUG、LINK、等应用程序。 三、实验涉及的主要知识 A)子程序知识要点: 1、掌握子程序的定义语句;过 程名PROC [near/far] 过程 体 RET 过程名ENDP 2.子程序结构形式一个完整的子程序一般应包含下列内容: 1. )子程序的说明部分 在设计了程序时,要建立子程序的文档说明,使用户能清楚此子程序的功能和调用方法. 说明时,应含如下内容: .子程序名:命名时要名中见意. .子程序的功能:说明子程序完成的任务; .子程序入口参数:说明子程序运行所需参数及存放位置; .子程序出口参数:说明子程序运行结果的参数及存放位置; .子程序所占用的寄存器和工作单元; .子程序调用示例; 2、)掌握子程序的调用与返回在汇编语言中,子程序的调用用CALL,返回用RET指令 来完成。 .段内调用与返回:调用子程序指令与子程序同在一个段内。因此只修改IP; .段间调用与返回:调用子程序与子程序分别在不同的段,因此在返回时,需同时修改CS:IP。 3.)子程序的现场保护与恢复保护现场:在子程序设计时,CPU内部寄存器内容的

保护和恢复。 一般利用堆栈实现现场保护和恢复的格式:过程名PROC [NEAR/FAR] PUSH AX PUSH BX . . PUSH DX . . . POP DX . . . POP AX RET 过程名ENDP 4.子程序的参数传递方法 1.寄存器传递参数这种方式是最基本的参数传递方式。 2.存储器单元传(变量)递参数 这种方法是在主程序调用子程序前,将入口参数存放到约定的存储单元中;子程序运行时到约定存储位置读取参数;子程序执行结束后将结果也放在约定存储单元中。 3.用堆栈传递参数 利用共享堆栈区,来传递参数是重要的的方法之一。 B)字符、字符串输入输出知识要点: 在实际应用中,经常需要从键盘输入数据并将结果等内容显示到屏幕上,方便程序控制及查看结果。汇编语言的数据输入和输出分成两类,一是单个字符数据的输入输出,一是字符串数据的输入输出。都可以通过DOS功能调用来实现,下面就分别介绍下用来实现数据输入输出的功能调用的使用方法。 1、单个字符输入 单个字符输入可以利用DOS的1号功能调用来完成,使用方法为: MOV AH,1 INT 21H 这两条语句执行后,光标会在屏幕上闪烁,等待输入数据,输入的数据以ASCII 码形式存储在AL寄存器中。 2、单个字符输出 单个字符输出可利用DOS2号功能调用来完成,使用方法为: MOV DL,’?’ MOV AH,2

相关主题
文本预览
相关文档 最新文档