嵌入式系统 各实验实验报告

嵌入式系统设计实验报告

班 级:学 号:姓 名:成 绩:指导教师:

XXXXXXXXXX XXXXXXXXXX XXXXXXX XXXXXXXXXXX

1. 实验一

1.1 实验名称

博创UP-net3000实验台基本结构及使用方法

1.2 实验目的

熟悉UP-net3000实验平台的核心硬件电路和外设

通过操作系统自带的通讯软件超级终端,检验各个外设的工作状态

1.3 实验环境

硬件:ARM 嵌入式开发平台、用于ARM7TDMI 的JTAG 仿真器、PC 机

Pentium100 以上。

软件:PC 机操作系统Windows、ADS1.2 集成开发环境、仿真器驱动程序、

超级终端通讯程序。

1.4实验内容及要求

一、内容

①嵌入式系统开发流程概述

②熟悉UP-net3000实验平台的核心硬件电路和外设

③ARM JTAG的安装与使用

④通过操作系统自带的通讯软件超级终端,检验各个外设的工作状态

二、要求

通过本次课程对各个外设的了解,为今后各个接口实验打下基础。

1.5实验设计与实验步骤

一、JTAG 的驱动程序的安装:

执行armJtag 目录下armJtagSetup.exe 程序,选择安装目录,安装JTAG 软件。

二、通过通讯软件超级终端来检验外设的工作状态:

①运行Windows 系统下的超级终端(HyperTerminal)应用程序,新建一个通信终端。为所建超级终端取名为arm,可以为其选择第一个图标。单击“确定”按钮。

②在接下来的对话框中选择ARM 开发平台实际连接的PC 机串口(如COM1),按确定按钮后出现属性对话框,设置通信的格式和协议。波特率为115200,数据位8,无奇偶校验,停止位1,无数据流控制。按确定完成设置。

③完成新建超级终端的设置以后,可以选择超级终端文件菜单中的保存,将

当前设置保存为一个特定超级终端到桌面上,以备后用。用串口线将PC 机串口和平台UART0 正确连接后,就可以在超级终端上看到程序输出的信息了。

④启动开发板,按住开发板上键盘的任意按键,使开发板进入BIOS 设置状态。

⑤最后分别在按电脑键盘上的相应按键对各个外设的工作状态进行检验。

1.6实验过程与分析

当在电脑键盘上分别按下相应按键时,试验台有相应反应,说明外设工作正常。

1.7 实验结果总结

了解了UP-net3000实验平台的核心硬件电路和外设,ARM JTAG 驱动程序的安装与使用。最后通过操作系统自带的通讯软件超级终端,检验了各个外设的工作状态正常与否。

1.8 心得体会

通过本次实验,我了解了嵌入式系统开发的基本流程,知道了怎样通过操作系统自带的通讯软件超级终端来检验各个外设的工作状态。第一次实验没有难度,轻松加愉快地完成了,通过了检验,方便了以后实验可以正常进行。

2. 实验二

2.1 实验名称

ADS1.2软件开发环境使用方法

2.2 实验目的

①学习串行通讯原理,了解串行通讯控制器。

②掌握ARM 的UART相关寄存器的功能,熟悉ARM 系统硬件的UART 相关接口。

2.3 实验环境

硬件:ARM 嵌入式开发平台、用于ARM7TDMI 的JTAG 仿真器、PC 机Pentium100 以上。

软件:PC 机操作系统Windows、ADS1.2 集成开发环境、仿真器驱动程序、超级终端通讯程序。

2.4 实验内容及要求

学习串行通讯原理,了解串行通讯控制器,阅读ARM 芯片文档,掌握ARM 的UART相关寄存器的功能,熟悉ARM 系统硬件的UART 相关接口。编程实现ARM 和计算机实现串行通讯:ARM 监视串行口,将接收到的字符再发送给串口(计算机与开发板是通过超级终端通讯的),即按PC 键盘通过超级终端发送数据,开发板将接收到的数据再返送给PC,在超级终端上显示。

2.5 实验设计与实验步骤

①在新建工程时ADS 创建了和工程同名的目录,在该目录下按类别创建子目录并存放工程文件。

