- /********************************************************************
- * 文件名:main.c
- * 功能:测试TFT屏的驱动函数
- * 作者:jianqi
- * 版本:v1.0
- ********************************************************************/
- #include"2440addr.h" //包含2440相关寄存器的设置
- #include"TFT.h"
- #include"Touch.h"
- #include"MMU.h"
- #include"UART.h"
- volatile int A,B,C,D,E,F,K; //校正参数
- int flagTS=0; //触摸屏转换标志
- int xdata,ydata; //触摸屏A/D转换数据
- /*******************************************
- * 名称:Touch_Int
- * 功能:触摸屏中断程序,读取A/D转换的值
- * 入口参数:无
- * 出口参数:无
- **********************************************/
- void __irq Touch_Int(void) //中断函数
- {
- rINTSUBMSK |= ((U32)0x1<<9); //关闭中断服务
- if (rADCUPDN&(U32)0x01) //触笔down
- {
- rADCUPDN=0; //清除标志位
- Send_String("down"); //打印信息(调试用)
- rADCTSC = (1<<3)|(1<<2); //上拉无效,自动XY坐标转换模式
- rADCCON|=0x1; //开始A/D转换
- while(rADCCON&0x1); //等待AD转换开始
- while(!(rADCCON&(1<<15))); //等待AD转换结束
- xdata=(rADCDAT0&0x3ff); //保存A/D转换的x位置
- ydata=(rADCDAT1&0x3ff); //保存A/D转换的y位置
- flagTS=0;
- rADCTSC=0xd3|(1<<8); //再次设置等待中断模式,目的判断触笔up
- }
- if((rADCUPDN>>1)&(U32)0x01) //触笔up
- {
- rADCUPDN=0; //清除标志位
- Send_String("up"); //打印信息(调试用)
- flagTS=1; //一次接触完毕
- rADCTSC=0xd3; //设置触摸屏为等待中断模式。
- }
- rSRCPND|=(U32)0x1<<31; //清中断标志
- rSUBSRCPND|=(U32)0x01<<9;
- rINTPND|=(U32)0x1<<31;
- rINTSUBMSK&=~((U32)0x1<<9); //打开中断服务
- }
- /*******************************************
- * 名称:Delay
- * 功能:延时
- * 入口参数:无
- * 出口参数:无
- **********************************************/
- void Delay(void)
- {
- int i,j,k;
- for(i=0;i<20;i++)
- {
- for(j=0;j<100;j++)
- {
- for(k=0;k<1000;k++);
- }
- }
- }
- /*******************************************
- * 名称:Calibration
- * 功能:触摸屏校正
- * 入口参数:无
- * 出口参数:无
- **********************************************/
- void Calibration(void)
- {
- char i;
- int xt[3],yt[3];
- TFT_CLearScreen(0xFFFFFF);
- Draw_Cross(32,24,0xFF0000);
- Draw_Cross(160,216,0xFF0000);
- Draw_Cross(288,120,0xFF0000);
- //依次读取三个采样点的坐标值
- for(i=0;i<3;i++)
- {
- while(flagTS==0)
- {
- Delay();
- }
- Send_String("Over");
- xt[i]=xdata;
- yt[i]=ydata;
- flagTS=0;
- }
- //计算参数
- K=(xt[0]-xt[2])*(yt[1]-yt[2])-(xt[1]-xt[2])*(yt[0]-yt[2]);
- A=(32-288)*(yt[1]-yt[2])-(160-288)*(yt[0]-yt[2]);
- B=(xt[0]-xt[2])*(160-288)-(32-288)*(xt[1]-xt[2]);
- C=yt[0]*(xt[2]*160-xt[1]*288)+yt[1]*(xt[0]*288-xt[2]*32)+yt[2]*(xt[1]*32-xt[0]*160);
- D=(24-120)*(yt[1]-yt[2])-(216-120)*(yt[0]-yt[2]);
- E=(xt[0]-xt[2])*(216-120)-(24-120)*(xt[1]-xt[2]);
- F=yt[0]*(xt[2]*216-xt[1]*120)+yt[1]*(xt[0]*120-xt[2]*24)+yt[2]*(xt[1]*24-xt[0]*216);
- }
- /*******************************************
- * 名称:Touch_Screen_Init
- * 功能:触摸屏中断初始化
- * 入口参数:无
- * 出口参数:无
- **********************************************/
- void Touch_Screen_Init(void)
- {
- rADCDLY=50000; //设置延时
- rADCCON=(1<<14)|(20<<6); //设置A/D预分频
- rADCTSC=0xd3; //设置等待中断模式
- rSUBSRCPND|=(1<<9);
- rSRCPND|=(1<<31);
- rINTPND|=(1<<31);
- rINTSUBMSK&=~(1<<9);
- rINTMSK&=~(1<<31); //打开中断屏蔽
- }
- /*******************************************
- * 名称:Clk_Set
- * 功能:关于系统时钟的初始化
- * 入口参数:无
- * 出口参数:无
- **********************************************/
- void Clk_Set(void)
- {
- int count;
- rUPLLCON=(56<<12)|(2<<4)|2; //UCLK为48MHZ
- for(count=0;count<10;count++)
- {
- ;
- }
- rMPLLCON=(92<<12)|(1<<4)|1; //FCLK为400MHZ
- rCLKDIVN=(0<<3)|(2<<1)|1; //HCLK位100MHZ,PCLK为50MHZ
- rCAMDIVN=(0<<9); //PCLK=HCLK/4
- }
- /*******************************************
- * 名称:Main
- * 功能:测试TFT屏幕
- * 入口参数:无
- * 出口参数:无
- **********************************************/
- void Main(void)
- {
- int x,y;
- MMU_Init(); //MMU初始化
- UART0_init(); //串口初始化
- TFT_Power_Enable(1); //TFT电源管理使能
- TFT_Contraller_Init(); //TFT初始化
- TFT_Video_ON(1); //打开TFT
- pISR_ADC=(U32)Touch_Int; //注册触摸屏中断函数
- Touch_Screen_Init(); //触摸屏初始化
- Calibration(); //触摸屏校正
- TFT_CLearScreen((0x00<<11) | (0x00<<5) | (0x1f));
- //Paint_Picture(0,0,480,272,TQ_LOGO_480272_2);
- while(1)
- {
- if(flagTS)
- {
- flagTS=0;
- Send_String("OK");
- x=(A*xdata+B*ydata+C)/K; //计算X轴坐标
- y=(D*xdata+E*ydata+F)/K; //计算Y轴坐标
- Draws_Quare(x,y,0x00); //在触摸坐标处绘制正方形
- }
- }
- }
上一篇:NANDFlashd的读写(基于s3c2440)
下一篇:利用中断改进UART功能
推荐阅读最新更新时间:2024-03-16 14:52