第一篇:李晓林(2009061121)嵌入式系统实验报告
嵌入式系统设计实验报告
班 级:学 号:姓 名:成 绩:指导教师:
090611 2009061121 李晓林 武俊鹏 刘书勇 1
1.实验一
1.1 实验名称
博创UP-3000实验台基本结构及使用方法
1.2 实验目的
熟悉UP-net3000实验平台的核心硬件电路和外设 ARM JTAG的安装与使用
通过操作系统自带的通讯软件超级终端,检验各个外设的工作状态,为以后的实验和课设打下基础。
1.3 实验环境
硬件:ARM嵌入式开发平台、用于 ARM7TDMI的JTAG 仿真器、PC机Pentium100 以上、示波器。
软件:PC机操作系统win98、Win2000 或WinXP、ARM SDT 2.51或ADS1.2集成开发环
境、仿真器驱动程序、超级终端通讯程序。
1.4 实验内容及要求
熟悉UP-net3000实验平台的核心硬件电路和外设,ARM JTAG的安装与使用。通过操作系统自带的通讯软件超级终端,检验各个外设的工作状态。要求通过本次课程对各个外设的了解,为今后各个接口实验打下基础。
1.5 实验设计与实验步骤
1.熟悉嵌入式开发平台。
1)了解开发板主要硬件位置及功能
2)主要了解串口及USB口位置
3)了解开发板与PC间的连接方法。2.安装ARM JTAG。
3.建立超级终端ARM,并熟悉其使用。
1)运行windows下的超级终端,取名为arm。
2)设置波特率为115200,数据位8,停止位1,无数据流控制。
3)保存快捷方式
4)启动开发板,按住开发板上键盘的任意按键,使开发板进入BIOS 设置状态。5)每个条目的最左边字母是该功能的快捷键,按PC 机键盘相应键将执行对应功能。
6)按超级终端的提示尝试部分测试功能。
7)按PC键盘的u键将开发板16M Flash挂载到PC机上。
1.6 实验过程与分析
按照步骤3测试开发板外设状态,测试结果表明开发板硬件没有问题,为以后
开发排除了硬件故障这个原因,最后将“Hello,world”那个工程system.bin 文件通过USB 下载到嵌入式开发板中,复位系统,运行并检查输出。基本测试完成。
1.7 实验结果总结
本实验测试了开发板硬件状态,保证其功能好使,为以后开发出现问题排除了硬件故障这一原因,熟悉了开发板主要部件作用及位置,知道了USB口及串口的位置,为以后出现连接问题提供了解决方案。最后,测试“Hello,world”工程,了解了简单调试修改错误的方法,为以后调试代码提供了解决方案。
1.8 试验中遇到的问题
在实验过程中遇到了挂载开发板Flash没有挂载上去的现象,总结其原因大致有两个
1)病毒侵占开发板端口,解决方法为安装杀毒软件扫描一下PC。
2)PC键盘为英语“大写”状态,此时按“U”无法挂载,因为终端对于大小写非常敏感,这一点类似于Linux,解决方法为按“CapsLk”键转换为“小写”。
1.9 心得体会
通过本次实验,大致学会了三点: 1)通过终端挂载开发板Flash 3)测试开发板硬件外设状态,为以后开发出现问题排除了硬件故障这一原因。2)拷贝开发工程中system.bin至开发板Flash,运行代码,并根据运行结果进行简单调试。
2.实验二
2.1 实验名称
ADS1.2软件开发环境使用方法
2.2 实验目的
熟悉ADS1.2开发环境,了解嵌入式开发的基本思想和过程。使用 ADS1.2 编译、下载、调试并跟踪程序。
2.3 实验环境
硬件:ARM嵌入式开发平台、用于 ARM7TDMI的JTAG 仿真器、PC机Pentium100 以上、示波器。
软件:PC机操作系统win98、Win2000 或WinXP、ARM SDT 2.51或ADS1.2集成开发环
境、仿真器驱动程序、超级终端通讯程序。
2.4 实验内容及要求
1.ADS 1.2开发环境使用。AXD Debugger使用方法。
2.Hello World!——最小系统,编译及调试。学习串行通讯原理,了解串行通讯控制器,阅读ARM 芯片文档,掌握ARM 的UART相关寄存器的功能,熟悉ARM 系统硬件的UART 相关接口。
3.编程实现ARM 和计算机之间的串行通讯。
4.ARM 监视串行口;将接收到的字符再发送给串口(计算机与开发板是通过超级终端通讯的);即按PC 键盘通过超级终端发送数据,开发板将接收到的数据再返送给PC,在超级终端上显示。
2.5 实验设计与实验步骤
1.新建工程,将“Exp2 ARM 串口实验”中的文件添加到工程中,这些是启动时所需
要的文件。
2.定义与UART 有关的各个寄存器地址和一些特殊的位命令。3.编写串口驱动函数(MyUart.c)。此函数主要是实现三个功能: 1)串口的初始化
实现方法为将寄存器ULCONn、UCONn置零,设置寄存器ULCONn、UCONn、UBRDIV,延时:延时的实现方法可以用for循环实现,循环体里空函数以实现延时。2)发送数据
实现方法为首先判断发送队列是否为空,若为空则延时,然后发送数据WrUTXH0(data);若不为空则继续判断发送队列是否为空。3)接收数据
实现方法为首先判断接收队列是否为满,若为空则接收数据RdURXH0();若不为空则继续判断接收队列是否为满。
4.在主函数中实现将从串口0 接收到的数据发送到串口0(Main.c)。
主要编程思想:开发板初始化ARMTargetInit(),设置LCD显示模式,向串口输出数据Hello world!,从串口采集数据,显示采集的数据。
2.6 实验过程与分析
在实验过程中,主函数调用函数Uart_Getch从串行口采集数据,然后将采集的数据通过函数Uart_SendByte显示出来。主函数主要实现代码:
ARMTargetInit();//开发版初始化
LCD_Init();while(1){ LCD_ChangeMode(DspTxtMode);//转换LCD显示模式为文本显示模式
LCD_Cls();//文本模式下清屏命令
LCD_printf(“Hello world!n”);//向液晶屏输出
Uart_Printf(“nHello world!n”);//向串口输出
err=Uart_Getch(c1,0,0);//从串口采集数据
Uart_SendByte(0,c1[0]);//显示采集的数据
} 2.7 实验结果总结
运行串行口函数,将PC 键盘通过超级终端发送数据,开发板再将接收到的数据返送给PC,在超级终端上显示。
2.8 心得体会
通过本次实验进一步熟悉了实验平台和软件,并通过实验指导书的指导,初步了解可在平台上的系统的基本组成,并可以将一个简单的例子实现,熟悉了串口对串口原理有了进一步的了解。
3.实验三
3.1 实验名称
键盘控制方法及LED驱动设计
3.2 实验目的
1.学习键盘及LED 驱动原理。
2.掌握ZLG7289芯片串行接口的使用方法,用ZLG7289芯片驱动17键的键盘和8个共阴极LED。
3.3 实验环境
硬件:ARM 嵌入式开发平台、用于ARM7TDMI 的JTAG 仿真器、PC 机Pentium100 以 上。
软件:PC 机操作系统win98、Win2000 或WinXP、ARM SDT 2.51 或ADS1.2 集成开发 环境、仿真器驱动程序、超级终端通讯程序
3.4 实验内容及要求
通过ZLG7289芯片驱动17键的键盘和8个共阴极LED,将按键值在LED上显示出来。要求从右至左循环显示至少四位数字。
基本功能实现之后可考虑实现从左至右显示四位及四位以上数字(最大八位),并可设置清零键等扩展功能。
3.5 实验设计与实验步骤
此实验设计主要分为三大模块: 1)定义键盘映射表:(KeyBoard.c)
unsigned char KeyBoard_Map[]= {4,8,11,0,0,0,0,0,5,9,12,15,1,0,0,0,6,10,13,16,2,3,0,0,7,0,14,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};此文件中有键值读取函数:其大体流程为,判断是否有键按下,如果有按键按下,从zlg7289读取键值,判断按键值是否有效,如果有效则通过映射表得到按键值。
2)数码管显示数字模块,首先使zlg7289占有同步串口,延时,然后显示个位,之后判断显示的数字为几位,分别编码显示各个位,此部分可以用else语句实现。
3)每当输入一个数字,数码管原先的数字就得向左移动新数字在最后一位显示,将原先所得数值*10再加上新值,最后显示。
4)主函数编写模块:首先开发板初始化,LCD初始化,从小键盘获取数字,显示数字。
3.6 实验过程与分析
1)数码管显示数字模块:部分代码 void LEDshow(U32 key){
Zlg7289_Reset();
Delay(1);6
ZLG7289_ENABLE();//使zlg7289占有同步串口
Delay(5);//延时
WriteSDIO(ZLG7289_CMD_DATA0|0);//数码管以方式0译码,第一个数码管亮
WriteSDIO(key%10);//显示个位
Delay(1);//延时
if(key>9999999)
{ WriteSDIO(ZLG7289_CMD_DATA0|7);
WriteSDIO((unsigned char)(key/10000000));
Delay(1);
„„„
WriteSDIO(ZLG7289_CMD_DATA0|1);//发送十位数据
WriteSDIO((unsigned char)(key/10%10));
Delay(1);
WriteSDIO(ZLG7289_CMD_HIDE);//使一、二两位数码管显示
WriteSDIO(255);
} ZLG7289_DISABLE();//zlg7289放弃同步串口控制权
} 2)获取数字模块主要代码: U32 GetNum(){ U32 key,m;key = GetKey();Delay(5000);
{
m=key;
LEDshow(key);
Delay(5000);„„
m=key+m*10;LEDshow(m);} return m;} 3.7 实验结果总结
本实验通过ZLG7289芯片驱动17键的键盘和8个共阴极LED,将按键值在LED上显示出来。实现了从左至右显示四位及四位以上数字(最大八位)。消除键盘抖动现象方法:
通过实验,用延时的方法的消除抖动现象,具体延时为Delay(2000)。
3.8 心得体会
通过本实验知道了键盘映射表的功能,通过尝试,修改键盘映射表,学会了驱动键盘及LED显示数据方法,为以后使用键盘,LED硬件提供了方法。
4.实验四
4.1
实验名称
电机转动控制及中断实验
4.2 实验目的
1.熟悉ARM本身自带的六路即三对PWM,掌握相应寄存器的配置。
2.编程实现 ARM系统的PWM 输出和I/O 输出,前者用于控制直流电机,后者用于控制步进电机。
3.了解直流电机和步进电机的工作原理,学会用软件的方法实现步进电机的脉冲分配,即用软件的方法代替硬件的脉冲分配器。
4.掌握带有PWM 和I/O 的CPU 编程实现其相应功能的主要方法。了解44B0处理器的定时器应用。
5.学习在44B0处理器上中断的应用。进一步熟悉平台外围硬件及其驱动程序的编写。
4.3 实验环境
硬件:ARM嵌入式开发平台、用于 ARM7TDMI的JTAG 仿真器、PC机Pentium100 以上、示波器。
软件:PC机操作系统win98、Win2000 或WinXP、ARM SDT 2.51或ADS1.2集成开发环 境、仿真器驱动程序、超级终端通讯程序。
4.4 实验内容及要求
1.利用A/D转换器实现对直流电机和步进电机的控制。
2.利用实验设备上自带的小键盘实现A/D转换器对两个电机控制的切换。
3.学习S3C44B0上定时器中断应用方法。综合键盘、LED、A/D以及电机等外设,编写出单一的中断应用。编写出多个不同优先级中断应用嵌套的应用系统。
4.5 实验设计与实验步骤
1.首先实现小键盘输入,这个问题的灵感来源于实验三键盘驱动实验,观察实验三keyBoard.c发现检测键盘是否有按键按下是通过while((rPDATG&ZLG7289_KEY));//有键按下,这段代码监视的,所以main.c中的if((rPDATG&0x10))//PC键盘有输入,则跳出这段监视PC键盘的代码修改为if(rPDATG&ZLG7289_KEY),这样就可以通过小键盘来驱动电机的转换。
2.加上定时Timer3INTCount==40,实验十是定时器中断和驱动程序,此实验中的timer.c是计算中断次数的,加上以上代码实现没中断40次实现直流电机和步进电机的切换。
4.6 实验过程与分析
1.参考实验三根据设计步骤一修改main.c实现小键盘输入。
2.将实验十的定时器中断代码timer.c加入本工程中,在mian.c中引用此文件中的函数。3.修改main.c实现中断次数到40次时,转换直流电机和步进电机。4.实验中main.c主要修改代码
int main(void)8
{ „„
for(;;){ begin:
for(;;){ „„
if((rPDATG&ZLG7289_KEY)||(Timer3INTCount==40))//小键盘是否有输入,中断次数是否为40次。
} {
} *Revdata=RdURXH0();goto next;next:
„„ for(;;){ loop: if((rPDATG&ZLG7289_KEY)||(Timer3INTCount==40))//小键盘是否有输入,中断次数是否为40次。
{
} Delay(10);*Revdata=RdURXH0();goto begin;„„ }
4.7 实验结果总结
在LED上显示中断次数。当中断次数到40实现直流电机和步进电机的切换,小键盘有键按下时也切换。
4.8 心得体会
通过本次实验对ARM实验台键盘输入更加了解,理解了步进电机和直流电机的工作原理,掌握了中断定时技术,熟悉了通过AD转换控制电机的编程原理。
5.实验五
5.1 实验名称
LCD驱动及触摸屏实验
5.2 实验目的
1.了解LCD 基本概念与原理。
2.理解LCD 的驱动控制。熟悉用总线方式驱动LCD模块。3. 熟悉用ARM内置的LCD 控制器驱动LCD。
4.了解触摸屏基本概念与原理。理解触摸屏与LCD的密切配合。5.编程实现对触摸屏的控制。
5.3 实验环境
硬件:ARM嵌入式开发平台、用于 ARM7TDMI的JTAG 仿真器、PC机Pentium100 以上、示波器。
软件:PC机操作系统win98、Win2000 或WinXP、ARM SDT 2.51或ADS1.2集成开发环
境、仿真器驱动程序、超级终端通讯程序。
5.4 实验内容及要求
1.掌握LCD显示原理及显示驱动的嵌入式系统编程实现方法。
2.学习基于ARM的LCD 显示驱动控制方法,通过对ARM 内置的LCD 控制器进行编程实现驱动LCD显示屏。
3.学习触摸屏基本原理,理解触摸屏的输出标定以及与LCD 显示器配合的过程,编程对触摸屏进行控制,实现:
1)点击触摸屏上两点后,两点之间画出一条直线。2)点击触摸屏并在其上移动,显示移动轨迹。
5.5 实验设计与实验步骤
本实验旨在点击触摸屏上两点后,两点之间画出一条直线。本实验主函数在main.c中其编写方法为: 1.开发板初始化 2.LCD初始化
3.触摸板函数TchScr_Test()在tchScr.c文件有TchScr_Test()函数,TchScr_GetScrXY函数(获得触摸点坐标),TchScr_GetOSXY(获得触摸点坐标并返回触摸动作)三个主要函数,其中TchScr_Test()函数为主要函数,来编写触摸两点划出一条直线。其编写方法为: 1.声明四个变量,根据TCHSCR_ACTION_CLICK动作获取两次点击触摸屏的坐标,第一次获得触摸屏坐标储存在变量w,h中。第二次获得触摸屏坐标储存在变量x,y中。
2.获取两次触摸屏的坐标后,比较两次获取的x坐标的大小,计算直线的斜率k =((float)y-(float)h)/((float)x-(float)w),然后根据公式j = h-k*(w-i)从小的坐标画直线。
3.如果两次坐标获取的x值相同,判断纵坐标大小,从纵坐标较小者递增画直线。
5.6 实验过程与分析
实现的主要过程为:
mode=TchScr_GetOSXY(&x, &y);获取触摸屏坐标 switch(mode){ case TCHSCR_ACTION_CLICK:
LCDBuffer[x][y]=jcolor;点亮像素点} if(x > w){ k =((float)y-(float)h)/((float)x-(float)w);计算直线的斜率 for(i = w;i 5.7 实验结果总结 点击触摸屏上两点后,两点之间画出一条直线。点击触摸屏并在其上移动,显示移动轨迹。 5.8 实验中遇到的问题 实验中遇到的问题: 实验时计算直线的斜率是首先用的是整数类型,结果画出的直线偏差很大。解决方法为用强制转化的方法计算斜率 k =((float)y-(float)h)/((float)x-(float)w); 5.9 心得体会 通过本次实验,对LCD触屏驱动原理和显示触屏轨迹有了很深的认识。明白了如何点亮触摸屏上的像素,为以后综合实验做了准备。 6.实验六 6.1 实验名称 ucos-II裁剪实验 6.2 实验目的 掌握μcos-II裁剪的基本原理与嵌入式编程实现方法。学习如何根据具体情况对μcos-II操作系统进行裁剪,从而得到即满足需要,又非常紧凑的应用软件系统。 6.3 实验环境 硬件:ARM嵌入式开发平台、用于 ARM7TDMI的JTAG 仿真器、PC机Pentium100 以上、示波器。 软件:PC机操作系统win98、Win2000 或WinXP、ARM SDT 2.51或ADS1.2集成开发环 境、仿真器驱动程序、超级终端通讯程序。 6.4 实验内容及要求 1)掌握μcos-II裁剪的基本原理与嵌入式编程实现方法。 2)学习如何根据具体情况对μcos-II操作系统进行裁剪,从而得到即满足需要,又非常紧凑的应用软件系统。3)通过对μcos-II配置文件(OS_CFG.H)中相关的配置常量进行设置,实现对μcos-II的裁剪。4)给出裁剪的详细过程与裁剪结果说明,并生成裁剪后的操作系统文件。 6.5 实验设计与实验步骤 通过对μcos-II配置文件(OS_CFG.H)中相关的配置常量进行设置,实现对μcos-II的裁剪。在OS_CFG.H配置文件中查找并修改以下宏定义 #define OS_LOWEST_PRIO #define OS_TASK_STAT_EN 0 #define OS_EVENT_NAME_SIZE #define OS_FLAG_NAME_SIZE #define OS_MEM_NAME_SIZE #define OS_TASK_NAME_SIZE #define OS_TICKS_PER_SEC 1000 6.6 实验过程与分析 μcos-II操作系统基本是最低配置,在对源代码解析时发现可裁剪的很少,源代码主要包括以下文件os_core.c,os_flag.c,os_mbox.c,os_mem.c,os_mutex.c,os_q.c,os_sem.c,os_task.c,os_time.c,比较精简。故只对os_cfg.h配置文件做了一些相应修改。修改如上。 6.7 实验结果总结 成功的对μcos-II操作系统进行了修改,实现了对μcos-II的裁剪,为以后在操作系统上做一些相关实验以及课设奠定了基础。 6.8 心得体会 实现了对μcos-II的裁剪,为以后在操作系统上做一些相关实验以及课设奠定了基础。 7.实验七 7.1 实验名称 ucos-II移植实验 7.2 实验目的 了解uCOS-II 内核的主要结构。掌握将uCOS-II 内核移植到ARM7 处理器上的基本方法。 7.3 实验环境 硬件:ARM嵌入式开发平台、用于 ARM7TDMI的JTAG 仿真器、PC机Pentium100 以上、示波器。 软件:PC机操作系统win98、Win2000 或WinXP、ARM SDT 2.51或ADS1.2集成开发环 境、仿真器驱动程序、超级终端通讯程序。 7.4 实验内容及要求 了解µC/OS-II 内核的主要结构,掌握ARM的C语言和汇编语言的编程方法。了解ARM7处理器结构,掌握将µC/OS-II 内核移植到ARM 7 处理器上的基本原理与嵌入式编程实现方法。将µC/OS-II 内核移植到ARM7 微处理器S3C44B0上。编写两个简单任务,在超级终端上观察两个任务的切换。 7.5 实验设计与实验步骤.该实验的文件分为两类,其一是 STARTUP目录下的系统初始化、配置等文件,其二是uCOS-II 的全部源码,arch 目录下的3 个文件是和处理器架构相关的。.设置os_cpu.h 中与处理器和编译器相关的代码。 1)根据处理器的字长修改相关数据类型的定义 2)修改OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL()两个函数实现开关中断。 3)修改OS_STK_GROWTH设置堆栈的生长方式 3.用C 语言编写6 个操作系统相关的函数(OS_CPU_C.C)。 1)OSTaskStkInit 2)OSTaskCreateHook 3)OSTaskDelHook 4)OSTaskSwHook 5)OSTaskStatHook 6)OSTimeTickHook 4.用汇编语言编写4 个与处理器相关的函数(OS_CPU.ASM)。 1)OSStartHighRdy();运行优先级最高的就绪任务 2)OS_TASK_SW();任务级的任务切换函数 3)OSIntCtxSw();中断级的任务切换函数 4)OSTickISR();时钟节拍中断.编写一个简单的多任务程序来测试一下移植是否成功。.编译并下载移植后的uCOS-II。 7.6 实验过程与分析 按照实验步骤1-4进行修改操作系统。5.编写一个简单的多任务程序: 1)在程序开头定义任务堆栈,任务函数声明和任务优先级: OS_STK TaskName_Stack[STACKSIZE]={0, };//任务堆栈 void TaskName(void *Id);//任务函数 #define TaskName_Prio N //任务优先级 2)在main()函数中调用OSStart()函数之前用下列语句创建任务: OSTaskCreate(TaskName,(void*)0,(OS_STK*)&TaskName_Stack[STACKSIZE-1], TaskName_Prio);部分代码为: OSTaskCreate(Main_Task,(void *)0,(OS_STK *)&task1_Stack[STACKSIZE*8-1], task1_Task_Prio);// 创建任务1 OSTaskCreate(Display_Task,(void *)0,(OS_STK *)&_task2_Stack[STACKSIZE-1], task2_Task_Prio);// 创建任务2 3)编写任务函数内容: void task1(void *Id){ for(;;){ Uart_Printf(“nRun task1.”);OSTimeDly(SusPendTime);//挂起一定时间,以使其他任务可以占用CPU } } void task2(void *Id){ for(;;){ Uart_Printf(“nRun task2.”);OSTimeDly(SusPendTime);//挂起一定时间,以使其他任务可以占用CPU } } 将ucos进行移植,进行两个任务切换。 7.7 实验结果总结 两个任务在超级终端进行正常切换,成功实现了ucosII在Arm7上的移植。 7.8 心得体会 通过本次实验,对系统移植的原理有了初步了解,对ucosII的运行机理有了更近一步的了解。 8.实验八 8.1 实验名称 各接口模块相互衔接综合实验 8.2 实验目的 回顾前几次试验所用到的知识并综合起来,完成包含至少五个模块具有一定功能的设计。 8.3 实验环境 硬件:ARM嵌入式开发平台、用于 ARM7TDMI的JTAG 仿真器、PC机Pentium100 以上、示波器。 软件:PC机操作系统win98、Win2000 或WinXP、ARM SDT 2.51或ADS1.2集成开发环 境、仿真器驱动程序、超级终端通讯程序。 8.4 实验内容及要求 回顾串口、键盘、LED接口、A/D、电机转动、定时器中断、LCD接口及触摸屏驱动控制等接口模块驱动设计及开发方法。综合应用以上全部或者部分模块,实现一个嵌入式综合应用系统,要求至少用到8个模块中的5个。尽量使综合应用系统具备合理的功能。 8.5 实验设计与实验步骤 本实验为一综合实验旨在设计一个计算器雏形,具有计算器的基本功能,能够用小键盘输入数据,用数码管显示数据,并且可以用显示屏显示,支持显示屏输入。本实验用了数码管,触摸屏,串口,小键盘等硬件。主要结合实验 三、实验五两个实验。1.触摸板的显示输入键模块,实现方法为用像素点点亮指定区域像素。 1)设计页眉页脚 2)纵向平分画出五条白条 3)横向平分画出四条白条 2.计算器主要模块,主要实现计算器的运算以及显示功能: 1)键盘映射表: 修改键盘映射表与小键盘上的值一致,键盘映射表在KeyBoard.c文件中。2)数码管显示子模块: 首先使zlg7289占有同步串口,延时,然后显示个位,之后判断显示的数字为几位,分别编码显示各个位,此部分可以用else语句实现。 3)计算器运算模块: 每当输入一个数字,数码管原先的数字就得向左移动新数字在最后一位显示,将原先所得数值*10再加上新值,最后显示。 8.6 实验过程与分析 1.触摸板显示模块: 1)设计页眉页脚 for(k=0;k<5;k++)//页眉 for(j=10;j<310;j++) LCDBuffer[k][j]=jcolor; for(k=235;k<240;k++)//页脚 for(j=10;j<310;j++) LCDBuffer[k][j]=jcolor; 2)纵向平分画出五条白条 for(k=35;k<37;k++)//1 for(j=10;j<310;j++) LCDBuffer[k][j]=jcolor; ...... for(k=233;k<235;k++)//5 for(j=10;j<310;j++) LCDBuffer[k][j]=jcolor; 3)纵向平分画出四条白条 for(k=37;k<233;k++)//1 for(j=68;j<70;j++) LCDBuffer[k][j]=jcolor;...... for(k=37;k<183;k++)//4 for(j=248;j<250;j++) LCDBuffer[k][j]=jcolor;2.计算模块 1)键盘映射表: 键盘映射表修改为: unsigned int KeyBoard_Map[]={ 7,4,1,0,10,0,0,0,8,5,2,0,11,0,0,0,9,6,3,16,12,13,0,0,14,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 };//64,键值映射表 2)数码管显示子模块: Zlg7289_Reset(); Delay(1); ZLG7289_ENABLE();//使zlg7289占有同步串口 Delay(5);//延时 WriteSDIO(ZLG7289_CMD_DATA0|0);//数码管以方式0译码,第一个数码管亮 WriteSDIO(key%10);//显示个位 Delay(1);//延时 if(key>9999999) { WriteSDIO(ZLG7289_CMD_DATA0|7); WriteSDIO((unsigned char)(key/10000000)); Delay(1); „„„ WriteSDIO(ZLG7289_CMD_DATA0|1);//发送十位数据 WriteSDIO((unsigned char)(key/10%10)); Delay(1); WriteSDIO(ZLG7289_CMD_HIDE);//使一、二两位数码管显示 WriteSDIO(255); } ZLG7289_DISABLE();//zlg7289放弃同步串口控制权 3)计算器运算模块主要代码: m=key; LEDshow(key); Delay(5000);„„ m=key+m*10;LEDshow(m); if(globlekey==14){ //加法模块 //add(); Delay(5000); num2 = GetNum(); num = num + num2; LEDshow(num);} „„„ else if(globlekey == 15){ //等于模块 //equal();Delay(5000); LEDshow(num); num2 = GetNum();} 8.7 实验结果总结 进入主程序可以通过按键进入不同的循环,计算器部分可以实现九位数以内整数的加减乘除运算,用数码管显示运算结果及数据。此实验只是一个雏形显示器模块的显示以及输入都未有实现,期待后续开发。 8.8 心得体会 通过本次试验将前几次实验的成果综合到一起,实现了计算器的一个雏形,为接下来的课程设计打下了基础。 9.实验总结与心得体会 通过前几次实验深入了解了串口,数码管,触摸屏,电动机,小键盘等各个硬件的使用方法,知道了arm嵌入式的主要设计方法,其中最感兴趣的是键盘实验那一块,我们当初的设想是设计一款计算器,可以使其读数发出声音,但是由于实验八时间紧迫,未能完成这部分功能,仅能实现基本的运算,不支持浮点运算,但是课程设计时间充分,我相信我和我的队友会做出一个比较好的作品。 嵌入式系统实验报告 学 号: 姓 名: 班 级:13电子信息工程 指导老师: 苏州大学 电子信息学院 2016年12月 实验一:一个灯的闪烁 1、实验要求 实现PF6-10端口所连接的任意一个LED灯点亮 2、电路原理图 图1 LED灯硬件连接图 3、软件分析 RCC_Configuration();/* 配置系统时钟 */ GPIO_Configuration(); /* 配置GPIO IO口初始化 */ for(;;) { GPIOF->ODR = 0xfcff; /* PF8=0--> 点亮D3 */ Delay(1000000); GPIOF->ODR = 0xffff; /* PF8=1--> 熄灭D3 */ Delay(1000000); 4、实验现象 通过对GPIOF8的操作,可以使LED3闪烁 5、实验总结 这是第一次使用STM32开发板,主要内容是对IO端口进行配置,点亮与IO端口相连接的LED灯,闪烁周期为2S。通过本实验对STM32开发板的硬件原理有了初步了解。 实验二:流水灯 1、实验要求 实现PF6-10端口所连接的5个LED灯顺次亮灭 2、电路原理图 图1 流水灯硬件连接图 3、软件分析 int main(void){ RCC_Configuration();/* 配置系统时钟 */ GPIO_Configuration();/* 配置GPIO IO口初始化 */ for(;;) { GPIOF->ODR = 0xffbf; /* PF6=0--> 点亮LED1 */ Delay(5000000);GPIOF->ODR = 0xff7f; } /* PF7=0--> 点亮LED2 */ Delay(5000000); GPIOF->ODR = 0xfeff; /* PF8=0--> 点亮LED3 */ Delay(5000000); GPIOF->ODR = 0xfdff; /* PF9=0--> 点亮LED4 */ Delay(5000000); GPIOF->ODR = 0xfbff; /* PF10=0--> 点亮LED5 */ } 4、实验现象 LED1~LED5依次点亮,亮灭的时间间隔都为1S。 5、实验总结 本次实验对STM32开发板的GPIO端口进行进一步学习,通过程序可以实现流水灯的闪烁。 实验三:单级外部中断 1、实验要求 按下某个按键,触发中断,中断服务程序改变LED灯状态 2、电路原理图 图3 SW1硬件原理图 3、软件分析 int main() { RCC_Configuration(); GPIO_Configuration(); GPIO_Write(GPIOF,0xffff);Delay(5000); while(1) { } /* 配置系统时钟 */ /* IO口初始化 */ /* 全灭 */ if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_8)==0)/* 如果SW1 PA8=0 */ { GPIO_SetBits(GPIOF, GPIO_Pin_6); /* LED1点亮 */ Delay(0x1FFFFF); GPIO_ResetBits(GPIOF, GPIO_Pin_6); /* LED1 熄灭 */ Delay(0x1FFFFF);} } 4、实验现象 原来5个LED灯都处于熄灭状态,按下SW1,触发中断程序,LED1点亮。 5、实验总结 通过本次实验,可以对某一状态通过外部中断,改变其当前状态。 实验四:多中断嵌套 1、实验要求 按下某个按键,触发中断,中断服务程序改变LED灯状态 2、电路原理图 图4 SW1,SW2,SW3硬件原理图 3、软件分析 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQChannel; //设定中断源为PA0 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;//中断占优先级为0 NVIC_InitStructure.NVIC_IRQChannel = EXTI3_IRQChannel; //设定中断源为PD3 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;//中断占优先级为1 NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQChannel;//设定中断源为PA8 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;//中断占优先级为2 void EXTI0_IRQHandler(void){ int i=0;if(EXTI_GetITStatus(EXTI_Line0)!= RESET){ for(i=0;i<10;i++){ GPIO_Write(GPIOF,0xffff); GPIO_SetBits(GPIOF, GPIO_Pin_6);/* LED1 点亮 */ Delay(0x5fFFFF);GPIO_ResetBits(GPIOF, GPIO_Pin_6);/* LED1 熄灭 */ Delay(0x5fFFFF);EXTI_ClearITPendingBit(EXTI_Line0);} } } void EXTI3_IRQHandler(void)if(EXTI_GetITStatus(EXTI_Line3)!= RESET){ { int i=0;for(i=0;i<10;i++){ GPIO_Write(GPIOF,0xffff); GPIO_SetBits(GPIOF, GPIO_Pin_7);/* LED2 点亮 */ Delay(0x5fFFFF);GPIO_ResetBits(GPIOF, GPIO_Pin_7);/* LED2 熄灭 */ Delay(0x5fFFFF);EXTI_ClearITPendingBit(EXTI_Line3);} } } void EXTI9_5_IRQHandler(void){ int i=0; if(EXTI_GetITStatus(EXTI_Line8)!= RESET){ for(i=0;i<10;i++){ GPIO_Write(GPIOF,0xffff); GPIO_SetBits(GPIOF, GPIO_Pin_8);/* LED3 点亮 */ Delay(0x5fFFFF); GPIO_ResetBits(GPIOF, GPIO_Pin_8);/* LED3 熄灭 */ Delay(0x5fFFFF); EXTI_ClearITPendingBit(EXTI_Line8);} } } 4、实验现象 中断优先级从高到低依次为:SW3,SW2,SW1 原来5个LED灯都处于熄灭状态,按下SW1,LED3应该闪烁10次,当其闪烁5次后按下SW2,LED2也应该闪烁10次,当其闪烁4次后按下SW3,LED1也应该闪烁10次,则当LED1闪烁完10次后,LED2继续闪烁6次,之后LED1继续闪烁5次。 5、实验总结 通过本次实验,可以对LED状态实行中断嵌套,由以上实验现象,得出以下结论:高中断优先级可以打断低优先级,中断系统正在执行一个中断服务时,有另一个优先级更高的中断提出中断请求,这时会暂时终止当前正在执行的级别较低的中断源的服务程序,去处理级别更高的中断源,待处理完毕,再返回到被中断了的中断服务程序继续执行,反之,低中断优先级不可以打断高优先级。 实验五:TIM2的基本应用 1、实验要求 TIM2定时器将LED灯定时点亮和熄灭一定的时间 2、电路原理图 3、软件分析 TIM_Cmd(TIM2, ENABLE); /* TIM2 enable counter */ TIM_TimeBaseStructure.TIM_Period = 1999; TIM_TimeBaseStructure.TIM_Prescaler = 35999; //定时时间为1s void TIM2_IRQHandler(void){ TIM_ClearITPendingBit(TIM2, TIM_IT_Update); GPIO_WriteBit(GPIOF, GPIO_Pin_6,(BitAction)(1-GPIO_ReadOutputDataBit(GPIOF, GPIO_Pin_6)));} 4、实验现象 LED1灯按照1S的定时时间不断闪烁 5、实验总结 通过本次实验,可以实现对LED灯进行定时控制其闪烁,而不需要延时函数控制了,定时时间较为精准。实验六:TIM2,TIM3,TIM4多定时器的应用 1、实验要求 利用TIM2,TIM3,TIM4定时器使LED灯以不同的频率闪烁 2、电路原理图 3、软件分析 NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQChannel;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQChannel;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;NVIC_InitStructure.NVIC_IRQChannel = TIM4_IRQChannel;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;此处比上一个实验增加了2个定时器,同时又增加了一个优先级 4、实验现象 中断优先级从高到低依次为:TIM2,TIM3,TIM4 首先LED1以1S的定时时间闪烁5次,之后LED2以2S的定时时间闪烁5次,最后LED3以3S的定时时间闪烁5次 5、实验总结 利用定时器可以同时使LED灯按照不同的频率闪烁,但是为了现象明显,可以加一个优 先级,分别观察现象。 实验七:串口USART1读取CPU的ID号 1、实验要求 通过USART1读取 CPU 的 96 bit ID 2、电路原理图 图 开发板USART原理图 3、软件分析 void Get_ChipID(void)/* 获取芯片ID */ { ChipUniqueID[0] = *(u32 *)(0X1FFFF7F0);/* 高字节 */ ChipUniqueID[1] = *(u32 *)(0X1FFFF7EC); ChipUniqueID[2] = *(u32 *)(0X1FFFF7E8);/* 低字节 */ } void USART_Configuration(void){ USART_InitTypeDef USART_InitStructure; USART_InitStructure.USART_BaudRate = 115200; USART_InitStructure.USART_WordLength = USART_WordLength_8b; USART_InitStructure.USART_StopBits = USART_StopBits_1; USART_InitStructure.USART_Parity = USART_Parity_No; USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; USART_Init(USART1, &USART_InitStructure); USART_ITConfig(USART1, USART_IT_TXE, ENABLE); USART_ITConfig(USART1, USART_IT_RXNE, ENABLE); USART_ClearFlag(USART1, USART_FLAG_TC); USART_Cmd(USART1, ENABLE); /* Enable USART1 */ } 4、实验现象 PA9连接的是USART1 Tx,PA10连接的是USART1 Rx,再通过串口调试助手就可 以在电脑上面显示出CPU的ID以及flash容量大小。 5、实验总结 本次实验实现了串口和PC机的传输,可以通过USART1将CPU的ID在电脑上显示出来。 实验八:异步通信USART2的重映射 1、实验要求 实现异步通信USART2的重映射,将数据传送到PC机上 2、电路原理图 图 开发板USART原理图 3、软件分析 void GPIO_Configuration() /* IO口初始化 */ { GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; /* USART2 Tx--> PD05 */ GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;/* PD05--> JP7 WR */ GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOD, &GPIO_InitStructure); GPIO_PinRemapConfig(GPIO_Remap_USART2, ENABLE);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6; /* USART2 Rx--> PD06 */ GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOD, &GPIO_InitStructure);GPIO_PinRemapConfig(GPIO_Remap_USART2, ENABLE);} 该程序将USART2重映射到PD05,PD06引脚 4、实验现象 PD05连接的是USART2 Tx,PD06连接的是USART2 Rx,通过串口调试助手就可以在电脑上面显示Program Running! 5、实验总结 通过本次实验,可以实现对异步通信USART2的重映射,再通过串口调试助手在电脑上显示出来。 嵌入式系统设计实验报告 班 级: 学 号: 姓 名: 成 绩: 指导教师: 1.实验一 1.1 实验名称 博创UP-3000实验台基本结构及使用方法 1.2 实验目的 1.学习嵌入式系统开发流程。 2.熟悉UP-net3000实验平台的核心硬件电路和外设。 3.增加对各个外设的了解,为今后各个接口实验打下基础。 1.3 实验环境 博创UP-NETARM3000 嵌入式开发平台 1.4 实验内容及要求 (1)嵌入式系统开发流程概述 (2)熟悉UP-net3000实验平台的核心硬件电路和外设(3)ARM JTAG的安装与使用 (4)通过操作系统自带的通讯软件超级终端,检验各个外设的工作状态(5)通过本次课程对各个外设的了解,为今后各个接口实验打下基础 1.5 实验设计与实验步骤 1.硬件安装 2.软件安装 (1)超级终端: 运行Windows 系统下的超级终端(HyperTerminal)应用程序,新建一个通信终端;在接下来的对话框中选择 ARM开发平台实际连接的PC机串口;完成新建超级终端的设置以后,可以选择超级终端文件菜单中的保存,将当前设置保存为一个特定超级终端到桌面上,以备后用。 (2)JTAG 驱动程序的安装: 执行armJtag目录下armJtagSetup.exe程序,选择安装目录,安装 JTAG 软件。 1.6 实验过程与分析 (1)了解嵌入式系统开发流程(2)对硬件的安装(3)对软件的安装 1.7 实验结果总结 通过本次实验对嵌入式系统开发流程进行了了解,并且对硬件环境和软件环境进行了安装配置,通过本次实验对以后的接口实验打了基础。 1.8 心得体会 通过本次实验对嵌入式实验有了初步的了解,对基本开发流程也有了初步的了解。 2.实验二 2.1 实验名称 ADS1.2软件开发环境使用方法 2.2 实验目的 熟悉ADS1.2开发环境,学会 ARM仿真器的使用。使用 ADS 编译、下载、调试并跟踪一段已有的程序,了解嵌入式开发的基本思想和过程。 2.3 实验环境 (1)ADS1.2开发环境 (2)博创UP-NETARM3000 嵌入式开发平台(3)PC(4)串口线 2.4 实验内容及要求 本次实验使用ADS 集成开发环境,新建一个简单的工程文件,并编译这个工程文件。学习ARM仿真器的使用和开发环境的设置。下载已经编译好的文件到嵌入式控制器中运行。学会在程序中设置断点,观察系统内存和变量,为调试应用程序打下基础。 2.5 实验设计与实验步骤 (1)运行ADS1.2开发环境(2)新建工程文件(3)编译工程文件 (4)下载编译好的文件到嵌入式控制器中运行 2.6 实验过程与分析 (1)实现Hello World! 最终在输出了Hello World(2)编程实现ARM 和计算机之间的串行通讯 实现了串口通信,用ARM监视串口,接收到的字符串由ARM通过串口发送给超级终端,最终在超级终端上显示了按下的键。学习了串行通讯原理,了解串行通讯控制器,阅读ARM 芯片文档,掌握ARM 的UART相关寄存器的功能,熟悉ARM 系统硬件的UART 相关接口。 2.7 实验结果总结 对ADS 1.2开发环境使用和AXD Debugger使用方法有了初步的了解,基本成功运行了编译好的工程文件。 2.8 心得体会 学习了ADS1.2开发环境的使用方法和调试方法。使用 ADS 编译、下载、调试并跟踪一段已有的程序,了解了嵌入式开发的基本思想和过程。 3.实验三 3.1 实验名称 键盘控制方法及LED驱动设计 3.2 实验目的 熟悉ZLG7289芯片的内部结构,掌握用ZLG7289驱动键盘和LED的方法,掌握ARM汇编语言和C语言的编程方法编写出一段程序,要求能在LED上显示出小键盘上按下的4位数字。 3.3 实验环境 (1)ADS1.2开发环境 (2)博创UP-NETARM3000 嵌入式开发平台(3)PC(4)串口线 3.4 实验内容及要求 通过ZLG7289芯片驱动17键的键盘和8个共阴极LED,将按键值在LED 上显示出来。 3.5 实验设计与实验步骤 (1)新建工程,将“Exp3键盘及LED 驱动实验”中的文件添加到工程。(2)定义ZLG7289 寄存器(3)编写ZLG7289 驱动函数(4)定义键盘映射表(5)定义键值读取函数 (6)编写主函数 3.6 实验过程与分析 (1)定义ZLG7289寄存器 #define ZLG7289_CS #define ZLG7289_KEY #define ZLG7289_ENABLE()do{ZLG7289SIOBand=rSBRDR;ZLG7289SIOCtrl=rSIOCON;rSIOCON=0x31;rSBRDR=0xff;rPDATB&=(~ZLG7289_CS);}while(0)#define ZLG7289_DISABLE()do{rPDATB|=ZLG7289_CS;rSBRDR=ZLG7289SIOBand;rSIOCON=ZLG7289SIOCtrl;}while(0)(2)主函数中需要在开始初始化zlg7289。编写驱动和键值映射之后,在一个循环里面从键盘中读取按键的号码,根据键值映射读出按键的值。然后在主函数中,将读出的按键值在数码管上显示出来。 (3)Main函数的主要功能部分,GetKey()函数得到按键值是调用zlg7289获取键盘事件和核心。 3.7 实验结果总结 通过实验最终LED灯上能显示数字,即实现了通过键值控制LED灯 3.8 心得体会 通过本次实验对ZLG7289芯片的内部结构有了更进一步的了解,对ZLG7289驱动键盘和LED的方法也更进一步的进行了学习。 4.实验四 4.1 实验名称 电机转动控制及中断实验 4.2 实验目的 (1)熟悉ARM本身自带的六路即三对PWM,掌握相应寄存器的配置 (2)编程实现 ARM系统的PWM 输出和I/O 输出,前者用于控制直流电机,后者用于控制步进电机。 (3)了解直流电机和步进电机的工作原理,学会用软件的方法实现步进电机的脉冲分配,即用软件的方法代替硬件的脉冲分配器。 (4)掌握带有PWM 和I/O 的CPU 编程实现其相应功能的主要方法。 4.3 实验环境 (1)ADS1.2开发环境 (2)博创UP-NETARM3000 嵌入式开发平台(3)PC(4)串口线 4.4 实验内容及要求 学习步进电机和直流电机的工作原理,了解实现两个电机转动对于系统的软件和硬件要求。学习ARM知识,掌握PWM 的生成方法,同时也要掌握I/O 的控制方法。 (1)编程实现ARM芯片的一对PWM 输出用于控制直流电机的转动,通过A/D 旋钮控制其正反转及转速 (2)编程实现ARM的四路I/O 通道实现环形脉冲分配用于控制步进电机的转动,通过A/D 旋钮转角控制步进电机的转角。 (3)通过超级终端来控制直流电机与步进电机的切换。4.5 实验设计与实验步骤 (1)新建工程,将“电机转动控制实验”中的文件添加到工程(2)编写直流电机初始化数(MotorCtrl.c)(3)控制直流电机与步进电机 4.6 实验过程与分析 (1)通过把从串口中得到控制信息的代码修改成从zlg7289芯片中读取小键盘信息,从而利用试验台的小键盘来控制步进电机和直流电机的切换 (2)A/D转换可以把电信号转换成数字信号来控制电机的转速。for(;;) { loop: //if((rUTRSTAT0 & 0x1))//有输入,则返回 if(rPDATG&ZLG7289_KEY)//17键小键盘控制电机 { *Revdata=RdURXH0(); goto begin; } Delay(10);ADData=GetADresult(0); if(abs(lastADData-ADData)<20) goto loop;Delay(10);count=-(ADData-lastADData)*3; //(ADData-lastADData)*270/1024为ad旋钮转过的角度,360/512为步距角,//由于接了1/8减速器,两者之商再乘以8为步进电机相应转过的角度 if(count>=0) {//转角大于零 for(j=0;j { for(i=0;i<=7;i++) { SETEXIOBITMASK(stepdata[i], 0xf0); Delay(200); } } } else {//转角小于零 count=-count; for(j=0;j { for(i=7;i>=0;i--) { SETEXIOBITMASK(stepdata[i], 0xf0); Delay(200); } } } lastADData=ADData; } } (3)S3C44B0X 具有6 个16bit定时器,每个定时器可以基于中断模式或 DMA模式运行。在定时中断服务程序中写需要定时处理的程序,每隔一段时间就会运行一次。 4.7 实验结果总结 利用A/D转换器实现了对直流电机和步进电机的控制,利用实验设备上自带的小键盘实现了A/D转换器对两个电机控制的切换。 4.8 心得体会 通过本次实验,熟悉了ARM自带的六路(三对)PWM,并对直流电机和步进电机的工作原理有了进一步的了解。 5.实验五 5.1 实验名称 LCD驱动及触摸屏实验 5.2 实验目的 掌握LCD显示原理及显示驱动的嵌入式系统编程实现方法;学习基于ARM的LCD 显示驱动控制方法,通过对ARM 内置的LCD 控制器进行编程实现驱动LCD显示屏;学习触摸屏基本原理,理解触摸屏的输出标定以及与LCD 显示器配合的过程,编程对触摸屏进行控制。 5.3 实验环境 (1)ADS1.2开发环境(2)博创UP-NETARM3000 嵌入式开发平台(3)PC(4)串口线 5.4 实验内容及要求 (1)学习LCD显示器的基本原理,理解其驱动控制方法(2)编程对触摸屏进行控制,实现: 1.点击触摸屏上两点后,两点之间画出一条直线。2.点击触摸屏并在其上移动,显示移动轨迹 (3)编程实现总线方式驱动模块的LCD和ARM内置的LCD控制器来驱动LCD 5.5 实验设计与实验步骤 (1)新建工程 (2)定义有关常量与宏 #define LCDWIDTH 320 #define LCDHEIGHT 240 U32* pLCDBuffer16=(U32*)0xc000000;// 一级缓存指针 U32 LCDBuffer[LCDHEIGHT][LCDWIDTH];//二级缓存(3)编写LCD 初始化函数(4)编写LCD 刷新函数(5)编写主函数 5.6 实验过程与分析 (1)通过不断刷新的方式获得LCD液晶屏幕的动画。即刷新函数将二级缓存LCDBuffer 的数据由32 位彩色图形信息转换成8 位256 色的图形信息,然后放到pLCDBuffer16指向的一级缓存。 (2)触摸屏的先得到触屏输出的电信号的值,然后转换为实际的屏幕坐标,再根据动作来决定如何处理缓存信息,刷新LCD。 LCD二级缓存矩阵: for(i=0;i<9;i++){ switch(i){ case 0: jcolor=0x00000000;// 黑色 break;case 1: jcolor=0x000000e0;// 红色 break;case 2: jcolor=0x0000d0e0;// 橙色 break;case 3: jcolor=0x0000e0e0;// 黄 break;case 4: jcolor=0x0000e000;// 绿色 break;case 5: jcolor=0x00e0e000;// 青色 break;case 6: jcolor=0x00e00000;// 蓝色 break;case 7: jcolor=0x00e000e0;// 紫色 break;case 8: jcolor=0x00e0e0e0;// 白色 break;} for(k=0;k<240;k++)for(j=i*32;j 5.7 实验结果总结 本次实验由于坐标设定的问题并没有成功实现触摸痕迹的显示,但在测试过程中,在触摸屏上点击或移动时会在超级终端上有显示。 5.8 心得体会 虽然本次实验不太成功实现,但对LCD屏幕和触摸屏的工作原理有了进一步的了解,更好的掌握了LCD显示原理及显示驱动的嵌入式系统编程实现方法。 6.实验六 6.1 实验名称 ucos-II裁剪实验 6.2 实验目的 掌握μcos-II裁剪的基本原理与嵌入式编程实现方法;学习如何根据具体情况对μcos-II操作系统进行裁剪,从而得到即满足需要,又非常紧凑的应用软件系统。 6.3 实验环境 (1)ADS1.2开发环境 (2)博创UP-NETARM3000 嵌入式开发平台(3)PC(4)串口线 6.4 实验内容及要求 (1)通过对μcos-II配置文件(OS_CFG.H)中相关的配置常量进行设置,实现对μcos-II的裁剪 (2)给出裁剪的详细过程与裁剪结果说明,并生成裁剪后的操作系统文件。 6.5 实验设计与实验步骤 (1)新建工程,将ucosII移植的文件添加到工程中。 (2)编辑os_cfg.h头文件。 (3)将裁减后的系统所需用到的功能宏定义配置常量置为1,实现系统的裁减。(4)编译生成新的ucosII系统。 6.6 实验过程与分析 (1)配置功能常量,将裁剪后的系统需要用到的功能配置常量设为1(2)裁减信号量数据(3)配置数据结构 OS_MAX_TASKS,若程序中用到了三个任务,则该值的最小值为3 OS_LOWEST_PRIO设置程序中最低任务的优先级 OS_TASK_IDLE_STK_SIZE设置UC/OS操作系统中空闲任务堆栈的容量 OS_TASK_STAT_STK_SIZE设定统计任务的任务堆栈容量 6.7 实验结果总结 通过本次实验,裁减了系统,修改了某些数据结构相关的常量,节省了内存空间 6.8 心得体会 通过本次实验主要学习到了如何根据具体情况对μcos-II操作系统进行裁剪,从而得到即满足需要,又非常紧凑的应用软件系统。 7.实验七 7.1 实验名称 ucos-II移植实验 7.2 实验目的 了解µC/OS-II 内核的主要结构,掌握ARM的C语言和汇编语言的编程方法;了解ARM7处理器结构;掌握将µC/OS-II 内核移植到ARM 7 处理器上的基本原理与嵌入式编程实现方法 7.3 实验环境 (1)ADS1.2开发环境 (2)博创UP-NETARM3000 嵌入式开发平台(3)PC(4)串口线 7.4 实验内容及要求 (1)将µC/OS-II 内核移植到ARM7 微处理器S3C44B0上。(2)编写两个简单任务,在超级终端上观察两个任务的切换。 7.5 实验设计与实验步骤 (1)新建工程 (2)该实验的文件分为两类,其一是 STARTUP目录下的系统初始化、配置等文件,其二是uCOS-II 的全部源码,arch 目录下的3 个文件是和处理器架构相关的3.定义驱动函数(tchscr.c)(3)设置os_cpu.h 中与处理器和编译器相关的代码(4)用C 语言编写6 个操作系统相关的函数(5)用汇编语言编写4 个与处理器相关的函数 (6)编写一个简单的多任务程序来测试一下移植是否成功(7)编译并下载移植后的uCOS-II 7.6 实验过程与分析 (1)首先需要对相关寄存器做详细的设定(2)用汇编语言编写与处理器相关的函数(3)用分时的方法同时运行两个任务 OS_STK TaskName_Stack[STACKSIZE]={0, };//任务堆栈 void TaskName(void *Id);//任务函数 #define TaskName_Prio N //任务优先级 在main()函数中调用OSStart()函数之前用下列语句创建任务: OSTaskCreate(TaskName,(void*)0,(OS_STK*)&TaskName_Stack[STACKSIZE-1], TaskName_Prio);OSTaskCreate()函数的原型是: INT8U OSTaskCreate(void(*task)(void *pd), void *p_arg, OS_STK *ptos, INT8U prio);(4)编写任务函数 7.7 实验结果总结 通过实验达到了ucosII系统移植的目的,并编写了一个简单的多任务程序,分时运行。 7.8 心得体会 通过本次实验了解了µC/OS-II 内核的主要结构,掌握了ARM的C语言和汇编语言的编程方法。 8.实验八 8.1 实验名称 各接口模块相互衔接综合实验 8.2 实验目的 (1)回顾串口、键盘、LED接口、A/D、电机转动、定时器中断、LCD接口及触摸屏驱动控制等接口模块驱动设计及开发方法 (2)综合应用以上全部或者部分模块,实现一个嵌入式综合应用系统,要求至少用到8个模块中的5个 8.3 实验环境 (1)ADS1.2开发环境 (2)博创UP-NETARM3000 嵌入式开发平台(3)PC(4)串口线 8.4 实验内容及要求 (1)综合应用串口、键盘、LED接口、A/D、电机转动、定时器中断、LCD接口及触摸屏驱动控制等全部或者部分模块(2)实现一个嵌入式综合应用系统,要求至少用到8个模块中的5个,尽量使综合应用系统具备合理的功能。 8.5 实验设计与实验步骤 (1)运行ADS1.2开发环境(2)新建工程文件 (3)将综合实验中用到的文件放到这个工程文件中(4)下载编译好的文件到嵌入式控制器中运行 8.6 实验过程与分析 (1)本次实验设计主要是通过中断来实现,设定了flag=1,2,3,4,5,6六个标志位,对应不同的键值来实现功能的切换 (2)通过num/lock键来控制直流电机(3)通过“/”键来控制步进电机 (4)通过“*”键来控制屏输出“hello world”(5)通过“+”键来实现LED灯的计时 (6)通过“DEL”键来实现清屏和LED灯的清除 (7)通过“enter”键来进入到键值控制LED显示的功能 8.7 实验结果总结 实验最终能实现5个功能的切换,但不足的是未涉及到触摸屏的设计,并且最后的键值控制LED灯不能实现正常的中断跳转。 8.8 心得体会 通过本次综合性的实验来综合之前做的串口、键盘、LED接口、A/D、电机转动、定时器中断、LCD接口及触摸屏驱动控制实验,回顾了之前的知识,对整体的运用有了进一步的了解,但是实验结果仍有很多的不足,需要改进。 9.实验总结与心得体会 通过之前的串口、键盘、LED接口、A/D、电机转动、定时器中断、LCD接口及触摸屏驱动控制实验这7个小模块的实验,对嵌入式系统的开发流程有了基本的了解,熟悉了博创UP-NETARM3000实验台和ADS1.2软件的实验环境,同时也掌握了各模块功能实现功能的基本原理。在最后的综合性实验中,通过对以上知识的掌握和理解,进一步的对以上知识进行了加深和巩固,虽然有几次实验实现的实验结果并不是很成功,但还是达到了学习和理解的效果。 广西工学院鹿山学院 实 验 报 告 课程名称: 嵌入式系统 指导教师: 刘瑞琪 班 级: 自动化101 姓 名: 杨杰 学 号: 20102787 成绩评定: 指导教师签字: 2013年5月25日 实验一 简单的程序 一 实验目的:、动手实践一个简单的字符型设备驱动程序。、学习Linux 驱动程序构架。、学习在应用程序中调用驱动。 二 实验内容: 编写简单的字符型设备驱动程序。编写相应的应用程序。 三 实验设备:、一套S3C2410RP 嵌入式实验箱。、安装Redhat9的宿主PC机,并且配置好 ARM Linux 的开发环境。 四 实验步骤 实验二 CPU GPIO 驱动程序及测试程序 一、实验目的: 编写第一个针对实际硬件的驱动程序,进一步了解驱动程序构架。 二、实验内容:、编写S3C2410 GPIO驱动程序。、编写S3C2410 GPIO应用程序。、在 LINUX系统中插入自己的驱动程序,调用它。实现用 CPU GPIO 控制外部LED,利用S3C2410 核心板上的 LED 验证我们的工作。 三、实验设备、一套S3C2410RP 嵌入式实验箱。、安装Redhat9的宿主PC机,并且配置好 ARM Linux 的开发环境。 四、实验步骤 1、复制Experiment_KeyHello_driverapl_test文件下的simple_test_driver.c文件到Experiment_KeyGPIO文件夹下,将文件名更改为test.c。 2、打开test.c,在else语句后更改函数语句如下: 3、复制Experiment_KeyADapl_test文件夹下的Makefile到Experiment_KeyGPIO文件夹下,打开并将中的ADC删除。 4、打开Experiment_KeyGPIOdriver文件下的gpio_led.c文件。 5、在ssize_t SIMPLE_GPIO_LED_ioctl函数下添加如下语句: if(cmd==0)GPBDAT &= ~(0xf<<5); if(cmd==1)GPBDAT |=(0xf<<5);如下图所示: 6、在int __init HW_GPIO_LED_CTL_init函数下屏蔽for循环,如下图所示: 保存并关闭。 7、打开终端,并编译test.c文件和gpio_led.c文件。 8、重新打开一个终端,并按步骤输入如下语句: 9、依次输入如下语句: 1、cd..2、ls 3、mknod /dev/hello_ctl c 97 1 4、./test 实验三 中断实验及LED显示 一、实验目的: 学习Linux 系统是如何处理中断。 二、实验内容: 编写获取和处理外中断的驱动程序。 三、实验设备:、一套S3C2410RP 嵌入式实验箱。、安装Redhat9的宿主PC机,并且配置好 ARM Linux 的开发环境。 四、实验步骤 1、打开Experiment_KeyGPIOdriver文件下的gpio_led.c文件。 2、在ssize_t SIMPLE_GPIO_LED_ioctl函数下添加如下语句: if(cmd==0)GPBDAT &= ~(0xf<<5); if(cmd==1)GPBDAT |=(0xf<<5);如下图所示: 3、在int __init HW_GPIO_LED_CTL_init函数下屏蔽for循环,如下图所示: 保存并关闭。 4、打开Experiment_KeyInterruptdriver下的Interrupt.c文件,并在其interrupt函数下添加for语句,如下图所示: 5、打开终端,并编译Interrupt.c文件和gpio_led.c文件。 6、重新打开一个终端,并按步骤输入如下语句: 7、依次输入如下语句: 1、cd /mnt/2410RP_linux/Experiment_Key/Interrupt/driver 2、ls 3、insmod Interrupt.o 实验四 数码管显示实验 一、实验目的: 学习串并转换的相关知识,并编写驱动程序。 二、实验内容: 编写针对zlg7289A 的驱动程序。 三、实验设备:、一套S3C2410RP 嵌入式实验箱。、安装Redhat9的宿主PC机,并且配置好 ARM Linux 的开发环境。 四、实验步骤 1、打开Experiment_KeySpi_leddriver文件夹下的spi_led.c 2、并在spi_ledInit函数下添加如下语句: 保存并关闭。 3、打开终端,并编译spi_led文件。 4、重新打开一个终端,并输入如下语句: 实验五 AD 驱动实验 一 实验目的:、了解模数转换的基本原理;、掌握模数转换的编程方法。 二 实验内容:、编程对模拟量输入进行采集和转换,并将结果显示在超级终端上。、通过改变模拟量输入,观察显示结果。 三 实验设备:、一套S3C2410RP 嵌入式实验箱。、安装Redhat9的宿主PC机,并且配置好 ARM Linux 的开发环境。 四 实验步骤 1、在spi_led..c中的simpled ioctl中加入以下程序 2、在testADC中复制以下程序并修改如下 3、挂载程序 cd /mnt/2410RP_linux/Experiment_Key/spi_led/driver ls insmod spi_led.o cd /mnt/2410RP_linux/Experiment_Key/ad/driver insmod adc.o cd /mnt/2410RP_linux/Experiment_Key/ad/apl_test ls mknod /dev/spi c 104 1 ls ./testADC 嵌入式系统设计实验报告 班 级:学 号:姓 名:成 绩:指导教师: 20110612 2011061208 李晓虹 武俊鹏、刘书勇 1.实验一 1.1 实验名称 博创UP-3000实验台基本结构使用方法 1.2 实验目的 1.熟悉嵌入式系统开发式流程概述。 2.熟悉UP-net3000实验平台的核心硬件电路和外设。3.熟悉ARM JTAG的安装与使用。 1.3 实验环境 硬件:ARM 嵌入式开发平台、用于ARM7TDMI 的JTAG 仿真器、PC 机Pentium100 以 上、串口线。 软件:PC 机操作系统win98、Win2000 或WinXP、ARM SDT 2.51 或ADS1.2 集成开发 环境、仿真器驱动程序、超级终端通讯程序。 1.4 实验内容及要求 1.熟悉嵌入式系统开发式流程概述。 2.熟悉UP-net3000实验平台的核心硬件电路和外设。3.熟悉ARM JTAG的安装与使用。 1.5 实验设计与实验步骤 1.新建超级终端 2.选择ARM 开发实验台串口。 完成新建超级终端的设置以后,可以选择超级终端文件菜单中的保存,将当前设置 3.保存为一个特定超级终端到桌面上,以备后用。用串口线将PC 机串口和平台UART0 正确连接后,就可以在超级终端上看到程序输出的信息了。4.启动开发板,按住任意键,使开发板进入BIOS设置状态。 5.在超级终端的界面上,显示BIOS版本信息,以及相应的测试指令。操作时,要在PC机上输入小写的字母快捷键,进入到相应的功能中去。6.按照超级终端上的提示信息,进行功能的测试。 1.6 实验过程与分析 本次实验操作起来并不困难,因为此次实验属于验证型实验,按照实验资料所给的提示信息,以上面的步骤,即可得到实验的结果。进入到BIOS界面后,按照超级终端上的提示信息来进行功能 1.7 实验结果总结 在实验过程中,我们进行的很顺利,没有遇到什么问题,在超级终端界面,按提示的快 捷键来测试对应的功能。如 e:测试由ZLG7289 驱动的LED 显示,共分3 步,请看超级终端提示按任意键继续,同 时观察LED 的变化,最后返回主菜单。 b:引导FLASH 中的应用程序system.bin。执行该功能将退出BIOS 状态,把控制交给应 用程序,等。 1.8 心得体会 通过此次实验,我对于实验环境有了初步的了解与认识,对于嵌入式也有了更深一步的认识。同时实验过程中,我学会了第一次接触的超级终端的使用方法,并能够熟练掌握,知道其工作的原理。 2.实验二 2.1 实验名称 ADS1.2软件开发环境使用方法 2.2 实验目的 1.熟悉ADS1.2 开发环境,学会ARM 仿真器的使用。 2.使用ADS 编译、下载、调试并跟踪一段已有的程序,了解嵌入式开发的基本思想和过程。 2.3 实验环境 硬件:ARM 嵌入式开发平台、用于ARM7TDMI 的JTAG 仿真器、PC 机Pentium100 以 上、串口线。 软件:PC 机操作系统win98、Win2000 或WinXP、ARM SDT 2.51 或ADS1.2 集成开发 环境、仿真器驱动程序、超级终端通讯程序。 2.4 实验内容及要求 掌握AXD Debugger的使用方法,学习串行通讯原理,了解串行通讯控制器,阅读ARM 芯片文档,掌握ARM 的UART相关寄存器的功能,熟悉ARM 系统硬件的UART 相关接口。编程实现ARM 和计算机之间的串行通讯:ARM 监视串行口;将接收到的字符再发送给串口(计算机与开发板是通过超级终端通讯的);即按PC 键盘通过超级终端发送数据,开发板将接收到的数据再返送给PC,在超级终端上显示。 2.5 实验设计与实验步骤 (1)新建工程,选择菜单中的Project | Add Files 把和工程相关的所有文件包括init和startup 子目录加入到工程中。ADS1.2 不能自动按文件类别对这些文件进行分类,需要的话可以执行菜单Project | Create Group 创建文件组,然后分别将不同类的文件加入到不同的组,以方便管理。(另一种办法是,在新建工程时ADS 创建了和工程同名的目录,在该目录下按类别创建子目录并存放工程文件。选中所有目录拖动到任务栏上的ADS 任务条上,不要松 开鼠标当ADS 窗口恢复后再拖动到工程文件窗口,松开鼠标。这样ADS 将以子目录名建立同名文件组并以此对文件分类。) (2)双击Main.c 打开该文件,可以看到Main()函数的内容如下所示。int main(void){ ARMTargetInit();//开发版初始化 LCD_Init();LCD_ChangeMode(DspTxtMode);//转换LCD 显示模式为文本显示模式 LCD_Cls();//文本模式下清屏命令 LCD_printf(“Hello world!n”);//向液晶屏输出 Uart_Printf(“nHello world!n”);//向串口输出 while(1);}(3)利用上个实验中的通讯软件超级终端来将生成的文件放到嵌入式开发平台中。(4)重启实验台即可看到LCD上显示的“Hello world!” 2.6 实验过程与分析 新建工程,然后将所需的工程文件加载打工程目录下,编译生成system.bin文件,将文件导入到实验台中,然后重启实验台,即可得到实验结果。 2.7 实验结果总结 超级终端输出一些相对应的代码的执行结果。熟悉了ADS1.2 开发环境以及学会了ARM 仿真器的基本使用。使用ADS 编译、下载、调试并跟踪一段已有的程序,并大致了解了嵌入式开发的基本思想和过程。 2.8 心得体会 通过此次实验,我对于嵌入式开发的基本思想有了一定的了解,嵌入式开发采用的是交叉编译环境,所以在一些方面会有所限制。对于初学者来说,通过一两次实验结果的演示就能够对实验台有深入的了解不可能的,所以在后续的实验中,我要好好努力,认真做好课程实验为后续的课程设计实验打下基础。 3.实验三 3.1 实验名称 键盘及LED实验 3.2 实验目的 1.学习键盘及LED 驱动原理。 2.掌握ZLG7289芯片串行接口的使用方法,用ZLG7289芯片驱动17键的键盘和8个共阴极LED。 3.3 实验环境 硬件:ARM 嵌入式开发平台、用于ARM7TDMI 的JTAG 仿真器、PC 机Pentium100 以 上、串口线。 软件:PC 机操作系统win98、Win2000 或WinXP、ARM SDT 2.51 或ADS1.2 集成开 发 环境、仿真器驱动程序、超级终端通讯程序。 3.4 实验内容及要求 编写出一段程序,要求能在LED上显示出小键盘上按下的4位数字。 3.5 实验设计与实验步骤 1.新建工程,将“Exp3 键盘及LED 驱动实验”中的文件添加到工程。2.定义ZLG7289 寄存器(ZLG7289.h)。3.编写ZLG7289 驱动函数(ZLG7289.c)。4.定义键盘映射表:(Keyboard16.c)。5.定义键值读取函数。 6.编写主函数,将按键值在数码管上显示。 3.6 实验过程与分析 此次实验中,我们根据已有实验,进行调试,查看程序的运行效果。根据效果,我们又回到实验代码中,然后对代码进行深入的研究,查看每部分功能所对应的代码,通过不断的调试编译,我们最终对该实验用到的代码有了更深的认识。从而能够按照要求,完成我们自己实验。 3.7 实验结果总结 通过小键盘的按键,键值可以在LED上显示出来。并学习了键盘及LED 驱动原理以及掌握了ZLG7289芯片串行接口的使用方法,用ZLG7289芯片驱动17键的键盘和8个共阴极LED。 3.8 心得体会 在这次实验中让我对嵌入式的实验箱有了进一步的认识,并且进一步了解的ARM实验的原理和实验情况,能够对源代码进行正确了理解。并且能修改这些源代码能够使其工作在自己的预期的工作状态和输出自己想要的结果 4.实验四 4.1 实验名称 电机转动控制及中断实验 4.2 实验目的 1.熟悉ARM本身自带的六路即三对PWM,掌握相应寄存器的配置。 2.编程实现ARM系统的PWM输出和I/O输出,前者用于控制直流电机,后者用于控制步进电机。 3.了解直流电机和步进电机的工作原理,学会用软件的方法实现步进电机的脉冲分配,即用软件的方法代替硬件的脉冲分配器。 4.了解44B0处理器上中断的应用。 5.学习在44B0处理器上中断的应用。 6.进一步熟悉平台外围硬件及其驱动程序的编写。 4.3 实验环境 硬件:ARM 嵌入式开发平台、用于ARM7TDMI 的JTAG 仿真器、PC 机Pentium100 以 上、串口线。 软件:PC 机操作系统win98、Win2000 或WinXP、ARM SDT 2.51 或ADS1.2 集成开发环境、仿真器驱动程序、超级终端通讯程序。 4.4 实验内容及要求 1.编程实现ARM芯片的一对PWM输出用于控制直流电机的转动,通过A/D旋钮控制其转动方式。 2.编程实现ARM的四路I/O通道,实现环形脉冲分配用于控制步进电机的转动,通过A/D旋钮控制步进电机的转角。 3.通过键盘控制直流电机与步进电机的切换。4.设置并启动定时器。 5.设置中断,编写定时器中断服务程序,对中断次数进行计数并在LED上显示结果。 4.5 实验设计与实验步骤 1.添加并打开工程。 2.进行直流电机初始化设置和代码编写。3.进行步进电机初始化设置和代码编写。 4.对Timer3编程,编写定时器中断服务程序,完成对中断次数的计数。5.编写LED计数显示函数,使LED能正确计数并显示0-9999。6.编写中断初始化函数和中断响应函数。7.终端下载测试。 4.6 实验过程与分析 1.对直流电机进行编程和测试,掌握转速和旋转方向的设定方法。2.对步进电机进行编程和测试,掌握ARM的四路I/O通道,实现环形脉冲分配用于控制步进电机的转动,通过A/D旋钮控制步进电机的转角。 3.对主函数进行编程,用键盘响应直流电机与步进电机的切换控制。 4.掌握中断相关语句的应用,弄清定义的中断向量、中断向量号,编写中断响应函数,并完成中断响应控制。 4.7 实验结果总结 实现了直流电机与步进电机的基本设置和控制,可以通过键盘控制电机之间的切换。完成了中断的响应和定时中断。 在通过本次实验,我初步了解的实验的目的所在,并且利用所给的源代码能够,调试出所预期的结果,而且能够根据已给的源代码修改得到所需的结果。 4.8 心得体会 通过本次实验,掌握了电机工作原理,了解了中断的意义和实现方法,实现了简单了中 断处理程序,更加了解了中断的意义。 5.实验五 5.1 实验名称 LCD驱动控制实验及触摸屏驱动实验 5.2 实验目的 1.了解触摸屏的基本概念与原理。 2.理解触摸屏与LCD的关系。3.编程实现对触摸屏的控制。 5.3 实验环境 硬件:ARM 嵌入式开发平台、用于ARM7TDMI 的JTAG 仿真器、PC 机Pentium100 以 上、串口线。 软件:PC 机操作系统win98、Win2000 或WinXP、ARM SDT 2.51 或ADS1.2 集成开发环境、仿真器驱动程序、超级终端通讯程序。 5.4 实验内容及要求 1.了解触摸屏基本原理,理解对触摸屏进行输出标定、与LCD显示器配合的过程。2.通过编程实现触摸两点自动在两点间划直线。3.通过编程实现在触摸屏上动态画出曲线。 5.5 实验设计与实验步骤 1.添加并打开工程。 2.在头文件中定义宏和常量及驱动函数。3.校准触摸屏坐标,进行坐标转换。4.实现触屏取点并显示功能。5.实现两点间自动划线功能。6.实现触摸屏动态划线功能。 5.6 实验过程与分析 1.在定义触屏响应功能的函数中对点击触屏进行响应函数的修改,在其中添加修改点颜色的函数,修改得到的触摸点的颜色,并显示在LCD上。 2.获取第一个点坐标并储存,获取第二个点坐标并储存,编写划线函数,取得两点间直线上所有点的坐标,并对其改变颜色,显示在LCD上,即完成划直线功能。 3.将划线函数应用到响应触屏移动消息的函数下,即可对连续获得的触摸坐标进行连续的画短直线,连接成曲线,完成动态划线功能。 5.7 实验结果总结 了解了触摸屏响应动作消息的函数的工作原理,通过修改实现了触摸屏响应不同动作进行画点、划线、动态划线的功能。 5.8 心得体会 通过本次实验,使我了解了怎么在一块嵌入式实验箱 通过编程控制实验箱上得硬件,比如在本次实验中的控制LCD屏幕就是,在屏幕上点击,然后得到在LCD屏上点击的位置。本次实验初步完成了实验结果。 6.实验六 6.1 实验名称 UCOS-Ⅱ在ARM微处理器上的裁剪 6.2 实验目的 1.了解UCOS-Ⅱ内核的主要结构。 2.掌握UCOS-Ⅱ裁剪的基本原理与嵌入式编程实现方法。3.学习如何根据具体情况对UCOS-Ⅱ操作系统进行裁剪。 4.通过对UCOS-Ⅱ配置文件(OS_CFG.H)中相关的配置常量进行设置,实现对UCOS-Ⅱ的裁剪。 6.3 实验环境 硬件:ARM 嵌入式开发平台、用于ARM7TDMI 的JTAG 仿真器、PC 机Pentium100 以 上、串口线。 软件:PC 机操作系统win98、Win2000 或WinXP、ARM SDT 2.51 或ADS1.2 集成开发环境、仿真器驱动程序、超级终端通讯程序。 6.4 实验内容及要求 对UCOS-Ⅱ内核进行裁剪并移植到ARM7微处理器上。 6.5 实验设计与实验步骤 编辑OS_CFG.H文件。OS_CFG.H文件中的内容可分为两大类:服务功能的配置和数据结构的配置。 一.服务功能的配置: 根据程序中的实际情况,保留自己要用的系统服务功能,删除自己不需要的服务功能。进行合理配置后,是我们自己系统的目标代码比较紧凑,从而降低了对程序代码存储空间的要求。如果代码存储空间足够大的话,那就将全部系统服务功能全部配置为1。不需要考虑功能裁剪。 二.数据结构功能的配置: 与任务有关的数据结构 1.OS_MAX_TASKS 作用:设置用户程序中可以使用的最多任务数。说明:该值不能超过62.举例: 若程序中用到了三个任务,则该值的最小值 2.OS_LOWEST_PRIO 作用:设置程序中最低任务的优先级。 说明: 设定该值可以节省操作系统使用RAM的空间。任务的最低优先级和最大任务数是没有直接关系的。 6.6 实验过程与分析 按照实验指导书上的步骤进行,得到了要求的系统。 6.7 实验结果总结 按照要求进行了裁剪,得到了满足需要又紧凑的应用软件系统。 6.8 心得体会 了解了UCOS-Ⅱ内核的主要结构,掌握了UCOS-Ⅱ裁剪的基本原理与嵌入式编程实现方法,学会了如何根据具体情况对UCOS-Ⅱ操作系统进行裁剪 7.实验七 7.1 实验名称 ucos-II移植实验 7.2 实验目的 1.了解UCOS-Ⅱ内核的主要结构。 2.掌握将UCOS-Ⅱ内核移植到ARM7处理器上的基本方法。 7.3 实验环境 硬件:ARM 嵌入式开发平台、用于ARM7TDMI 的JTAG 仿真器、PC 机Pentium100 以 上、串口线。 软件:PC 机操作系统win98、Win2000 或WinXP、ARM SDT 2.51 或ADS1.2 集成开发环境、仿真器驱动程序、超级终端通讯程序。 7.4 实验内容及要求 1.将UCOS-Ⅱ内核进行移植到ARM7微处理器上。 2.编写两个简单任务,在超级终端上观察两个任务的切换。 7.5 实验设计与实验步骤 1.该实验的文件分为两类,其一是STARTUP 目录下的系统初始化、配置等文件,其二是uCOS-II 的全部源码,arch 目录下的3 个文件是和处理器架构相关的。 2.设置os_cpu.h 中与处理器和编译器相关的代码 3.用C 语言编写6 个操作系统相关的函数(OS_CPU_C.C)4.用汇编语言编写4 个与处理器相关的函数(OS_CPU.ASM)5.编写一个简单的多任务程序来测试一下移植是否成功。 为了使 uCOS-II 可以正常运行,除了上述必须的移植工作外,硬件初始化和配置文件也是必须的。STARTUP 目录下的文件还包括中断处理,时钟,串口通信等基本功能函数。在文件 main.c 中给出了应用程序的基本框架,包括初始化和多任务的创建,启动等。任务 创建方法如下: ①在程序开头定义任务堆栈,任务函数声明和任务优先级 ②在main()函数中调用OSStart()函数之前用下列语句创建任务 ③编写任务函数内容 6.编译并下载移植后的uCOS-II 所有的源代码都准备好后就可以进行编译了。在ADS 环境下需要设置工程的访问路径。从菜单Edit | Debug Settings 进入设置对话框,在Target | Access Paths 中选择User Paths 并选上Always search user paths。然后点Add 按钮添加路径ucos-ii 和arch。这主要是设置编译器处理文件包含时的搜索范围。按照实验一的方法可以对编译后的代码进行调试或下载到平台的电子硬盘中。这个实验从结构上看和其他的实验没有多大区别,同样生成可执行文件system.bin。可以在平台BIOS中激活电子硬盘,然后把system.bin 拷贝进去,重启平台,然后在超级终端上观察结果。 7.6 实验过程与分析 操作系统相关的函数:(1)OSTaskStkInit OSTaskCreate()和OSTaskCreateExt()通过调用OSTaskStkInit()来初始化任务的堆栈结构。因此,堆栈看起来就像刚发生过中断并将所有的寄存器保存到堆栈中的情形一样。图12A-2 显示了OSTaskStkInt()放到正被建立的任务堆栈中的东西。这里我们定义了堆栈是从上往下 长的。在用户建立任务的时候,用户传递任务的地址,pdata 指针,任务的堆栈栈顶和任务的优先级给OSTaskCreate()和OSTaskCreateExt()。一旦用户初始化了堆栈,OSTaskStkInit()就需要返回堆栈指针所指的地址。OSTaskCreate()和OSTaskCreateExt()会获得该地址并将它保存到任务控制块(OS_TCB)中。 (2)OSTaskCreateHook 当用OSTaskCreate()和OSTaskCreateExt()建立任务的时候就会调用OSTaskCreateHook()。该函数允许用户或使用移植实例的用户扩展uCOS-II 功能。当uCOS-II 设置完了自己的内部结构后,会在调用任务调度程序之前调用OSTaskCreateHook()。该函数被调用的时候中断是禁止的。因此用户应尽量减少该函数中的代码以缩短中断的响应时间。当 OSTaskCreateHook()被调用的时候,它会收到指向已建立任务的OS_TCB 的指针,这 样它就可以访问所有的结构成员了。函数原型:void OSTaskCreateHook(OS_TCB *ptcb) (3)OSTaskDelHook 当任务被删除的时候就会调用OSTaskDelHook()。该函数在把任务从uCOS-II 的内部任 务链表中解开之前被调用。当OSTaskDelHook()被调用的时候,它会收到指向正被删除任务 的OS_TCB 的指针,这样它就可以访问所有的结构成员了。OSTaskDelHook()可以来检验TCB扩展是否被建立(一个非空指针)并进行一些清除操作。函数原型:void OSTaskDelHook(OS_TCB *ptcb)(4)OSTaskSwHook 当发生任务切换的时候就会调用OSTaskSwHook()。OSTaskSwHook()可以直接访问 OSTCBCur 和OSTCBHighRdy,因为它们是全局变量。OSTCBCur 指向被切换出去的任务 OS_TCB,而OSTCBHighRdy 指向新任务OS_TCB。注意在调用OSTaskSwHook()期间中断 一直是被禁止的。因此用户应尽量减少该函数中的代码以缩短中断的响应时间。函数原型:void OSTaskSwHook(void) (5)OSTaskStatHook OSTaskStatHook()每秒钟都会被OSTaskStat()调用一次。用户可以用OSTaskStatHook() 来扩展统计功能。例如,用户可以保持并显示每个任务的执行时间,每个任务所用的CPU 份额,以及每个任务执行的频率等。函数原型:void OSTaskStatHook(void)(6)OSTimeTickHook OSTimeTickHook()在每个时钟节拍都会被OSTaskTick()调用。实际上OSTimeTickHook()是在节拍被uCOS-II 真正处理,并通知用户的移植实例或应用程序之前被调用的。函数原型:void OSTimeTickHook(void) 7.7 实验结果总结 在超级终端上输出轮流交替run task1和run task2,表明系统正在不断交替运行2个任务。 7.8 心得体会 在这个实验中我们初步了解和测试了实验的内容和源代码实验结果基本上符合预期的要求。了解了µC/OS-II 内核的主要结构和ARM7处理器结构,掌握了将µC/OS-II 内核移植到ARM 7 处理器上的基本原理与嵌入式编程实现方法。 8.实验八 8.1 实验名称 各接口模块相互衔接综合实验 8.2 实验目的 利用前7次实验所学的知识,综合设计一个至少含有5个模块的实验。 8.3 实验环境 硬件:ARM 嵌入式开发平台、用于ARM7TDMI 的JTAG 仿真器、PC 机Pentium100 以 上、串口线。 软件:PC 机操作系统win98、Win2000 或WinXP、ARM SDT 2.51 或ADS1.2 集成开发环境、仿真器驱动程序、超级终端通讯程序。 8.4 实验内容及要求 1.回顾串口、键盘、LED接口、A/D、电机转动、定时器中断、LCD接口及触摸屏驱动控制接口模块驱动设计及开发方法。 2.综合应用以上全部或者部分模块,实现一个嵌入式综合应用系统,要求至少5个模块。 3.尽量使综合应用具有合理功能。 8.5 实验设计与实验步骤 1.新建工程,添加所需的文件。 2.编写计算器的计算程序caculator.c以及caculator.h文件。3.编写音乐播放文件play.c以及play.h文件。 4.修改键盘映射表让键盘上的数字与LCD与LED屏幕上显示的数字相对应。5.对输出在LCD屏幕上的显示结构进行设计 6.进行裁剪和移植功能设计和完成。编译生成system.bin文件,将文件拷贝至实验台内,重启实验台即可看到实验效果 8.6 实验过程与分析 1.完成10以内的加减乘除的计算功能,通过键盘输入,可在LCD屏幕上显示输入的表达式以及得到的输出结果。如“2+3=5”。 2.按任务切换键,实现任务的切换。3.任务被切换到播放音乐的任务中去。 4.任务切换过程将会在串口的超级终端界面有所显示,同时我们设置的将LCD上显示的结果同步到超级终端上。实现串口通信。 5.利用到了直流电机,如果运算范围超出我们规定的运算范围,则电机转动,来提示错误。 6.实现裁剪与移植功能。 8.7 实验结果总结 在这次实验中,我们利用前面所学习的知识,综合利用在此次实验中,我们利用了前面好所学知识中的6个模块,分别是串口通讯,键盘控制,LED与LCD的输出,电机控制,以及裁剪与移植的功能。通过这些功能的结合,我们实现自己所设计的实验的功能。 8.8 心得体会 在此次实验中,我们遇到了一些问题但是过程中遇到了不少问题,说明对实验原理和语句编写还不是很熟悉。总的来说,通过这段时间的训练,我也学会了不少东西,了解了ARM的基本结构,功能等。 9.实验总结与心得体会 通过这次为期一周的嵌入式课程实验,我对于嵌入式有了更加深刻的了解与认识。我是第一次接触嵌入式,以前对于嵌入式的知识了解甚少,但是通过此次实验,我不仅了解了嵌入式,也学会了许多关于嵌入式方面的知识。 通过前面的基础实验,我们对于ARM环境有了更深的了解,掌握了博创平台的使用方法,例如如何使用小键盘,如何使用LCD、LED屏幕,如何控制终端,如何进行多任务之间的切换等等。通过这几次的基础课程实验,我们最后出了计算器,能够实现10以内的加减乘除,在此基础上我们利用多任务,实现播放音乐与计算的切换,还利用点击的转动来提示运算过程中出现的问题。 通过这几次实验,为我们以后的课程设计实验打下了坚实的基础,相信有了这几天系统实验的培训,我们的课程设计实验做起来会更加轻松。第二篇:嵌入式系统实验报告
第三篇:嵌入式系统实验报告
第四篇:嵌入式系统实验报告
第五篇:嵌入式系统实验报告