②选中所有目录拖动到任务栏上的ADS 任务条上,不要松开鼠标当ADS 窗口恢复后再拖动到工程文件窗口,松开鼠标。这样ADS 将以子目录名建立同名文件组并以此对文件分类。

③双击Main.c 打开该文件。

④利用上个实验中的通讯软件超级终端来将生成的文件放到嵌入式开发平台中。

2.6 实验过程与分析

按PC 键盘,发现超级终端上显示的与键盘按下的是一致的,说明ARM 监视串行口,将接收到的字符再发送给串口。

2.7 实验结果总结

本实验首先将LCD显示模式转换为文本显示模式,然后在文本模式下清屏命令,最后向液晶屏和向串口输出。ARM 监视串行口;将接收到的字符再发送给串口(计算机与开发板是通过超级终端通讯的);即按PC 键盘通过超级终端发送数据,开发板将接收到的数据再返送给PC,在超级终端上显示。

2.8 心得体会

通过本次实验,我掌握了串行通讯原理、并且了解了串行通讯控制器、熟悉ARM 系统硬件的UART 相关接口。明白了ADS1.2软件开发环境的使用方法,到目前为止,实验难度不大,蛮开心的。

3. 实验三

3.1 实验名称

键盘及LED实验UP-3000实验台基本结构及使用方法

3.2 实验目的

①熟悉ZLG7289芯片的内部结构

②掌握用ZLG7289驱动键盘和LED的方法

③掌握ARM汇编语言和C语言的编程方法

④编写出一段程序,要求能在LED上显示出小键盘上按下的4位数字

3.3 实验环境

硬件:ARM 嵌入式开发平台、用于ARM7TDMI 的JTAG 仿真器、PC 机Pentium100 以上。

软件:PC 机操作系统Windows、ADS1.2 集成开发环境、仿真器驱动程序、超级终端通讯程序。

3.4实验内容及要求

内容:

编写出一段程序,通过ZLG7289芯片驱动的键盘和8个共阴极LED,将在小键盘上按下的4位数字按键值在LED上显示出来。

要求:

从右至左循环显示至少四位数字,基本功能实现之后实现从左至右显示数字。

3.5实验设计与实验步骤

①新建工程,将“Exp3 键盘及LED 驱动实验”中的文件添加到工程。 ②定义键值读取函数。编写主函数,将按键值在数码管上显示。 ③通讯软件超级终端来将生成的文件放到嵌入式开发平台中。

3.6实验过程与分析

以下是核心代码:

Delay(5);//延时

WriteSDIO(ZLG7289_CMD_DATA0|0);//数码管以方式0译码,第一个数码管亮

WriteSDIO(key%10);//显示个位

Delay(1);//延时

