- 1、本文档共20页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
usb驱动的
Windows CE USB Function Driver驱动简析(2)-IST函数(基于WinCE5.0 SMDK2410 BSP的UFBFN驱动)
分类:?Windows CE2010-08-10 15:49?1176人阅读?评论(1)?收藏?举报
functionwincewindowsbytebufferexception
上一篇我们简单分析了UFN驱动中的Ufn_pdd函数,现在我们来看看IST主线程ISTMain函数及相关处理函数.1.ISTMainISTMain在UfnPdd_Start被创建:pContext-hIST = CreateThread(NULL, 0, ISTMain, pContext, 0, NULL);???ISTMain在参数检查后,设置优先级后,然后进入while循环,循环条件为fExitIST为FALSE,即不退出IST.循环内禁止所有端点中断,然后使能USB reset中断,使能端点0中断.然后等待中断事件hevInterrupt发生.发生后调用HandleUSBEvent进行中断处理.当退出线程fExitIST或重启线程fRestartIST为TRUE时,在禁止中断和清除中断状态后退出线程.并通知MDD层DETACH事件.
[c-sharp]?view plaincopy
static??
DWORD??
WINAPI??
ISTMain(??
????????LPVOID?lpParameter??
????????)??
{??
????SETFNAME();??
????FUNCTION_ENTER_MSG();??
??
????PCTRLR_PDD_CONTEXT?pContext?=?(PCTRLR_PDD_CONTEXT)?lpParameter;??
????ValidateContext(pContext);??
??
????CeSetThreadPriority(pContext-hIST,?pContext-dwISTPriority);??
??
????while?(!pContext-fExitIST)?{??
????????pContext-fRestartIST?=?FALSE;??
??
????????//?Enable?Suspend?Mode?in?the?Power?Register??
//????????SetClearReg(pContext,?PWR_REG_OFFSET,?SUSPEND_MODE_ENABLE_CTRL,?SET);??
??
????????//?Disable?All?Endpoint?interrupts??
????????WriteReg(pContext,?EP_INT_EN_REG_OFFSET,?0);?//?Disable?All??
??
????????//?Enable?Device?interrupts??
????????WriteReg(pContext,?USB_INT_EN_REG_OFFSET,?(USB_RESET_INTR));//?|?USB_SUSPEND_INTR));??
??
????????//?Enable?Endpoint?interrupt?0??
????????EnableEndpointInterrupt(pContext,?0);??
??
????????while?(TRUE)?{??
????????????DWORD?dwWait?=?WaitForSingleObject(pContext-hevInterrupt,?INFINITE);??
????????????if?(pContext-fExitIST?||?pContext-fRestartIST)?{??
????????????????break;??
????????????}??
??
????????????if?(dwWait?==?WAIT_OBJECT_0)?{??
????????????????HandleUSBEvent(pContext);??
????????????????InterruptDone(pContext-dwSysIntr);??
????????????}??
????????????else?{??
????????????????RETAILMSG(1,?(_T(%s?WaitForMultipleObjects?failed.?Exiting?IST./r/n),???
????????????????????pszFname));??
????????????????break;??
????????????}?
文档评论(0)