arm9开发板实验报告2.doc_第1页
arm9开发板实验报告2.doc_第2页
arm9开发板实验报告2.doc_第3页
arm9开发板实验报告2.doc_第4页
arm9开发板实验报告2.doc_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

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

文档简介

郑州轻工业学院实 训 报 告实训名称: 触摸屏驱动程序设计 姓 名: 张克歌 院 (系): 计算机与通信工程学院 专业班级: 嵌入式09-01 学 号: 540913090151 指导教师: 韩雪琴 成 绩: 时间:2011年 8月 29日至 2011年 9 月 7 日一、需求说明1. 巩固和强化学生的嵌入式系统的基本概念和开发流程,掌握基本知识和基本技能。2. 掌握硬件开发平台、开发资源和软件开发环境,尤其是裸机嵌入式系统开发方法。掌握汇编和C语言混合编程技巧,熟悉系统启动引导过程,能够成功移植嵌入式系统引导程序。培养和训练学生综合利用所学基本知识和基本技能进行小型裸机程序开发的技能。3. 明确思路和任务,查询相关书籍、资料,重点分析S3C2440的触摸屏接口工作原理和相关寄存器。编写触摸屏初始化函数,确定XY位置转换模式。编写触摸屏中断初始化函数,中断服务函数。编写屏幕校准函数。确定坐标计算公式。编写触点数据采集函数。编写主函数,进入调试。实现触摸屏坐标点x、y的正确读取。二、功能描述 通过对AD转换器的配置触摸屏自动测试x/y位置模式,选择进入到触摸屏驱动函数。在进行触摸屏测试时,先进入函数内判断是否启动A/D转换,如果不是的话就跳出此函数,如果是的话进行下面的判断,看A/D转换是否结束,如果是,跳出函数,如果不是运行程序,并输出x、y的值。再回到触摸屏驱动函数,测试结束,清屏。 三、系统设计及实现一系统设计 1. 对触摸屏相关寄存器进行初始化,确定XY位置转换模式; 2. 对中断初始化,设计中断服务函数; 3. 通过校正函数和坐标计算公式,得出坐标。二流程图开始 在main函数中调用Test_Touchpanel函数对ADC相关寄存器进行配置设置中断,进行数据采集开中断,AD转换是否开启NYAD转换是否结束NY进行数据转换,并输出数据等待中断结束三实现 对ADC相关寄存器,中断进行设置中断服务函数在主函数中直接调用Test_Touchpanel函数 最终测试结果,每碰触一下触摸屏,就在终端中显示一对XP,YP值四、实训心得五、附录(代码) /* 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 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.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 #include #include def.h#include option.h#include 2440addr.h#include 2440lib.h#include 2440slib.h#include mmu.h#include profile.h#include memtest.hextern 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 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_Init(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) ;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 isUsbdSetConfiguration;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 = (val12)&0xff;p = (val4)&0x3f;s = val&3;/(m+8)*FIN*2 不要超出32位数!FCLK = (m+8)*(FIN/100)*2)/(p+2)*(11)&3;p = val&1;val = rCAMDIVN;s = val8;switch (m) case 0:HCLK = FCLK;break;case 1:HCLK = FCLK1;break;case 2:if(s&2)HCLK = FCLK3;elseHCLK = FCLK2;break;case 3:if(s&1)HCLK = FCLK/6;elseHCLK = FCLK/3;break;if(p)PCLK = HCLK1;elsePCLK = HCLK;if(s&0x10)cpu_freq = HCLK;elsecpu_freq = FCLK;val = rUPLLCON;m = (val12)&0xff;p = (val4)&0x3f;s = val&3;UPLL = (m+8)*FIN)/(p+2)*(11):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 , 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, UDA1341 play music , Test_SDI, Test SD Card , Camera_Test, Test CMOS Camera, 0, 0;void _irq AdcTsAuto(void)int 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=(13)|(12); /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(End of Conversion) flag is high, This line is necessary! while(!(rSRCPND & (BIT_ADC); /check if ADC is finished with interrupt bit xdata=(rADCDAT0&0x3ff); ydata=(rADCDAT1&0x3ff); /YH 0627, To check Stylus Up Interrupt. rSUBSRCPND|=BIT_SUB_TC; ClearPending(BIT_ADC); rINTSUBMSK=(BIT_SUB_TC); rINTMSK=(BIT_ADC); rADCTSC =0xd3; /Waiting for interrupt rADCTSC=rADCTSC|(18); / Detect stylus up interrupt signal.while(1)/to check Pen-up state if(rSUBSRCPND & (BIT_SUB_TC)/check if ADC is finished with interrupt bit /Uart_Printf(Stylus Up Interrupt!n);break;/if Stylus is up(1) state Uart_Printf(count=%03d XP=%04d, YP=%04dn, count+, xdata, ydata); /X-position Conversion data rADCDLY=saveAdcdly; rADCTSC=rADCTSC&(18); / Detect stylus Down interrupt signal. rSUBSRCPND|=BIT_SUB_TC; rINTSUBMSK=(BIT_SUB_TC);/ Unmask sub interrupt (TC) ClearPending(BIT_ADC);void Test_Touchpanel(void) rADCDLY=50000; /Normal conversion mode delay about (1/3.6864M)*50000=13.56ms rADCCON=(114)+(ADCPRS6); /ADCPRS En, ADCPRS Value Uart_Printf(ADC touch screen testn); rADCTSC=0xd3; /Wfait,XP_PU,XP_Dis,XM_Dis,YP_Dis,YM_En pISR_ADC = (int)AdcTsAuto;rINTMSK=BIT_ADC; /ADC Touch Screen Mask bit clearrINTSUBMSK=(BIT_SUB_TC);Uart_Printf(nType any key to exit!n);Uart_Printf(nStylus Down, please. n);Uart_Getch();rINTSUBMSK|=BIT_SUB_TC;rINTMSK|=BIT_ADC;Uart_Printf(Touch Screen Test is Finished!n);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 ;/dont use 100M!/boot_params.cpu_clk.val = 3;switch ( i ) case 0:/200key = 12;mpll_val = (9212)|(44)|(1);break;case 1:/300key = 13;mpll_val = (6712)|(14)|(1);break;case 2:/400key = 14;mpll_val = (9212)|(14)|(1);break;case 3:/440!key = 14;mpll_val = (10212)|(14)|(1);break;default:key = 14;mpll_val = (9212)|(112)&0xff, (mpll_val4)&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 );rMISCCR=rMISCCR&(13); / USBD is selected instead of USBH1 rMISCCR=rMISCCR&(113); / USB port 1 is enabled.rDSC0 = 0x2aa;rDSC1 = 0x2aaaaaaa;rCLKCON = 0xfffff0;/MMU_EnableICache();MMU_Init();/Uart_Printf(NOR Flash ID is 0x%08xn, GetFlashID();pISR_SWI=(_ISR_STARTADDRESS+0xf0);/for pSOSLed_Display(0x66);#if USBDMAmode=DMA;#elsemode=Int;#endifClk0_Disable();Clk1_Disable();mpll_val = rMPLLCON;TFT_LCD_Init();/TFT_LCD_Init();download_run=1; /The default menu is the Download & Run mode.Test_Touchpanel();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 is masked.void HaltUndef(void)Uart_Printf(Undefined instruction exception!n);while(1);void HaltSwi(void)Uart_Printf(

温馨提示

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

评论

0/150

提交评论