ar开发板实验报告_第1页
ar开发板实验报告_第2页
ar开发板实验报告_第3页
ar开发板实验报告_第4页
ar开发板实验报告_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

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

文档简介

1、郑州轻工业学院实 训 报 告实训名称: 项目一:编写从A/D转换器的通道x获取模拟数据,并将转换后的数字量以波形的形式在LCD上显示的程序 项目二: 触摸屏驱动程序设计 姓 名: 张克歌 院 (系): 计算机与通信工程学院 专业班级: 嵌入式09-01 学 号: 540913090151 指导教师: 韩雪琴 成 绩: 时间:2011年 8月 29日至 2011年 9 月 7 日一、需求说明1. 巩固和强化学生的嵌入式系统的基本概念和开发流程,掌握基本知识和基本技能。2. 掌握硬件开发平台、开发资源和软件开发环境,尤其是裸机嵌入式系统开发方法。掌握汇编和C语言混合编程技巧,熟悉系统启动引导过程,

2、能够成功移植嵌入式系统引导程序。培养和训练学生综合利用所学基本知识和基本技能进行小型裸机程序开发的技能。3. 明确思路和任务,查询相关书籍、资料,综合了解ARM的AD转换器和LCD 驱动器,重点分析时S3C2440的LCD 驱动器的工作原理和初始化方法。分析与AD转换相关的寄存器,编写AD转换器的初始化函数,编写获取AD转换结果的函数。分析与LCD相关的寄存器,编写LCD 驱动器的初始化函数,配置显示方式。分析LCD绘图的API函数。编写主函数,将AD转换结果在LCD上以波形的方式显示,同时以串口输出到PC机。进入调试。实现转换数据实时输出,实现串口输出数据与LCD 波形显示的一致。4. 明确

3、思路和任务,查询相关书籍、资料,重点分析S3C2440的触摸屏接口工作原理和相关寄存器。编写触摸屏初始化函数,确定XY位置转换模式。编写触摸屏中断初始化函数,中断服务函数。编写屏幕校准函数。确定坐标计算公式。编写触点数据采集函数。编写主函数,进入调试。实现触摸屏坐标点x、y的正确读取。二、功能描述项目一:编写从A/D转换器的通道x获取模拟数据,并将转换后的数字量以波形的形式在LCD上显示的程序。项目二:通过对AD转换器的配置触摸屏自动测试x/y位置模式,选择进入到触摸屏驱动函数。在进行触摸屏测试时,先进入函数内判断是否启动A/D转换,如果不是的话就跳出此函数,如果是的话进行下面的判断,看A/D

4、转换是否结束,如果是,跳出函数,如果不是运行程序,并输出x、y的值。再回到触摸屏驱动函数,测试结束,清屏。三、系统设计及实现项目一:一项目一系统设计 1. 编写AD转换器的初始化函数; 2. 设计函数,获取AD转换的结果; 3. 初始化LCD相关寄存器; 4. 设计函数,使单个象素的显示数据输出,在LCD上显示。二项目一流程图开始 编写AD转换器的初始化函数在ReadAdc函数中选择0通道编写单个像素显示数据输出函数PutPixel在TFT_LCD_Test函数中调用PutPixel,以便在LCD屏幕上输出在Test_Adc函数中,是否按退出键YN利用可调电阻,通过0通道进行A/D转化,并调用

5、TFT_LCD_Test函数,在LCD屏幕上打点延长一定时间结束三项目一实现 LCD清屏及单个像素显示函数编写Test Adc函数,期间调用了Lcd_ClearScr PutPixe两个函数添加H-JTag选择.axf文件,并打开 将其程序下载到开发板中 实验程序代码经过调试,没有错误,进入运行阶段在超级终端中显示测试结果 在LCD中显示的结果,由于没有改变电阻,因此看到了在极小范围内变化的点项目二:一项目二系统设计1. 对触摸屏相关寄存器进行初始化,确定XY位置转换模式; 2. 对中断初始化,设计中断服务函数; 3. 通过校正函数和坐标计算公式,得出坐标。二项目二流程图开始 在main函数中

