Wince BSP从5.0移植到6.0(三)
2012-02-28 11:37
501 查看
转载至:http://blog.csdn.net/pony_maggie/article/details/5382094
作者:小马
第三部分是关于触摸屏驱动的移植
1
在platform.bib里把原来注释掉的下面两行置为有效.
k.touch.dll $(_FLATRELEASEDIR)/DeviceEmulator_touch.dll NK SHK
touch.dll $(_FLATRELEASEDIR)/DeviceEmulator_touch.dll NK SH
这两个就是触摸屏驱动的动态库文件.
2
到platform.reg下找到[HKEY_LOCAL_MACHINE/HARDWARE/DEVICEMAP/TOUCH]项,改为如下
"CalibrationData"="499,69971,175 67,1243 899,1219 899,167 "
这个是校准值. 如果你重新做了校准,新的值会保存在这个数据里. 这组数字并不是像素值, 而是AD采样值,因为这块板子所配的触摸屏是基于电阻式的, 利用四线产生屏幕偏置电压, 然后AD采样,电压值转化为坐标值.
3
到驱动目录下找到s3c2410x_touch.cpp文件. 在这个文件下,对于触摸屏驱动,主要就是有两个地方需要修改, 一个是采样频率的修改, 还有就是获取触点位置方法的修改.这两处都是硬件相关的,所以必须移植. 比如原来的BSP是用定时器1控制采样频率, 而6.0的BSP用的是timer3,而且采样频率也是不一样的.
3.1 采样频率相关
#define ADCPRS 200//改为:
#define ADCPRS 21
找到下面这个全局变量
PRIVATE INT TSP_CurRate= TSP_SAMPLE_RATE_HIGH;
改为
PRIVATE INT TSP_CurRate= 0;
找到#define TIMER3_DIVIDER 2
改为
#define TIMER3_DIVIDER 4
找到TSP_PowerOn函数,改为实现如下:
PRIVATE VOID
TSP_PowerOn(VOID)
{
RETAILMSG(1,(TEXT("::: TSP_PowerOn()/r/n")));
/* Use TSXM, TSXP, TSYM, TSYP Clear GPG15, 14, 13, 12 */
v_pIOPregs->GPGCON&= ~((0x03 << 30)|(0x03 << 28)|(0x03 << 26)|(0x03<< 24));
v_pIOPregs->GPGCON |= ((0x3 << 30) | (0x3 << 28) | (0x3 << 26) | (0x3<< 24));
v_pIOPregs->GPGUP|= ((0x01 << 15)|(0x01 << 14)|(0x01 << 13)|(0x01<<12));
v_pADCregs->ADCDLY = 30000;
v_pADCregs->ADCCON = (1<<14)|(ADCPRS<<6)|(7<<3);
v_pADCregs->ADCTSC = (0 << 8) | (1 << 7) |
(1 << 6) | (0 << 5) |
(1 << 4) | (0 << 3) | (0 << 2) | (3 << 0);
4000
v_pINTregs->INTSUBMSK &= ~(1<<IRQ_SUB_TC);
v_pPWMregs->TCFG1 &= ~(0xf << 12); /* Timer3's Divider Value*/
v_pPWMregs->TCFG1 |= (1 << 12); /* 1/4 */
v_pPWMregs->TCNTB3 =(10 * (g_s3c2410_pclk / (24+1) / TIMER3_DIVIDER )) / 1000; /* InterruptFrequency*/
v_pPWMregs->TCMPB3= 0;
}
3. 2 获取触点位置相关.
找到下面几个宏定义:
#define TSP_MINX 85
#define TSP_MINY 105
#define TSP_MAXX 965
#define TSP_MAXY 980
改为如下的值:
#define TSP_MINX 88
#define TSP_MINY 84
#define TSP_MAXX 952
#define TSP_MAXY 996
上面几个是边界点,影响不是很大, 不过我还是按照原BSP的值做了修改.
TSP_TransXY和TSP_GetXY这两个函数是重点. 这两个函数决定了当你按下触摸屏时,系统获取的位置. 这两个函数如果没有写好,会出现类似你点了左边,右边有反应,或者你点了左上角,右下角有反应. 这两个函数的实现也和屏幕的分辨率有关.
TSP_TransXY的实现如下:
PRIVATE void
TSP_TransXY(INT *px, INT *py)
{
*px = (*px >= TSP_MAXX) ? (TSP_MAXX) : *px;
*py = (*py >= TSP_MAXY) ? (TSP_MAXY) : *py;
*px = (*px - TSP_MINX);
*py = (*py - TSP_MINY);
*px = (*px >= 0) ? *px : 0;
*py = (*py >= 0) ? *py : 0;
*px = *px * TSP_LCDY / (TSP_MAXX - TSP_MINX);
*py = *py * TSP_LCDX / (TSP_MAXY - TSP_MINY);
*px = (*px >= TSP_LCDY)? (TSP_LCDY - 1) : *px;
*py = (*py >= TSP_LCDX)? (TSP_LCDX - 1) : *py;
*px = TSP_LCDY - *px - 1;
*py = TSP_LCDX - *py - 1;
}
其中,
TSP_LCDX= (LCD_YSIZE_TFT * 4);//240*4
TSP_LCDY= (LCD_XSIZE_TFT * 4);//320*4
在TSP_GetXY函数里找到下面两行:
x= (0x3ff & v_pADCregs->ADCDAT1);
y= 0x3ff - (0x3ff & v_pADCregs->ADCDAT0);
改为:
y= (0x3ff & v_pADCregs->ADCDAT1);
x= (0x3ff & v_pADCregs->ADCDAT0);
到这里,触摸屏驱动部分基本移植成功, 目前还有个小问题. 左键双击不起作用, 单击没问题.
正常情况下,长按才是右击, 我的短按也会弹出快捷菜单. Csdn上问了,未果
作者:小马
第三部分是关于触摸屏驱动的移植
1
在platform.bib里把原来注释掉的下面两行置为有效.
k.touch.dll $(_FLATRELEASEDIR)/DeviceEmulator_touch.dll NK SHK
touch.dll $(_FLATRELEASEDIR)/DeviceEmulator_touch.dll NK SH
这两个就是触摸屏驱动的动态库文件.
2
到platform.reg下找到[HKEY_LOCAL_MACHINE/HARDWARE/DEVICEMAP/TOUCH]项,改为如下
"CalibrationData"="499,69971,175 67,1243 899,1219 899,167 "
这个是校准值. 如果你重新做了校准,新的值会保存在这个数据里. 这组数字并不是像素值, 而是AD采样值,因为这块板子所配的触摸屏是基于电阻式的, 利用四线产生屏幕偏置电压, 然后AD采样,电压值转化为坐标值.
3
到驱动目录下找到s3c2410x_touch.cpp文件. 在这个文件下,对于触摸屏驱动,主要就是有两个地方需要修改, 一个是采样频率的修改, 还有就是获取触点位置方法的修改.这两处都是硬件相关的,所以必须移植. 比如原来的BSP是用定时器1控制采样频率, 而6.0的BSP用的是timer3,而且采样频率也是不一样的.
3.1 采样频率相关
#define ADCPRS 200//改为:
#define ADCPRS 21
找到下面这个全局变量
PRIVATE INT TSP_CurRate= TSP_SAMPLE_RATE_HIGH;
改为
PRIVATE INT TSP_CurRate= 0;
找到#define TIMER3_DIVIDER 2
改为
#define TIMER3_DIVIDER 4
找到TSP_PowerOn函数,改为实现如下:
PRIVATE VOID
TSP_PowerOn(VOID)
{
RETAILMSG(1,(TEXT("::: TSP_PowerOn()/r/n")));
/* Use TSXM, TSXP, TSYM, TSYP Clear GPG15, 14, 13, 12 */
v_pIOPregs->GPGCON&= ~((0x03 << 30)|(0x03 << 28)|(0x03 << 26)|(0x03<< 24));
v_pIOPregs->GPGCON |= ((0x3 << 30) | (0x3 << 28) | (0x3 << 26) | (0x3<< 24));
v_pIOPregs->GPGUP|= ((0x01 << 15)|(0x01 << 14)|(0x01 << 13)|(0x01<<12));
v_pADCregs->ADCDLY = 30000;
v_pADCregs->ADCCON = (1<<14)|(ADCPRS<<6)|(7<<3);
v_pADCregs->ADCTSC = (0 << 8) | (1 << 7) |
(1 << 6) | (0 << 5) |
(1 << 4) | (0 << 3) | (0 << 2) | (3 << 0);
4000
v_pINTregs->INTSUBMSK &= ~(1<<IRQ_SUB_TC);
v_pPWMregs->TCFG1 &= ~(0xf << 12); /* Timer3's Divider Value*/
v_pPWMregs->TCFG1 |= (1 << 12); /* 1/4 */
v_pPWMregs->TCNTB3 =(10 * (g_s3c2410_pclk / (24+1) / TIMER3_DIVIDER )) / 1000; /* InterruptFrequency*/
v_pPWMregs->TCMPB3= 0;
}
3. 2 获取触点位置相关.
找到下面几个宏定义:
#define TSP_MINX 85
#define TSP_MINY 105
#define TSP_MAXX 965
#define TSP_MAXY 980
改为如下的值:
#define TSP_MINX 88
#define TSP_MINY 84
#define TSP_MAXX 952
#define TSP_MAXY 996
上面几个是边界点,影响不是很大, 不过我还是按照原BSP的值做了修改.
TSP_TransXY和TSP_GetXY这两个函数是重点. 这两个函数决定了当你按下触摸屏时,系统获取的位置. 这两个函数如果没有写好,会出现类似你点了左边,右边有反应,或者你点了左上角,右下角有反应. 这两个函数的实现也和屏幕的分辨率有关.
TSP_TransXY的实现如下:
PRIVATE void
TSP_TransXY(INT *px, INT *py)
{
*px = (*px >= TSP_MAXX) ? (TSP_MAXX) : *px;
*py = (*py >= TSP_MAXY) ? (TSP_MAXY) : *py;
*px = (*px - TSP_MINX);
*py = (*py - TSP_MINY);
*px = (*px >= 0) ? *px : 0;
*py = (*py >= 0) ? *py : 0;
*px = *px * TSP_LCDY / (TSP_MAXX - TSP_MINX);
*py = *py * TSP_LCDX / (TSP_MAXY - TSP_MINY);
*px = (*px >= TSP_LCDY)? (TSP_LCDY - 1) : *px;
*py = (*py >= TSP_LCDX)? (TSP_LCDX - 1) : *py;
*px = TSP_LCDY - *px - 1;
*py = TSP_LCDX - *py - 1;
}
其中,
TSP_LCDX= (LCD_YSIZE_TFT * 4);//240*4
TSP_LCDY= (LCD_XSIZE_TFT * 4);//320*4
在TSP_GetXY函数里找到下面两行:
x= (0x3ff & v_pADCregs->ADCDAT1);
y= 0x3ff - (0x3ff & v_pADCregs->ADCDAT0);
改为:
y= (0x3ff & v_pADCregs->ADCDAT1);
x= (0x3ff & v_pADCregs->ADCDAT0);
到这里,触摸屏驱动部分基本移植成功, 目前还有个小问题. 左键双击不起作用, 单击没问题.
正常情况下,长按才是右击, 我的短按也会弹出快捷菜单. Csdn上问了,未果
相关文章推荐
- Wince 6.0 BSP的移植(一)
- Wince 6.0 BSP的移植(二)
- WinCE5.0 SMDK2410 BSP在GEC2410开发板上的移植(11)-BINFS在Nand上的实现(Multi-Bin的实现)
- wince 6.0 BSP移植文档
- Wince 6.0 BSP的移植(一)
- wince 6.0 BSP 移植问题
- Wince 6.0 BSP的移植(二)
- WinCE6.0 DEVICEEMULATOR BSP在GEC2410开发板上的移植(3)-PwrButton驱动移植及分析
- WinCE 5.0移植笔记
- WinCE6.0 DEVICEEMULATOR BSP的BackLight驱动简析
- (转载)巧借WinCE BSP移植,嵌入式系统开发有捷径
- wince 5.0 .2440 5.0BSP的中断过程(转)
- Wince BSP从5.0移植到6.0(三)
- WinCE 5.0 SMDK2440BSP—— Leddriver分析
- 关于2440从5.0到6.0的移植之OAL篇
- 加快编译WinCE 6.0的驱动和BSP速度的方法(初级)
- WINCE 6.0 5.0 区别
- 在qemu中运行wince 5.0/6.0(1)
- AT91SAM9263 WINCE 6.0 R2驱动开发-官方BSP包EBOOT复位芯片解决
- wince 6.0或5.0 windows mobile 6.5 trayicon 如何创建 系统托盘 图标