wince42系统定制与驱动开发.docx
- 文档编号:6711138
- 上传时间:2023-01-09
- 格式:DOCX
- 页数:21
- 大小:428.93KB
wince42系统定制与驱动开发.docx
《wince42系统定制与驱动开发.docx》由会员分享,可在线阅读,更多相关《wince42系统定制与驱动开发.docx(21页珍藏版)》请在冰豆网上搜索。
wince42系统定制与驱动开发
WindowsCE.Net系统定制与驱动开发
实验指导手册Ver3.1
Forpersonaluseonlyinstudyandresearch;notforcommercialuse
Forpersonaluseonlyinstudyandresearch;notforcommercialuse
一、安装Edukit2410的WinCE.NETBSP
1.拷贝D盘中的“D:
\内蒙培训\Wince代码\EduKit2410”整个目录到Platform目录下。
2.去掉该目录中所有文件的只读属性。
3.打开PlatformBuilder4.2,单击【File】>【ManageCatalogFeatures…】菜单项,如图1所示。
图1
4.在Catalog列表中单击选中“smdk2410.cec”文件,如图2所示,然后单击【Remove】按钮,删除PB4.2自带的smdk2410BSP。
图2
5.单击【Import】按钮,导入“PLATFORM\EduKit2410\EduKit2410.cec”文件,然后点击OK返回。
6.完成第5步操作后,系统将在Catalog的BSPs文件夹下自动添加“EmbestEduKit2410:
ARMV4I项”,如图4所示,此时BSP安装完成。
二、Wince系统工程的创建以及编译
1.打开PlatformBuilder4.2,单击【FILE】>【NewPaltform】菜单项,如图所示。
2.在弹出的【NewPlatformWizard–Step1】对话框中单击【Next】按钮,如图所示。
3.在弹出的【NewPlatformWizard–Step2】对话框中选择BSP,如下图所示:
4.在弹出的【NewPlatformWizard–Step3】对话框中输入工程的名称,如“edukit2410”,(下图示例中工程名输入了另外一个名字)
然后选择“MobileHandeld”
5.直接点击“Finish”,
6.接着单击【Next】按钮。
7.在【NewPlatformWizard–Step8】对话框中单击【Finish】按钮,如下图所示,完成新平台的建立。
8.在PlatformBuilder中点击“platform”,在弹出的菜单中选择【Settings…】菜单项;在弹出的对话框中选择BuildOptions:
取消【EnableKITL】和【EnableCETargetControlSupport】以及【EnableFullKernelMode】复选框的选中状态,如下图所示。
最后单击【OK】按钮完成平台设置。
9.在右边的列表中依次如下图展开Catalog->BSPs->EmbestEduKit2410:
ARMV4I–>DeviceDrivers->Networking->LocalAreaNetworking(LAN)device,右击CS8900,选择“Addtoplatform”。
图14
10.单击【Build】菜单,点击BuildPlatform开始编译新平台,大概要花费20分钟左右的时间。
编译完成后,就可以在当前工程的路径下面看到生成的目标文件eboot.nb0以及nk.bin。
图15
三、Wince的烧写:
具体请参看资料:
“烧写说明”
四、添加系统特性:
MFC支持;U盘支持、USB鼠标支持
1.在PB的右边列选框中选中“Catalog/CoreOS/Displaybasedevices/ApplicationsandServicesDevelopment”目录下的“StandardSDKforWindowsCE.NET”,然后单击鼠标右键,在弹出的快捷菜单中选择【AddToPlatform】菜单项,如下图所示。
2.在PB的右边列选框中选中“Catalog/CoreOS/Displaybasedevices/ApplicationsandServicesDevelopment”目录下的“MicrosoftFoundationClasses(MFC)”,然后单击鼠标右键,在弹出的快捷菜单中选择【AddToPlatform】菜单项,如下图所示。
3.按照下图所示展开,在蓝色条处点击中点击右键,在弹出的快捷菜单中选择【AddToPlatform】菜单项。
添加USB主控器驱动支持
4.按照下图所示展开,在蓝色条处点击中点击右键,在弹出的快捷菜单中选择【AddToPlatform】菜单项。
添加U盘支持
5.按照下图所示展开,在蓝色条处点击中点击右键,在弹出的快捷菜单中选择【AddToPlatform】菜单项。
添加USB鼠标及键盘支持。
6.单击【Build】菜单,点击RebuildPlatform,开始编译新平台重新编译并下载,系统即可正常支持MFC程序了。
五、导出SDK
1.在PlatformBuilder中打开工程,然后单击【Platform】>【SDK】>【NewSDK】菜单项,如下图所示。
图44
2.这时将弹出【ExportSDKWizard】对话框,单击【下一步】按钮,进行生成的SDK的名称和提供者姓名的填写(可随意填写),如下图所示。
图45
3.单击【下一步】按钮,按照图46所示的完成“developmentlanguage”属性的设置(若系统已经加入MFC特性并编译,则MFC相关的两项为灰体必选项)。
图46
4.最后单击【下一步】按钮完成设定。
在PlatformBuilder中打开工程,再次单击【Platform】>【SDK】>【ConfigureSDK】菜单项可以设定SDK文件的输出路径或更改SDK文件名称和提供者信息。
5.在PlatformBuilder中单击【Platform】>【ConfigureSDK】>【BuildeSDK】菜单项开始创建SDK文件,如下图所示。
图47
6.完成SDK的创建后,双击生成的.msi文件进行SDK的安装(该文件在\WINCE420\Public\YouProjectName\SDK目录下)。
六、了解Wince下虚拟地址的使用:
(通过虚拟地址操作IO资源)
1.找到\WINCE420\PLATFORM\EduKit2410\eboot\main.c文件,找到voidmain(void)这个函数的实现部分,在该函数的上面添加如下代码:
voidbeeptest()
{
volatileIOPreg*v_pIOPregs=(IOPreg*)IOP_BASE;
unsignedinti;
//if(VitualMap((PVOID)v_pIOPregs,0x,sizeof(IOPreg)))
{
v_pIOPregs->rGPBCON=v_pIOPregs->rGPBCON&0xFFFFFC|1;
v_pIOPregs->rGPBDAT&=0xFFFFFE;
}
for(i=0;i<800000;i++)
v_pIOPregs->rGPBDAT&=0xFFFFFE;
v_pIOPregs->rGPBDAT|=1;
}
2.在voidmain(void)函数里调用上面添加的函数beeptest():
voidmain(void)
{
Beeptest();
BootloaderMain();
SPIN_FOREVER;
}
3.通过PB打开定制的工程,在PB中点击“Build”---“Rebuild”菜单,开始编译工程。
4.编译完成后会生成新的eboot.nb0;通过前面烧写中所述的方法下载Eboot.nb0到目标平台运行。
这个时候,会听到蜂鸣器的一声响。
想一想Eboot中操作虚拟地址的方法。
七、通过在Eboot中的开机Demo的实现了解配置文件;了解液晶控制方法。
1.拷贝文件“..\内蒙培训\Wince代码\demo.c”到C:
\WINCE420\PLATFORM\EduKit2410\eboot下。
2.找到C:
\WINCE420\PLATFORM\EduKit2410\eboot\main.c文件,找到voidmain(void)这个函数的实现部分,在该函数的上面添加如下代码:
staticvoidInitDisplay()
{
inti,j;
unsignedchar*FrameBuffer;
volatileIOPreg*s2410IOP;
volatileLCDreg*s2410LCD;
#defineFRAMEBUF_DMA_BASE_Eboot(0x)
#defineFRAMEBUF(0xAE000000)
FrameBuffer=(unsignedchar*)FRAMEBUF;
s2410IOP=(IOPreg*)IOP_BASE;
s2410LCD=(LCDreg*)LCD_BASE;
//LCDportinitialize.
s2410IOP->rGPCUP=0xFFFFFFFF;
s2410IOP->rGPCCON=0xAAAAAAAA;
s2410IOP->rGPCCON=0xAAAAAAAA;
s2410IOP->rGPDUP=0xFFFFFFFF;
s2410IOP->rGPDCON=0xAAAAAAAA;
s2410IOP->rGPGCON&=~(3<<8);/*SetLCD_PWRENasoutput*/
s2410IOP->rGPGCON|=(1<<8);
s2410IOP->rGPGDAT|=(1<<4);/*BacklightON*/
//EmbestEduKit-IIIv
s2410IOP->rGPGCON&=~(3<<8);/*SetLCD_PWRENasoutput*/
s2410IOP->rGPCCON|=1<<8;//GPC4asoutput
s2410IOP->rGPCCON=0xAAAAA5AA;
//130hz@50Mhz,WLH=16hclk,WDLY=16hclk,LINEBLANK=16*8hclk,VD=8
#defineCLKVAL_CSTN(6)
#defineLCD_XSIZE_CSTN(320)
#defineLCD_YSIZE_CSTN(240)
#defineHOZVAL_CSTN(LCD_XSIZE_CSTN*3/8-1)//ValidVDdatalinenumberis8.
#defineLINEVAL_CSTN(LCD_YSIZE_CSTN-1)
#defineWDLY_CSTN(0)
#defineLINEBLANK_CSTN(16&0xff)
#defineMVAL(13)
#defineWLH_CSTN(0)
//8-bitsinglescan,8bppCSTN,ENVID=off
s2410LCD->rLCDCON1=(CLKVAL_CSTN<<8)|(MVAL_USED<<7)|(2<<5)|(3<<1)|0;
s2410LCD->rLCDCON2=(0<<24)|(LINEVAL_CSTN<<14)|(0<<6)|(0<<0);
s2410LCD->rLCDCON3=(WDLY_CSTN<<19)|(HOZVAL_CSTN<<8)|(LINEBLANK_CSTN<<0);
s2410LCD->rLCDCON4=(MVAL<<8)|(WLH_CSTN<<0);
s2410LCD->rLCDCON5=(1<<1);
s2410LCD->rLCDSADDR1=((FRAMEBUF_DMA_BASE_Eboot>>22)<<21)|M5D(FRAMEBUF_DMA_BASE_Eboot>>1);
s2410LCD->rLCDSADDR2=M5D((FRAMEBUF_DMA_BASE_Eboot+(LCD_XSIZE_CSTN*LCD_YSIZE_CSTN))>>1);
s2410LCD->rLCDSADDR3=(((LCD_XSIZE_CSTN*1-LCD_XSIZE_CSTN)/1)<<11)|(LCD_XSIZE_CSTN/2);
s2410LCD->rDITHMODE=0x0;
s2410LCD->rREDLUT=0xfdb96420;
s2410LCD->rGREENLUT=0xfdb96420;
s2410LCD->rBLUELUT=0xfb40;
s2410LCD->rLCDINTMSK|=(3);//MASKLCDSubInterrupt
s2410LCD->rLPCSEL&=(~7);//DisableLPC3600
s2410LCD->rTPAL=0;//DisableTempPalette
s2410LCD->rLCDCON1|=1;
s2410IOP->rGPCDAT|=1<<4;//lightLCD
//fordemodisplay
for(i=0;i<240;i++)
for(j=0;j<320;j++)
{
*FrameBuffer=gImage_demo[i*320+j];
//*FrameBuffer=0xf0;
FrameBuffer++;
}
}
3.在voidmain(void)函数里调用上面添加的函数staticvoidInitDisplay()
voidmain(void)
{
Beeptest();
InitDisplay();
BootloaderMain();
SPIN_FOREVER;
}
4.在main.c文件的#include"warning.h"下面添加一行#include"demo.h"。
5.找到C:
\WINCE420\PLATFORM\EduKit2410\eboot下的。
,按着下面所示进行修改(显示已修改部分),修改完成后,保存并关闭。
……..
;EBOOT8c03800000020000RAMIMAGE
;EBOOT8c03800000040000RAMIMAGE;前面加分号
EBOOT8c03800000080000RAMIMAGE;添加的地方
;N.B:
bootmediablocksizealigned
;ROMSIZE=16000;前面加分号
ROMSIZE=80000;添加的地
6.通过PB打开定制的工程,在PB中点击“Build”---“Rebuild”菜单,开始编译工程。
7.编译完成后会生成新的eboot.nb0;通过前面烧写中所述的方法下载Eboot.nb0到目标平台运行。
这个时候,可以看到液晶屏上的图片显示。
八、触摸屏中断的添加和响应
1.内核处理部分
1.在“:
\WINCE420\PLATFORM\EduKit2410\INC\oalintr.h”找到如下代码:
(逻辑中断号的定义)
#defineSYSINTR_TOUCH(SYSINTR_FIRMWARE+1)
#defineSYSINTR_TOUCH_CHANGED(SYSINTR_FIRMWARE+8)
2.在“:
\WINCE420\PLATFORM\EduKit2410\KERNEL\HAL\ARM\armint.c”中找到“OEMInterruptHandler”的实现部分,找到以下代码。
if(SubIntPendVal&INTSUB_TC)
{
/*
s2410INT->rINTSUBMSK|=INTSUB_TC;
s2410INT->rSUBSRCPND=INTSUB_TC;
s2410INT->rINTMSK|=BIT_ADC;
s2410INT->rSRCPND=BIT_ADC;
if(s2410INT->rINTPND&BIT_ADC)s2410INT->rINTPND=BIT_ADC;
if((s2410ADC->rADCDAT0&0x8000)||(s2410ADC->rADCDAT1&0x8000)){
s2410INT->rINTMSK|=BIT_TIMER1;//Masktimer1interrupt.
s2410INT->rSRCPND=BIT_TIMER1;//Clearpendingbit
if(s2410INT->rINTPND&BIT_TIMER1)s2410INT->rINTPND=BIT_TIMER1;
//RETAILMSG(0,(TEXT("INTTouchpenup\r\n")));
odo_tsb->status=TOUCH_PEN_UP;
}
else{
//RETAILMSG(0,(TEXT("INTTouchpendown\r\n")));
odo_tsb->status=TOUCH_PEN_DOWN;
}
returnSYSINTR_TOUCH_CHANGED;
*/
}
上面这两部分代码中间部分已被注释掉,请将其开启
3.在“:
\WINCE420\PLATFORM\EduKit2410\KERNEL\HAL\cfw.c”中找到函数OEMInterruptEnable的实现,找到下面这段代码
caseSYSINTR_SDMMC_CARD_DETECT:
s2410IOP->rEINTPEND=(1<<18);
s2410IOP->rEINTMASK&=~(1<<18);
s2410INT->rSRCPND=BIT_EINT8_23;
if(s2410INT->rINTPND&BIT_EINT8_23)s2410INT->rINTPND=BIT_EINT8_23;
s2410INT->rINTMSK&=~BIT_EINT8_23;
RETAILMSG(1,(TEXT(":
:
:
SYSINTR_SDMMC_CARD_DETECTOEMInterruptEnable\r\n")));
break;
在其后面添加如下代码。
caseSYSINTR_TOUCH:
//RETAILMSG(0,(TEXT("OEMInterruptEnable:
TOUCH\n\r\n")));
break;
caseSYSINTR_TOUCH_CHANGED:
//RETAILMSG(0,(TEXT("OEMInterruptEnable:
TOUCHCHANGED\r\n\r\n")));
s2410INT->rINTMSK&=~BIT_ADC;
s2410INT->rINTSUBMSK&=~INTSUB_TC;
break;
4.找到OEMInterruptDisable的实现,找到下面这段代码。
caseSYSINTR_SDMMC_CARD_DETECT:
s2410IOP->rEINTMASK|=(1<<18);
s2410INT->rINTMSK|=BIT_EINT8_23;
//RETAILMSG(1,(TEXT(":
:
:
SYSINTR_SDMMC_CARD_DETECTOEMInterruptDisable\r\n")));
break;
在其后添加如下代码:
caseSYSINTR_TOUCH:
break;
caseSYSINTR_TOUCH_CHANGED:
s2410INT->rINTMSK|=BIT_ADC;
s2410INT->rINTSUBMSK|=INTSUB_TC;
break;
5.找到OEMInterruptDone的实现,找到下面这段代码。
caseSYSINTR_SDMMC_CARD_DETECT:
s2410IOP->rEINTMASK&=~(1<<18);
s2410INT->rINTMSK&=~BIT_EINT8_23;
//RETAILMSG(1,(TEXT(":
:
:
SYSINTR_SDMMC_CARD_DETECTOEMInterruptDone\r\n")));
break;
在其后添加如下代码:
caseSYSINTR_TOUCH:
s2410INT->rINTMSK&=~BIT_TIMER1;
break;
caseSYSINTR_TOUCH_CHANGED:
s2410INT->rINTMSK&=~BIT_ADC;
s2410INT->rINTSUBMSK&=~INTSUB_TC;
//RETAILMSG(0,(TEXT("OEMInterruptDone:
TOUCHCHANGED\n\r\n")));
break;
6.在“:
\WINCE420\PLATFORM\EduKit2410\FILES\platform.bib文件里找到如下代码:
;touch.dll$(_FLATRELEASEDIR)\touch.dllNKSH
将上面代码前面的分号去掉;然后保存关闭platform.bib
7.在“:
\WINCE420\PLATFORM\EduKit2410\drivers\dirs文件,找到如下代码:
DIRS=\
drvlib\
pwrbtn\
serial\
wavedev\
wavclick\
display\
backlite\
usb\
pcmcia\
keybd\
nandflsh\
在最后一行添加一行touchp\,然后保存并关闭。
8.至此完成中断在内核中的注册,需重新编译操作系统镜像方能生效。
九、LED驱动的添加
1.创建源码。
2.修改平台配置文件夹。
十、LED应用调用驱动
十一、串口应用程序实验
十二、系统目录的定制(见PPT5)
十三、应用程序开机自启动(见PPT5)
仅供个人用于学习、研究;不得用于商业用途。
Forpersonaluseonlyinstudyandresearch;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- wince42 系统 定制 驱动 开发