6、调用Test_Touchpanel函数对ADC相关寄存器进行配置设置中断,进行数据采集开中断,AD转换是否开启NYAD转换是否结束NY进行数据转换,并输出数据等待中断结束三项目二实现 对ADC相关寄存器,中断进行设置中断服务函数在主函数中直接调用Test_Touchpanel函数最终测试结果,每碰触一下触摸屏,就在终端中显示一对XP,YP值四、实训心得两周时间转瞬即逝,在这两周里,我们潜心研究,以MINI2440开发板为实验硬件平台,采用ADS集成开发环境,是我们在课程内容基础上,加强对嵌入式系统的理解和裸机应用的设计。在此过程中,需要我们分析嵌入式CPU引导程序的功能和引导过程,学会裸机驱动

7、程序的开发以及简单应用程序的设计。从而深化我们的专业基本技能,加强我们的动手能力。通过本次实训,我们了解到了团队的力量。小组以积极认真的态度应对,遵纪守纪,发现问题,解决问题,同时也培养了自己的独立工作能力。通过本次实训,我们基本掌握了嵌入式系统的特点,性能,掌握了开发板的硬件资源,熟悉了S3C2440的功能和接口。通过本次实训,我们还熟练了ADS集成开发环境的使用,掌握了ADS开发和调试裸机程序的过程和方法。同时,实训培养了我们学生一定的查阅教材,数据手册和各类相关资料的能力,进而养成自我学习的习惯,掌握底层硬件资源的驱动开发过程。在此实训中也遇到了很多问题。比如,在函数调用中会出现没有提前

8、声明函数;在使用时会出现重复定义;尤其是在触摸屏程序设计中,一直对校正函数无法下手,后来才了解到在MINI2440中是直接转化的。总之,本次实训对我们作用巨大,影响深远,不仅巩固了现阶段所学的知识,而且为以后的工作生活做足充分准备。也对“学海无涯”有了更深一步的体会,在以后的学习中,要更加踏实,更加努力!五、附录(代码) /*项目一代码* NAME: u2440mon.c DESC: u2440mon entry point,menu,download HISTORY: Mar.25.2002:purnnamu: S3C2400X profile.c is ported for S3C2410

9、X. Mar.27.2002:purnnamu: DMA is enabled. Apr.01.2002:purnnamu: isDownloadReady flag is added. Apr.10.2002:purnnamu: - Selecting menu is available in the waiting loop. So, isDownloadReady flag gets not needed - UART ch.1 can be selected for the console. Aug.20.2002:purnnamu: revision number change 0.

10、2 -> R1.1 Sep.03.2002:purnnamu: To remove the power noise in the USB signal, the unused CLKOUT0,1 is disabled. */#defineGLOBAL_CLK1#include <stdlib.h>#include <string.h>#include "def.h"#include "option.h"#include "2440addr.h"#include "2440lib.h"

11、#include "2440slib.h"#include "mmu.h"#include "profile.h"#include "memtest.h"extern char Image$RO$Limit;extern char Image$RO$Base;extern char Image$RW$Limit;extern char Image$RW$Base;extern char Image$ZI$Limit;extern char Image$ZI$Base;void Isr_Init(void);void

12、 HaltUndef(void);void HaltSwi(void);void HaltPabort(void);void HaltDabort(void);void ClearMemory(void);void Clk0_Enable(int clock_sel);void Clk1_Enable(int clock_sel);void Clk0_Disable(void);void Clk1_Disable(void);/extern void TFT_LCD_Init(void);/extern void TFT_LCD_Test(void);extern void TFT_LCD_I

13、nit(void);extern void TFT_LCD_Test(void);extern void Test_Touchpanel(void) ;extern void Test_Adc(void) ;/adc testextern void KeyScan_Test(void) ;extern void RTC_Display(void) ;extern void Test_IrDA_Tx(void) ;extern void PlayMusicTest(void) ;extern void RecordTest( void ) ;extern void Test_Iic(void)

