wince42系统定制与驱动开发.docx

上传人:b****6 文档编号:6711138 上传时间:2023-01-09 格式:DOCX 页数:21 大小:428.93KB
下载 相关 举报
wince42系统定制与驱动开发.docx_第1页
第1页 / 共21页
wince42系统定制与驱动开发.docx_第2页
第2页 / 共21页
wince42系统定制与驱动开发.docx_第3页
第3页 / 共21页
wince42系统定制与驱动开发.docx_第4页
第4页 / 共21页
wince42系统定制与驱动开发.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

wince42系统定制与驱动开发.docx

《wince42系统定制与驱动开发.docx》由会员分享,可在线阅读,更多相关《wince42系统定制与驱动开发.docx(21页珍藏版)》请在冰豆网上搜索。

wince42系统定制与驱动开发.docx

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;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 总结汇报

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1