2013广工嵌入式实验报告.doc_第1页
2013广工嵌入式实验报告.doc_第2页
2013广工嵌入式实验报告.doc_第3页
2013广工嵌入式实验报告.doc_第4页
2013广工嵌入式实验报告.doc_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

嵌入式系统实验报告学生学院 计算机学院 专业班级 计算机科学与技术09(6)班 学 号 学生姓名 指导教师 2013 年 1 月18日实验一 LED简单程序一、实验目的1.熟悉 ADS 开发环境、 AXD 及 Multi_ICE 调试环境。2.掌握简单的 ARM 汇编指令的使用方法。3.掌握 ARM 汇编指令和 C 语言相互调用的方法二、实验内容和要求1. 熟悉 ARM 开发环境的建立。 2. 编写蜂鸣器程序。三、工具说明PC 机、 ARM 仿真器、 2440 实验箱、串口线、 USB 传输线。四、系统结构图五、实验方法、步骤及结构测试控制发光二极管闪烁和蜂鸣器间断鸣响代码关键部分表述: ldr r2, =0xfffSPARK;将port B全部输出高电平;the pins of port B is high output ldr r0, =GPBDAT mov r1, r2 str r1, r0 mvn r2, r2 ldr r3, =0xfffffff ;调整这个值可以改变发光二极管的闪烁频率(关键)Delay SUBS r3, r3, #1 ;r3减一同时修改标志位。 BNE Delay ;如果r3减一后不为0,则跳转到Delay继续延迟B SPARK ;如果r3减一后等于0,则跳转到SPARK标号处改变LED状态实验步骤:1. 连接好实验环境 , 将仿真器的一端通过并口连接到 PC 机 , 将仿真器的另一端通过 JTAG 线连接到 2440 实验箱的 JTAG 接口 。 拔掉实验箱上的 J43 与 J44 跳线帽。2. 将串口线一端接到 PC 机 , 另一端接到 2440 实验箱的 COM1 接口 , 打开串 口超级终端 dnw.exe ,设置串口 Baud Rate 为 115200 ,选择 COM1 。3. 打开 ADS CodeWarrior ,在 ADS CodeWarrior 中打开实验工程目录中 的GEC2440_ASM_C.mcp ;并 对工程进行编译。4. 打开仿真器驱动程序 Multi-ICE server ,并加载配置文件 ARM920T.cfg 。5. 打开 ARM 的开发环境 AXD Debugger , 在 AXD Debugger 中加载实验工程目录中的可执行映象文件 GEC2440_ASM_C.axf 。6. 执行映象文件,并观察实验结果。注:若没有 Multi-ICE 调试,可以采用下面方法测试程序:1. 拔掉实验箱上的 J43 与 J44 跳线帽。重启 2440 实验箱,实验箱会自动执行flash 中的 BIOS 程序,打开 dnw.exe 超级终端。2. 在 dnw 中,输入 “ 0 ” ,选择 “ USB download file ” , (使用 dnw 的 usb 下载功能需在 PC 上先安装 USB 驱动,已经安装过则忽略此步骤 。 )3. 点击 “ USB Port ” “ Transmit ” 选择实验工程目录下的可执行映象文 件GEC2440_ASM_C.bin 将该文件下载到 SDRAM 。4. 下载结束后 , 会提示是否要立即运行 , 这时输入 “ Y ” , 执行 GEC2440_ASM_C.bin 。5. 在 dnw 中观察实验结果。运行结果:程序运行后:通过修改蜂鸣器鸣响的响应参数,即控制输出高或低电平的时间间隔,是蜂鸣器从发出连续声音变为某一个时间间隔的蜂鸣。程序清单:;=; NAME: ArmjishuLedTest.s; DESC: 控制发光二极管闪烁和蜂鸣器间断鸣响; Creat: 2013.01.17:; HISTORY: ; COPYRIGHT: ;=;Led1-4 对应于开发板上的 GPB5-8管脚;蜂鸣器 对应于开发板上的 GPB0管脚;=; I/O PORT for LED LED对应端口寄存器地址宏定义;=GPBCON EQU 0x56000010 ;已修改为PORTF,原来是Port B 0x56000010GPBDAT EQU 0x56000014 ;Port B data 0x56000014GPBUP EQU 0x56000018 ;Pull-up control B 0x56000018;=; INTERRUPT 中断寄存器地址宏定义;=INTMSK EQU 0x4a000008 ;Interrupt mask controlINTSUBMSKEQU 0x4a00001c ;Interrupt sub mask;=; WATCH DOG TIMER 看门狗寄存器地址宏定义;=WTCONEQU 0x53000000 ;Watch-dog timer mode CODE32 ; CODE32告诉编译器将以下代码编译为ARM指令 AREA Init,CODE,READONLY ;以下部分的名称为Init,是代码段,只读属性 ENTRY ;入口点标示 ; b ResetHandlexr ;上电或复位异常跳转到ResetHandler标号处。 ;=; Entry;=;ResetHandlexr;禁止看门狗; disable watch dog ldr r0, =WTCON ldr r1, =0x0 str r1, r0;禁止所有中断;disable all interrupt ldr r0, =INTMSK ldr r1, =0xffffffff str r1, r0;禁止所有子中断;disable all sub interrupt ldr r0, =INTSUBMSK ldr r1, =0x7fff str r1, r0;将port B全部配置为输出;Configures the pins of port B as output ldr r0, =GPBCON ldr r1, =0x155555 str r1, r0 ;将port B管脚上拉;Enable Pull-up for port B ldr r0, =GPBUP ldr r1, =0x00 str r1, r0;以下是控制发光二极管闪烁和蜂鸣器间断鸣响的代码实现 ldr r2, =0xfffSPARK;将port B全部输出高电平;the pins of port B is high output ldr r0, =GPBDAT mov r1, r2 str r1, r0 mvn r2, r2 ldr r3, =0xfffffff ;调整这个值可以改变发光二极管的闪烁频率Delay SUBS r3, r3, #1 ;r3减一同时修改标志位。 BNE Delay ;如果r3减一后不为0,则跳转到Delay继续延迟 B SPARK ;如果r3减一后等于0,则跳转到SPARK标号处改变LED状态 END ;END关键字告诉编译器,汇编指令到此结束实验二、触摸屏一、实验目的1. 了解触摸屏的基本概念与原理2. 编程实现并掌握对触摸屏的控制二、实验内容和要求1. 编程实现触摸屏坐标到 LCD 坐标的校准2. 编程实现触摸屏坐标采集以及 LCD 坐标计算3. 编写程序,实现在触摸的任意位置画矩形三、工具说明GEC2440BOXV1.0 实验箱、AD S 1.2 集 成 开发环境, AR M 仿真器 、 串口连接线四、实验原理4.1触摸屏的工作原理触摸屏由触摸检测部件和触摸屏控制器组成;触摸检测部件安装在显示器屏幕前面,用于检测用户触摸位置,接受后送触摸屏控制器;而触摸屏控制器的主要作用是从触摸点检测装置上接收触摸信息,并将它转换成触点坐标,再送给CPU,它同时能接收CPU 发来的命令并加以执行。4.2触摸屏的主要类型按照触摸屏的工作原理和传输信息的介质,我们把触摸屏分为四种,它们分别为电阻式、电容感应式、红外线式以及表面声波式。每一类触摸屏都有其各自的优缺点,要了解哪种触摸屏适用于哪种场合,关键就在于要懂得每一类触摸屏技术的工作原理和特点。五、实验方法、步骤及实验代码编程流程与相关函数实验步骤1. 连接好实验环境 , 将仿真器的一端通过并口连接到 PC 机 , 将仿真器的另通过 JTAG 线连接到 2440 实验箱的 JTAG 接口。2. 将串口线一端接到 PC 机,另一端接到 2440 实验箱的 COM1 接口,打口超级终端 dnw.exe ,设置串口 Baud Rate 为 115200 ,选择 COM1 。3. 打开 ADS CodeWarrior ,在 ADS CodeWarrior 中打开实验工程目录中 的3.1.17-GEC2440_TC 目录下的 GEC_TC.mcp ;并对工程进行编译。4. 打开仿真器驱动程序 Multi-ICE server ,并加载配置文件 ARM920T.cfg 。5. 打开 ARM 的开发环境 AXD Debugger , 在 AXD Debugger 中加载可执行文件 GEC_TC .axf 。6. 执行映象文件,并观察实验结果。注:若没有 Multi-ICE 调试,可以采用下面方法测试程序:1. 重起 2440 实验箱 , 实验箱会自动执行 flash 中的 BIOS 程序 , 打开 dnw.e级终端。2. 在 dnw 中 , 输入 “ 0 ” , 选择 “ USB download file ” , ( 使用 dnw 的 usb 下载需在 PC 上先安装 USB 驱动,已经安装过则忽略此步骤 。 )3. 点击 “ USB Port ” “ Transmit ” 选择 3.1.17-GEC2440_TC 目录下的 GEC_TC目录中的 DebugRel 文件夹中的可执行映象文件 GEC2440_TC.bin 将该文件下SDRAM 。4. 下载结束后 , 会提示是否要立即运行 , 这时输入 “ Y ” , 执行 GEC2440_TC5. 在 dnw 中观察实验结果。实验关键代码:/*在LCD屏幕上用颜色填充一个矩形*/void Glib_FilledRectangle(int x1,int y1,int x2,int y2,int color) int i; for(i=y1;i=y2;i+)Glib_Line(x1,i,x2,i,color);/*在LCD屏幕上指定坐标点画一个指定大小的图片*/static void Paint_Bmp(int x0,int y0,int h,int l,unsigned char bmp)int x,y;U32 c;int p = 0;/本图片显示是正的显示方式 for( y = 0 ; y l ; y+ ) for( x = 0 ; x h ; x+ ) c = bmpp+1 | (bmpp8) ;if ( ( (x0+x) SCR_XSIZE_TFT_800480) & ( (y0+y) 0 ; y- ) for( x = h ; x 0 ; x- ) c = bmpp+1 | (bmpp8) ;if ( ( (x0+x) SCR_XSIZE_TFT_240320) & ( (y0+y) SCR_YSIZE_TFT_240320) )LCD_BUFERy0+yx0+x = c ; p = p + 2 ; */运行结果:运行程序,用手触摸点击触摸屏,从串口读出触摸屏的坐标,并且在接触点处所在一个设定的范围内画一个矩形。代码清单:#include #include def.h#include 2440addr.h#include 2440lib.h#define MVAL(13)#define MVAL_USED (0)/0=each frame 1=rate by MVAL#define INVVDEN(1)/0=normal 1=inverted#define BSWP(0)/Byte swap control#define HWSWP(1)/Half word swap control#define M5D(n) (n) & 0x1fffff)/ To get lower 21bits/TFT 800480#define LCD_XSIZE_TFT_800480 (800)#define LCD_YSIZE_TFT_800480 (480)/TFT 800480#define SCR_XSIZE_TFT_800480(800)#define SCR_YSIZE_TFT_800480 (480)/TFT800480#define HOZVAL_TFT_800480(LCD_XSIZE_TFT_800480-1)#define LINEVAL_TFT_800480(LCD_YSIZE_TFT_800480-1)/Timing parameter for LCD#define CLKVAL_TFT_800480(5) /22.5MHZ#define HFPD_800480(39)/水平同步信号的前肩#define HSPW_800480(47)/水平同步信号的脉宽#define HBPD_800480(39)/水平同步信号的后肩#define VFPD_800480(12)/垂直同步信号的前肩#define VSPW_800480(2) /垂直同步信号的脉宽#define VBPD_800480(28) /垂直同步信号的后肩static void Lcd_Init(void);static void Lcd_EnvidOnOff(int onoff);static void PutPixel(U32 x,U32 y,U32 c);void Glib_FilledRectangle(int x1,int y1,int x2,int y2,int color);void Glib_Line(int x1,int y1,int x2,int y2,int color);void Lcd_ClearScr(U16 c);static void Paint_Bmp(int x0,int y0,int h,int l,unsigned char bmp);extern unsigned char GEC_800480;volatile static unsigned short LCD_BUFERSCR_YSIZE_TFT_800480SCR_XSIZE_TFT_800480;/*/800480 16Bpp TFT LCD数据和控制端口初始化/*/static void Lcd_Port_Init(void) rGPCUP = 0x0; / enable Pull-up register rGPCCON = 0xaaaa56a9; /Initialize VD7:0,LCDVF2:0,VM,VFRAME,VLINE,VCLK,LEND /rGPCCON = 0xaaaaaaaa; rGPDUP = 0x0 ; / enable Pull-up register rGPDCON=0xaaaaaaaa; /Initialize VD15:8/*/800480 16Bpp TFT LCD功能模块初始化/*/static void Lcd_Init(void)rLCDCON1=(CLKVAL_TFT_8004808)|(MVAL_USED7)|(35)|(121)|0; / TFT LCD panel,12bpp TFT,ENVID=offrLCDCON2=(VBPD_80048024)|(LINEVAL_TFT_80048014)|(VFPD_8004806)|(VSPW_800480);rLCDCON3=(HBPD_80048019)|(HOZVAL_TFT_8004808)|(HFPD_800480);rLCDCON4=(MVAL8)|(HSPW_800480);rLCDCON5=(111)|(110)|(19)|(18)|(07)|(06)|(13)|(BSWP22)1);rLCDSADDR2=M5D( (U32)LCD_BUFER+(SCR_XSIZE_TFT_800480*LCD_YSIZE_TFT_800480*2)1 );rLCDSADDR3=(SCR_XSIZE_TFT_800480-LCD_XSIZE_TFT_800480)/1)11)|(LCD_XSIZE_TFT_800480/1);rLCDINTMSK|=(3); / MASK LCD Sub InterruptrTCONSEL&=(7); / Disable LPC3600rTPAL=0; / Disable Temp Palette/*/LCD视频和控制信号输出或者停止,1开启视频输出/*/static void Lcd_EnvidOnOff(int onoff) if(onoff=1)rLCDCON1|=1; / ENVID=ON elserLCDCON1 =rLCDCON1 & 0x3fffe; / ENVID Off/*/800x480 16Bpp TFT LCD单个象素的显示数据输出/*/static void PutPixel(U32 x,U32 y,U32 c)if ( (x SCR_XSIZE_TFT_800480) & (y SCR_YSIZE_TFT_800480) )LCD_BUFER(y)(x) = c;/*/800x480 16Bpp TFT LCD全屏填充特定颜色单元或清屏/*/void Lcd_ClearScr(U16 c)unsigned int x,y ; for( y = 0 ; y SCR_YSIZE_TFT_800480; y+ ) for( x = 0 ; x SCR_XSIZE_TFT_800480; x+ ) LCD_BUFERyx = c; /*/LCD屏幕显示垂直翻转/ LCD display is flipped vertically/ But, think the algorithm by mathematics point./ 3I2/ 4 I 1/ -+- =0)if(dy = 0) / dy=0if(dx=dy) / 1/8 octante=dy-dx/2;while(x10)y1+=1;e-=dx;x1+=1;e+=dy;else/ 2/8 octante=dx-dy/2;while(y10)x1+=1;e-=dy;y1+=1;e+=dx;else / dy=dy) / 8/8 octante=dy-dx/2;while(x10)y1-=1;e-=dx;x1+=1;e+=dy;else/ 7/8 octante=dx-dy/2;while(y1=y2)PutPixel(x1,y1,color);if(e0)x1+=1;e-=dy;y1-=1;e+=dx;else /dx= 0) / dy=0if(dx=dy) / 4/8 octante=dy-dx/2;while(x1=x2)PutPixel(x1,y1,color);if(e0)y1+=1;e-=dx;x1-=1;e+=dy;else/ 3/8 octante=dx-dy/2;while(y10)x1-=1;e-=dy;y1+=1;e+=dx;else / dy=dy) / 5/8 octante=dy-dx/2;while(x1=x2)PutPixel(x1,y1,color);if(e0)y1-=1;e-=dx;x1-=1;e+=dy;else/ 6/8 octante=dx-dy/2;while(y1=y2)PutPixel(x1,y1,color);if(e0)x1-=1;e-=dy;y1-=1;e+=dx;/*在LCD屏幕上用颜色填充一个矩形*/void Glib_FilledRectangle(int x1,int y1,int x2,int y2,int color) int i; for(i=y1;i=y2;i+)Glib_Line(x1,i,x2,i,color);/*在LCD屏幕上指定坐标点画一个指定大小的图片*/static void Paint_Bmp(int x0,int y0,int h,int l,unsigned char bmp)int x,y;U32 c;int p = 0;/本图片显示是正的显示方式 for( y = 0 ; y l ; y+ ) for( x = 0 ; x h ; x+ ) c = bmpp+1 | (bmpp8) ;if ( ( (x0+x) SCR_XSIZE_TFT_800480) & ( (y0+y) 0 ; y- ) for( x = h ; x 0 ; x- ) c = bmpp+1 | (bmpp8) ;if ( ( (x0+x) SCR_XSIZE_TFT_240320) & ( (y0+y) SCR_YSIZE_TFT_240320) )LCD_BUFERy0+yx0+x = c ; p = p + 2 ; */*/void Test_Lcd_Tft_800480( void ) Uart_Printf(nTest 800*480 TFT LCD !n); Lcd_Port_Init(); Lcd_Init(); Lcd_EnvidOnOff(1);/turn on vedioLcd_ClearScr(0xffff);/fill all screen with some color#define LCD_BLANK16#define C_UP( LCD_XSIZE_TFT_800480- LCD_BLANK*2 )/#define C_RIGHT( LCD_XSIZE_TFT_800480- LCD_BLANK*2 )#define V_BLACK( ( LCD_YSIZE_TFT_800480- LCD_BLANK*4 ) / 6 )Glib_FilledRectangle( LCD_BLANK, LCD_BLANK, ( LCD_XSIZE_TFT_800480- LCD_BLANK ),

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论