14、;extern void Test_SDI(void) ;extern void Camera_Test( void ) ;volatile U32 downloadAddress;void (*restart)(void)=(void (*)(void)0x0;volatile unsigned char *downPt;volatile U32 downloadFileSize;volatile U16 checkSum;volatile unsigned int err=0;volatile U32 totalDmaCount;volatile int isUsbdSetConfigur

15、ation;int download_run=0;U32 tempDownloadAddress;int menuUsed=0;extern char Image$RW$Limit;U32 *pMagicNum=(U32 *)Image$RW$Limit;int consoleNum;static U32 cpu_freq;static U32 UPLL;static void cal_cpu_bus_clk(void)U32 val;U8 m, p, s;val = rMPLLCON;m = (val>>12)&0xff;p = (val>>4)&0x

16、3f;s = val&3;/(m+8)*FIN*2 不要超出32位数!FCLK = (m+8)*(FIN/100)*2)/(p+2)*(1<<s)*100;val = rCLKDIVN;m = (val>>1)&3;p = val&1;val = rCAMDIVN;s = val>>8;switch (m) case 0:HCLK = FCLK;break;case 1:HCLK = FCLK>>1;break;case 2:if(s&2)HCLK = FCLK>>3;elseHCLK = FCLK&g

17、t;>2;break;case 3:if(s&1)HCLK = FCLK/6;elseHCLK = FCLK/3;break;if(p)PCLK = HCLK>>1;elsePCLK = HCLK;if(s&0x10)cpu_freq = HCLK;elsecpu_freq = FCLK;val = rUPLLCON;m = (val>>12)&0xff;p = (val>>4)&0x3f;s = val&3;UPLL = (m+8)*FIN)/(p+2)*(1<<s);UCLK = (rCLKDIV

18、N&8)?(UPLL>>1):UPLL;void Temp_function() Uart_Printf("nPlease input 1-16 to select test!n"); struct void (*fun)(void);char *tip;CmdTip = Temp_function, "Please input 1-16 to select test" , BUZZER_PWM_Test, "Test PWM" , RTC_Display, "RTC time display"

19、 , Test_Adc, "Test ADC" , KeyScan_Test, "Test interrupt and key scan" , Test_Touchpanel, "Test Touchpanel" , TFT_LCD_Test, "Test TFT-LCD or VGA1024x768 module" , Test_Iic, "Test IIC EEPROM, if use QQ2440, please remove the LCD" , PlayMusicTest, "

20、;UDA1341 play music" , Test_SDI, "Test SD Card" , Camera_Test, "Test CMOS Camera", 0, 0;/*640×480 TFT LCD单个象素的显示数据输出*/ void PutPixel(U32 x,U32 y,U16 c) if(x<SCR_XSIZE && y<SCR_YSIZE)LCD_BUFFER(y)(x) = c;/*640×480 TFT LCD全屏填充特定颜色单元或清屏*/ void Lcd_ClearS

21、cr( U16 c)unsigned int x,y ; for( y = 0 ; y < SCR_YSIZE ; y+ ) for( x = 0 ; x < SCR_XSIZE ; x+ ) LCD_BUFFERyx = c ; void Test_Adc(void) int a0=0, a1=0; /Initialize variables U32 rADCCON_save = rADCCON; Uart_Printf( "ADC INPUT Test, press ESC key to exit !n" ) ; preScaler = ADC_FREQ;

22、Uart_Printf("ADC conv. freq. = %dHzn",preScaler); preScaler = 50000000/ADC_FREQ -1; /PCLK:50.7MHz Uart_Printf("PCLK/ADC_FREQ - 1 = %dn",preScaler); Lcd_ClearScr( (0x1f<<11) | (0x3f<<5) | (0x1f) ) ; while( Uart_GetKey() != ESC_KEY ) a0=ReadAdc(0); /对应开发板上W1可调电阻 /a1=Rea