if(key>9) {//键值大于9显示十位 } WriteSDIO(ZLG7289_CMD_DATA0|2);//发送十位数据 WriteSDIO((unsigned char)(key/10)); Delay(1); WriteSDIO(ZLG7289_CMD_HIDE);//使一、二两位数码管显示 WriteSDIO(4);

else

据老师要求,又将8位的改成了2位的,成功实现实验要求。 {//键值小于10不显示十位 } WriteSDIO(ZLG7289_CMD_HIDE);//使个位数码管显示 WriteSDIO(1); ZLG7289_DISABLE();//zlg7289放弃同步串口控制权

3.7 实验结果总结

通过本次实验,我熟悉ZLG7289芯片的内部结构,掌握了用ZLG7289驱动键盘和LED的方法,掌握了ARM汇编语言和C语言的编程方法,达到实验目的。

3.8 心得体会

实验过程中的编码耗时较长,自己的编程能力不足,在同学的协助下才完成,往后要加强这方面的练习。

4. 实验四

4.1 实验名称

电机转动控制及中断实验

4.2 实验目的

①熟悉ARM自带的六路(三对)PWM

②了解直流电机和步进电机的工作原理

③熟悉ARM自带的A/D转换器的工作原理及编程方法

④利用A/D转换器实现对直流电机和步进电机

4.3 实验环境

硬件:ARM 嵌入式开发平台、用于ARM7TDMI 的JTAG 仿真器、PC 机Pentium100 以上。

软件:PC 机操作系统Windows、ADS1.2 集成开发环境、仿真器驱动程序、超级终端通讯程序。

4.4实验内容及要求

内容:

学习步进电机和直流电机的工作原理,了解实现两个电机转动对于系统的软件和硬件要求。学习ARM 知识,掌握PWM 的生成方法,同时掌握I/O 的控制方法。

要求:

①编程实现ARM 芯片的一对PWM 输出用于控制直流电机的转动,通过A/D 旋钮控制其正反转及转速。

②编程实现ARM 的四路I/O 通道实现环形脉冲分配用于控制步进电机的转动,通过A/D 旋钮转角控制步进电机的转角。

③通过超级终端来控制直流电机与步进电机的切换。

4.5实验设计与实验步骤

首先,新建工程,将“Exp6 电机转动控制实验”中的文件添加到工程。其次,编写直流电机初始化数(MotorCtrl.c),设置寄存器TCFG0、TCFG1、TCNTB0、TCON,再次,控制直流电机,还有,初始化开发板,初始化直流电机,初始化AD转换器,采样AD值,延时,设置相应的脉冲宽度,延时。最后,采样AD值,延时,采样AD值,延时,根据AD旋钮转角确定步数及转动方向,发出步进电机控制命令,保存本次采样值。

4.6实验过程与分析

核心代码如下

void init_ADdevice()

{//初始化

}

int GetADresult(int channel)

{

rADCCON=(channel<<2)|ADCCON_ENABLE_START;

}

void init_MotorPort()

{

rTCFG0=(0<<24)|2;

rTCFG1=0;

}

void SetPWM(int value)

{

} rTCMPB0= MOTOR_MID+value; rTCNTB0= MOTOR_CONT; rTCMPB0= MOTOR_MID; rTCON=0x2; rTCON=0x19; Delay(10); while(!(rADCCON&ADCCON_FLAG));//转换结束 return rADCDAT;//返回采样值 rADCPSR=20; rADCCON=ADCCON_SLEEP;

4.7 实验结果总结

实现了ARM 芯片的一对PWM 输出用于控制直流电机的转动,通过A/D 旋钮控制其正反转及转速。实现ARM 的四路I/O 通道实现环形脉冲分配用于控制步进电机的转动,通过A/D 旋钮转角控制步进电机的转角。通过超级终端来控制直流电机与步进电机的切换。通过键盘来控制直流电机的转动或停止。

4.8 心得体会

通过本次实验,熟悉了ARM自带的六路。了解了直流电机和步进电机的工作原理。熟悉了ARM自带的A/D转换器的工作原理及编程方法。掌握了利用A/D转换器实现对直流电机和步进电机的控制。因为看到自己努力的成果,我不由得多按了几次键盘来控制直流电机。

5. 实验五

5.1 实验名称

LCD驱动及触摸屏实验

5.2 实验目的

①掌握LCD显示原理及显示驱动的嵌入式系统编程实现方法

②学习基于ARM的LCD 显示驱动控制方法,通过对ARM 内置的LCD 控制器进行编程实现驱动LCD显示屏。

③学习触摸屏基本原理,理解触摸屏的输出标定以及与LCD 显示器配合的过程

5.3 实验环境

硬件:ARM 嵌入式开发平台、用于ARM7TDMI 的JTAG 仿真器、PC 机Pentium100 以上。

软件:PC 机操作系统Windows、ADS1.2 集成开发环境、仿真器驱动程序、超级终端通讯程序。

5.4实验内容及要求

内容:

学习基于ARM的LCD 显示驱动控制方法,通过对ARM 内置的LCD 控制器进行编程实现驱动LCD显示屏。学习触摸屏基本原理,理解触摸屏的输出标定以及与LCD 显示器配合的过程,编程实现对触摸屏的控制。

要求:

①点击触摸屏上两点后,两点之间画出一条直线。

② 点击触摸屏并在其上移动,显示移动轨迹。

5.5实验设计与实验步骤

①新建工程,将“Exp8 触摸屏驱动实验”中的文件添加到工程。

②在头文件中定义宏及常量(tchscr.c,tchscr.h)

③定义驱动函数(tchscr.c)

读取触摸点x 轴电压值:发送读取x电压值,控制字SendSIOData,等待8个时钟节拍,读取采样值高8位,ReadSIOData,发送读取x电压值,控制字SendSIOData,将第一次采样值左移8位,读取低8位并与以前高8位组成16位数据,去掉低4位,保留12位有效数据。

读取触摸点坐标:打开ADS7843,读取触摸点x轴电,压值4次取平均值,读取触摸点y轴电压值4次取平均值,打开ADS7843,对采样结果进行转换。

④编写测试函数(tchscr.c)

将触摸动作及触摸点坐标在超级终端上显示出来。

⑤校准触摸屏坐标输出,转换坐标,与LCD 紧密配合

⑥通讯软件超级终端来将生成的文件放到嵌入式开发平台中。

5.6实验过程与分析

核心代码如下:

void TchScr_GetScrXY(int *x, int *y, U8 bCal)

{//获得触摸点坐标

unsigned int temp; rPDATF&=~ADS7843_PIN_CS;//打开ADS7843 SendSIOData(ADS7843_CMD_X);//发送读取x电压值控制字 SendSIOData(0);//等待8个时钟节拍,因为完成一转换需要16个时钟 temp=ReadSIOData();//读取采样值高8位 SendSIOData(ADS7843_CMD_X); temp<<=8; temp|=ReadSIOData();//读取低8位并与以前高8位组成16位数据 *x=(temp>>4);//去掉低4位,保留12位有效数据 SendSIOData(0); temp=ReadSIOData(); SendSIOData(ADS7843_CMD_X); temp<<=8; temp|=ReadSIOData(); *x+=(temp>>4);

SendSIOData(0); temp=ReadSIOData(); SendSIOData(ADS7843_CMD_X); temp<<=8; temp|=ReadSIOData(); *x+=(temp>>4); SendSIOData(0); temp=ReadSIOData(); SendSIOData(ADS7843_CMD_Y); temp<<=8; temp|=ReadSIOData(); *x+=(temp>>4); *x>>=2; //采样4次取平均值 //读取y电压值 SendSIOData(0); temp=ReadSIOData(); SendSIOData(ADS7843_CMD_Y); temp<<=8; temp|=ReadSIOData(); *y=(temp>>4); SendSIOData(0); temp=ReadSIOData(); SendSIOData(ADS7843_CMD_Y); temp<<=8; temp|=ReadSIOData(); *y+=(temp>>4); SendSIOData(0); temp=ReadSIOData();

SendSIOData(ADS7843_CMD_Y); temp<<=8; temp|=ReadSIOData(); *y+=(temp>>4); SendSIOData(0); temp=ReadSIOData(); SendSIOData(0); temp<<=8; temp|=ReadSIOData(); *y+=(temp>>4); *y>>=2; rPDATF|=ADS7843_PIN_CS;//关闭ADS7843 if(bCal)

{//对采样结果进行转换

}

} *x=(*x-TchScr_Xmin)*LCDWIDTH/(TchScr_Xmax-TchScr_Xmin); *y=(*y-TchScr_Ymin)*LCDHEIGHT/(TchScr_Ymax-TchScr_Ymin);

5.7 实验结果总结

点击触摸屏任何部位,都能显示出点,再点击触摸屏之后,第一个点会与点击的第二个点迅速连成直线。

5.8 心得体会

通过本次实验,学习了基于ARM的LCD 显示驱动控制方法,通过对ARM 内置的LCD 控制器进行编程实现了驱动LCD显示屏。学习了触摸屏基本原理,理解了触摸屏的输出标定以及与LCD 显示器配合的过程,编程实现了对触摸屏的控制。从以往的学习状态又上升了一个层次

6. 实验六

6.1 实验名称

ucos-II裁剪实验

6.2 实验目的

①掌握μcos-II裁剪的基本原理与嵌入式编程实现方法。

②学习根据具体情况对μcos-II操作系统进行裁剪,从而得到即满足需要,又非常紧凑的应用软件系统。。

6.3 实验环境

硬件:ARM 嵌入式开发平台、用于ARM7TDMI 的JTAG 仿真器、PC 机Pentium100 以上。

软件:PC 机操作系统Windows、ADS1.2 集成开发环境、仿真器驱动程序、超级终端通讯程序。

6.4实验内容及要求

内容:

①根据μcos-II裁剪的基本原理与嵌入式编程实现方法,

②根据具体情况对μcos-II操作系统进行裁剪,从而得到即满足需要,又非常紧凑的应用软件系统。

③通过对μcos-II配置文件(OS_CFG.H)中相关的配置常量进行设置,实现对 μcos-II的裁剪。给出裁剪的详细过程与裁剪结果说明,并生成裁剪后的操作系统文件。

要求:

得到即满足需要,又非常紧凑的应用软件系统。

6.5实验设计与实验步骤

找到文件夹Exp12Aucos中的ucos-ii文件夹,将其中的os_cfg.h文件打开,部分代码如下所示。

#define OS_ARG_CHK_EN 0

#define OS_CPU_HOOKS_EN 1

#define OS_DEBUG_EN

#define OS_EVENT_NAME_SIZE 32

#define OS_LOWEST_PRIO 63

#define OS_MAX_EVENTS 100

#define OS_MAX_FLAGS 50

#define OS_MAX_MEM_PART 50

#define OS_MAX_QS 20

#define OS_MAX_TASKS 60

#define OS_SCHED_LOCK_EN 1

#define OS_TASK_IDLE_STK_SIZE 512

#define OS_TASK_STAT_EN 0

#define OS_TASK_STAT_STK_SIZE 512

#define OS_TASK_STAT_STK_CHK_EN 1

#define OS_TICK_STEP_EN 0

#define OS_TICKS_PER_SEC 1000

可对以上的相关的配置常量进行设置,实现对μcos-II的裁剪。

6.6实验过程与分析

对μcos-II的裁剪就是将μcos-II配置文件(OS_CFG.H)中相关的配置常量进行设置。将适合要求配置常量为“1”的改为“0”。

6.7 实验结果总结

通过对μcos-II配置文件(OS_CFG.H)中相关的配置常量进行设置,实现对μcos-II的裁剪。得到满意的应用软件系统。

6.8 心得体会

通过本次实验,我掌握了μcos-II裁剪的基本原理与嵌入式编程实现方法。并且了解了根据具体情况对μcos-II操作系统进行裁剪的方法。得到满意的应用软件系统。实验难度倒是很低。

7. 实验七

7.1 实验名称

ucos-II移植实验

7.2 实验目的

①了解?C/OS-II 内核的主要结构,掌握ARM的C语言和汇编语言的编程方法。

②了解ARM7处理器结构,掌握将?C/OS-II 内核移植到ARM 7 处理器上的基本原理与嵌入式编程实现方法。

7.3 实验环境

硬件:ARM 嵌入式开发平台、用于ARM7TDMI 的JTAG 仿真器、PC 机Pentium100 以上。

软件:PC 机操作系统Windows、ADS1.2 集成开发环境、仿真器驱动程序、超级终端通讯程序。

7.4实验内容及要求

内容:

①弄清?C/OS-II 内核的主要结构和ARM7处理器结构,掌握?C/OS-II 内核移植到ARM 7 处理器上的基本原理与嵌入式编程实现方法。

②使用ARM的C语言和汇编语言的编程方法,将?C/OS-II 内核移植到ARM 7 处理器上,并编写两个简单任务,在超级终端上观察两个任务的切换。 要求:

①掌握ARM的C语言和汇编语言的编程方法。

②掌握将?C/OS-II 内核移植到ARM 7 处理器上的基本原理与嵌入式编程实现方法。

7.5实验设计与实验步骤

①该实验的文件分为两类,其一是STARTUP 目录下的系统初始化、配置等文件,其二是uCOS-II 的全部源码,arch 目录下的3 个文件是和处理器架构相关的。

②设置os_cpu.h 中与处理器和编译器相关的代码。

③用C 语言编写6 个操作系统相关的函数(OS_CPU_C.C)。

④用汇编语言编写4 个与处理器相关的函数(OS_CPU.ASM)。

⑤编写一个简单的两个任务对程序来测试。

⑥编译并下载移植后的uCOS-II。

7.6实验过程与分析

编写任务函数内容,以下是核心代码:

void TaskName(void *Id)

{

//添入任务初始化语句

for(;;)

{ //添入任务循环内容

OSTimeDly(SusPendTime);//挂起一定时间,以使其他任务可

以占用CPU

}

}

uCOS-II 至少要有一个任务,这里首先创建一个系统任务SYS_Task,其中由语句

OSRunning=TRUE; //使能uCOS-II 运行

uHALr_InstallSystemTimer();

启动系统时钟和多任务切换。

7.7 实验结果总结

使用ARM的C语言和汇编语言的编程方法,将?C/OS-II 内核移植到ARM 7 处理器上的基本原理与嵌入式编程实现方法。实现了ucos-II移植。

7.8 心得体会

通过本实验,我了解?C/OS-II 内核的主要结构和ARM7处理器结构,掌握了将?C/OS-II 内核移植到ARM 7 处理器上的基本原理与嵌入式编程实现方法。为以后的实验打下了基础。

8. 实验八

8.1 实验名称

各接口模块相互衔接综合实验

8.2 实验目的

(1)回顾串口、键盘、LED接口、A/D、电机转动、定时器中断、LCD接口及触摸屏驱动控制等接口模块驱动设计及开发方法。

(2)提高开发综合应用系统的能力。

8.3 实验环境

硬件:ARM 嵌入式开发平台、用于ARM7TDMI 的JTAG 仿真器、PC 机Pentium100 以上。

软件:PC 机操作系统Windows、ADS1.2 集成开发环境、仿真器驱动程序、超级终端通讯程序。

8.4实验内容及要求

内容:

综合应用串口、键盘、LED接口、A/D、电机转动、定时器中断、LCD接口及触摸屏驱动控制等接口模块驱动设计及开发方法全部或者部分模块,实现一个嵌入式综合应用系统,

要求:

至少用到8个模块中的5个。尽量使综合应用系统具备合理的功能。

8.5实验设计与实验步骤

①综合运用串口、键盘、LED接口、A/D、电机转动、定时器中断、LCD接口及触摸屏驱动控制共八个模块。

②对main.c函数进行设置使得

按下键盘上1、2、3、4、5、6时,分别有以下实验结果:

直流电机开始转动、步进电机转动、屏幕上输出字母、开始计数、计数停止、在屏幕上点击两个点,使其实现直线连接。

8.6实验过程与分析

核心代码如下:

void go()

{

U16 key;

if(!(rPDATG&ZLG7289_KEY)) { *Revdata = RdURXH0(); key = GetKey(); if(key == 1) {

flag = 1;

}

while(flag == 1)

{ ADData = GetADresult(0); Delay(10); SetPWM((ADData - 512) * MOTOR_CONT/1024); } Delay(1000); if(key == 3) { } if(key == 4) { } if(key == 5) { } if(key == 6) { flag = 6; } flag = 5; flag = 4; flag = 3; } if(key == 2) { } flag = 2;

} Delay(10); SetPWM(0); lastADData = GetADresult(0); Delay(10); while(flag == 2) { } while(flag == 3) { } while(flag == 4) { } SetPWM(0); for(i=0;i<=7;i++) { } SETEXIOBITMASK(stepdata[i],0xf0); Delay(200); LCD_Init(); LCD_ChangeMode(DspTxtMode); LCD_Cls(); LCD_printf("we are friend!"); Delay(100000); SetISR_Interrupt(INT_TIMER3_OFFSET,Timer3_ISR,1); Open_INT(BIT_TIMER3); Start_Timer3();

while(flag == 5) { } while(flag == 6) { } ARMTargetInit(); if(TchScr_Test()==0) { ARMTargetInit(); flag = 4; } x1 = GetADresult(0); Uart_Printf("%d\n",x1); Delay(1000); Delay(1000);

8.7 实验结果总结

按下键盘上1、2、3、4、5、6时,分别有以下实验结果:

直流电机开始转动、步进电机转动、屏幕上输出字母、开始计数、计数停止、在屏幕上点击两个点,使其实现直线连接。

成功实现了综合应用串口、键盘、LED接口、A/D、电机转动、定时器中断、LCD接口及触摸屏驱动控制等接口模块驱动设计及开发方法的部分模块,实现了一个嵌入式综合应用系统,

8.8 心得体会

这是最后一次实验,对以往的实验进行了回顾和总结。总体来说,我的编程能力得到了提高,但是还不能完全独立完成编码,对编码的部分内容,得向别人询问才能学会,但总体来说,还是达到实验目的,完成了实验要求,正因为自己会的并不多,所以每当实验结果得以实现时,总会感觉很满足。

相关推荐