23、dAdc(1); /对应开发板上W2可调电阻 a1+=1; Uart_Printf( "AIN0: %04d,AIN1: %04dn", a0, a1 ); PutPixel(a0-400,a1,0x0000);Delay( 500 ) ; /rADCCON=(0<<14)|(19<<6)|(7<<3)|(1<<2); /stand by mode to reduce power consumption rADCCON = rADCCON_save; Uart_Printf("nrADCCON = 0x%xn&quo

24、t;, rADCCON);void Main(void)char *mode;int i;U8 key;U32 mpll_val = 0 ;/U32 divn_upll = 0 ; #if ADS10 /_rt_lib_init(); /for ADS 1.0#endifPort_Init();Isr_Init();i = 2 ;/don't use 100M!/boot_params.cpu_clk.val = 3;switch ( i ) case 0:/200key = 12;mpll_val = (92<<12)|(4<<4)|(1);break;cas

25、e 1:/300key = 13;mpll_val = (67<<12)|(1<<4)|(1);break;case 2:/400key = 14;mpll_val = (92<<12)|(1<<4)|(1);break;case 3:/440!key = 14;mpll_val = (102<<12)|(1<<4)|(1);break;default:key = 14;mpll_val = (92<<12)|(1<<4)|(1);break;/init FCLK=400M, so change M

26、PLL firstChangeMPllValue(mpll_val>>12)&0xff, (mpll_val>>4)&0x3f, mpll_val&3);ChangeClockDivider(key, 12);cal_cpu_bus_clk();consoleNum = 0;/ Uart 1 select for debug.Uart_Init( 0,115200 );Uart_Select( consoleNum );Beep(2000, 100);Uart_SendByte('n');Uart_Printf("<

27、;*>n");Uart_Printf(" SBC2440 Test Program VER1.0n");Uart_Printf(" n");Uart_Printf(" Build time is: %s %sn", _DATE_ , _TIME_ ); Uart_Printf( " Image$RO$Base = 0x%xn", Image$RO$Base );Uart_Printf( " Image$RO$Limit = 0x%xn", Image$RO$Limit );Uar

28、t_Printf( " Image$RW$Base = 0x%xn", Image$RW$Base );Uart_Printf( " Image$RW$Limit = 0x%xn", Image$RW$Limit ); Uart_Printf( " Image$ZI$Base = 0x%xn", Image$ZI$Base ); Uart_Printf( " Image$ZI$Limit = 0x%xn", Image$ZI$Limit );Uart_Printf("<*>n");r

29、MISCCR=rMISCCR&(1<<3); / USBD is selected instead of USBH1 rMISCCR=rMISCCR&(1<<13); / USB port 1 is enabled./ USBD should be initialized first of all./isUsbdSetConfiguration=0;/rd_dm9000_id();/rGPBCON &= (3<<20);/CF_CARD Power/rGPBCON |= 1<<20;/rGPBDAT |= 1<<

30、;10;/rDSC0 = 0x155;/rDSC1 = 0x15555555;rDSC0 = 0x2aa;rDSC1 = 0x2aaaaaaa;/Enable NAND, USBD, PWM TImer, UART0,1 and GPIO clock,/the others must be enabled in OS!rCLKCON = 0xfffff0;/MMU_EnableICache();MMU_Init();/Uart_Printf("NOR Flash ID is 0x%08xn", GetFlashID();pISR_SWI=(_ISR_STARTADDRESS

31、+0xf0);/for pSOSLed_Display(0x66);#if USBDMAmode="DMA"#elsemode="Int"#endif/ CLKOUT0/1 select./Uart_Printf("CLKOUT0:MPLL in, CLKOUT1:RTC clock.n");/Clk0_Enable(0);/ 0:MPLLin, 1:UPLL, 2:FCLK, 3:HCLK, 4:PCLK, 5:DCLK0/Clk1_Enable(2);/ 0:MPLLout, 1:UPLL, 2:RTC, 3:HCLK, 4:PC

32、LK, 5:DCLK1Clk0_Disable();Clk1_Disable();mpll_val = rMPLLCON;TFT_LCD_Init();/TFT_LCD_Init();download_run=1; /The default menu is the Download & Run mode.while(1)U8 idx;Uart_Printf("nPlease select function : n");for(i=0; CmdTipi.fun!=0; i+)Uart_Printf("%d : %sn", i, CmdTipi.ti

33、p);idx = Uart_GetIntNum_GJ() ;if(idx<i)(*CmdTipidx.fun)();Delay(20);Uart_Init( 0,115200 ); void Isr_Init(void)pISR_UNDEF=(unsigned)HaltUndef;pISR_SWI =(unsigned)HaltSwi;pISR_PABORT=(unsigned)HaltPabort;pISR_DABORT=(unsigned)HaltDabort;rINTMOD=0x0; / All=IRQ moderINTMSK=BIT_ALLMSK; / All interrupt

34、 is masked./pISR_URXD0=(unsigned)Uart0_RxInt;/rINTMSK=(BIT_URXD0); /enable UART0 RX Default value=0xffffffff/#if 1/pISR_USBD =(unsigned)IsrUsbd;/pISR_DMA2 =(unsigned)IsrDma2;/#else/pISR_IRQ =(unsigned)IsrUsbd;/Why doesn't it receive the big file if use this. (?)/It always stops when 327680 bytes

35、 are received./#endif/ClearPending(BIT_DMA2);/ClearPending(BIT_USBD);/rINTMSK&=(BIT_USBD); /pISR_FIQ,pISR_IRQ must be initializedvoid HaltUndef(void)Uart_Printf("Undefined instruction exception!n");while(1);void HaltSwi(void)Uart_Printf("SWI exception!n");while(1);void HaltPa

36、bort(void)Uart_Printf("Pabort exception!n");while(1);void HaltDabort(void)Uart_Printf("Dabort exception!n");while(1);void ClearMemory(void)/int i;/U32 data;int memError=0;U32 *pt;Uart_Printf("Clear Memory (%xh-%xh):WR",_RAM_STARTADDRESS,HEAPEND);pt=(U32 *)_RAM_STARTADDR

37、ESS;while(U32)pt < HEAPEND)*pt=(U32)0x0;pt+;if(memError=0)Uart_Printf("bbO.K.n");void Clk0_Enable(int clock_sel)/ 0:MPLLin, 1:UPLL, 2:FCLK, 3:HCLK, 4:PCLK, 5:DCLK0rMISCCR = rMISCCR&(7<<4) | (clock_sel<<4);rGPHCON = rGPHCON&(3<<18) | (2<<18);void Clk1_Enab

38、le(int clock_sel)/ 0:MPLLout, 1:UPLL, 2:RTC, 3:HCLK, 4:PCLK, 5:DCLK1rMISCCR = rMISCCR&(7<<8) | (clock_sel<<8);rGPHCON = rGPHCON&(3<<20) | (2<<20);void Clk0_Disable(void)rGPHCON = rGPHCON&(3<<18);/ GPH9 Inputvoid Clk1_Disable(void)rGPHCON = rGPHCON&(3<

39、<20);/ GPH10 Input/*项目二代码* NAME: u2440mon.c DESC: u2440mon entry point,menu,download HISTORY: Mar.25.2002:purnnamu: S3C2400X profile.c is ported for S3C2410X. Mar.27.2002:purnnamu: DMA is enabled. Apr.01.2002:purnnamu: isDownloadReady flag is added. Apr.10.2002:purnnamu: - Selecting menu is avail

40、able in the waiting loop. So, isDownloadReady flag gets not needed - UART ch.1 can be selected for the console. Aug.20.2002:purnnamu: revision number change 0.2 -> R1.1 Sep.03.2002:purnnamu: To remove the power noise in the USB signal, the unused CLKOUT0,1 is disabled. */#defineGLOBAL_CLK1#includ

41、e <stdlib.h>#include <string.h>#include "def.h"#include "option.h"#include "2440addr.h"#include "2440lib.h"#include "2440slib.h"#include "mmu.h"#include "profile.h"#include "memtest.h"extern char Image$RO$Lim

42、it;extern char Image$RO$Base;extern char Image$RW$Limit;extern char Image$RW$Base;extern char Image$ZI$Limit;extern char Image$ZI$Base;void Isr_Init(void);void HaltUndef(void);void HaltSwi(void);void HaltPabort(void);void HaltDabort(void);void ClearMemory(void);void Clk0_Enable(int clock_sel);void C

43、lk1_Enable(int clock_sel);void Clk0_Disable(void);void Clk1_Disable(void);/extern void TFT_LCD_Init(void);/extern void TFT_LCD_Test(void);extern void TFT_LCD_Init(void);extern void TFT_LCD_Test(void);extern void Test_Touchpanel(void) ;extern void Test_Adc(void) ;/adc testextern void KeyScan_Test(voi

44、d) ;extern void RTC_Display(void) ;extern void Test_IrDA_Tx(void) ;extern void PlayMusicTest(void) ;extern void RecordTest( void ) ;extern void Test_Iic(void) ;extern void Test_SDI(void) ;extern void Camera_Test( void ) ;volatile U32 downloadAddress;void (*restart)(void)=(void (*)(void)0x0;volatile

45、unsigned char *downPt;volatile U32 downloadFileSize;volatile U16 checkSum;volatile unsigned int err=0;volatile U32 totalDmaCount;volatile int isUsbdSetConfiguration;int download_run=0;U32 tempDownloadAddress;int menuUsed=0;extern char Image$RW$Limit;U32 *pMagicNum=(U32 *)Image$RW$Limit;int consoleNu

46、m;static U32 cpu_freq;static U32 UPLL;static void cal_cpu_bus_clk(void)U32 val;U8 m, p, s;val = rMPLLCON;m = (val>>12)&0xff;p = (val>>4)&0x3f;s = val&3;/(m+8)*FIN*2 不要超出32位数!FCLK = (m+8)*(FIN/100)*2)/(p+2)*(1<<s)*100;val = rCLKDIVN;m = (val>>1)&3;p = val&1

47、;val = rCAMDIVN;s = val>>8;switch (m) case 0:HCLK = FCLK;break;case 1:HCLK = FCLK>>1;break;case 2:if(s&2)HCLK = FCLK>>3;elseHCLK = FCLK>>2;break;case 3:if(s&1)HCLK = FCLK/6;elseHCLK = FCLK/3;break;if(p)PCLK = HCLK>>1;elsePCLK = HCLK;if(s&0x10)cpu_freq = HCLK

48、;elsecpu_freq = FCLK;val = rUPLLCON;m = (val>>12)&0xff;p = (val>>4)&0x3f;s = val&3;UPLL = (m+8)*FIN)/(p+2)*(1<<s);UCLK = (rCLKDIVN&8)?(UPLL>>1):UPLL;void Temp_function() Uart_Printf("nPlease input 1-16 to select test!n"); struct void (*fun)(void);cha

49、r *tip;CmdTip = Temp_function, "Please input 1-16 to select test" , BUZZER_PWM_Test, "Test PWM" , RTC_Display, "RTC time display" , Test_Adc, "Test ADC" , KeyScan_Test, "Test interrupt and key scan" , Test_Touchpanel, "Test Touchpanel" , TF

50、T_LCD_Test, "Test TFT-LCD or VGA1024x768 module" , Test_Iic, "Test IIC EEPROM, if use QQ2440, please remove the LCD" , PlayMusicTest, "UDA1341 play music" , Test_SDI, "Test SD Card" , Camera_Test, "Test CMOS Camera", 0, 0;void _irq AdcTsAuto(void)int

51、 i;U32 saveAdcdly; if(rADCDAT0&0x8000) /Uart_Printf("nStylus Up!n");rADCTSC&=0xff;/ Set stylus down interrupt bit /else /Uart_Printf("nStylus Down!n");rADCTSC=(1<<3)|(1<<2); /Pull-up disable, Seq. X,Y postion measure.saveAdcdly=rADCDLY;rADCDLY=40000; /Normal conversion mode delay about (1/50M)*40000=0.8msrADCCON|=0x1; /start ADCwhile(rADCCON & 0x1);/check if Enable_start is lowwhile(!(rADCCON & 0x8000); /check if EC(

温馨提示

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

评论

0/150

提交评论