4639|1

854

帖子

0

TA的资源

五彩晶圆(中级)

楼主
 

S5pv210 OTG USB驱动学习了解 [复制链接]

// Interrupt thread routine.
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);

        WaitForSingleObject(pContext->hBootCompleteEvent, INFINITE);
        RETAILMSG(1,(TEXT("[UFNPDD] USB IST START\r\n")));
        pContext->FirstCall = FALSE;
        SetOtgDevicePower(pContext, D0);
       
    while (!pContext->fExitIST)
    {
        pContext->fRestartIST = FALSE;

        // Disable All Endpoint interrupts
        WriteReg(DAINTMSK, 0); // Disable All Endpoint

        // Clear any outstanding device & endpoint interrupts
        // USB Device Interrupt Status - Write a '1' to Clear
        WriteReg(GINTSTS, INT_RESUME | INT_EPMIS | INT_SDE | INT_RESET | INT_SUSPEND);

        // Enable Device General interrupts
        WriteReg(GINTMSK, INT_RESUME | INT_OUT_EP | INT_IN_EP | INT_EPMIS | INT_SDE | INT_RESET | INT_SUSPEND | INT_OTG);

        // Enable Endpoint0 interrupt
        EnableEndpointInterrupt(pContext, 0, USB_IN_TRANSFER);
        EnableEndpointInterrupt(pContext, 0, USB_OUT_TRANSFER);

        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
            {
                ERRMSG( (_T("%s WaitForMultipleObjects failed. Exiting IST.\r\n"), pszFname));
                break;
            }
        }

        // Notify Detach Event to MDD
        pContext->pfnNotify(pContext->pvMddContext, UFN_MSG_BUS_EVENTS, UFN_DETACH);

        pContext->fSpeedReported = FALSE;
        pContext->attachedState = UFN_DETACH;

        // Disable Device  interrupts - write Zeros to Disable
        WriteReg(GINTMSK, 0);

        // Disable endpoint interrupts - write Zeros to Disable
        WriteReg(DAINTMSK, 0);

    }

    FUNCTION_LEAVE_MSG();

    return 0;
}
点赞 关注
个人签名如果对linux,Android,wince 等嵌入式底层有兴趣的,请加这个QQ群吧,群号:27100460

回复
举报

854

帖子

0

TA的资源

五彩晶圆(中级)

沙发
 
BootCompleteApp.exe
这个用来干啥的?
代码不过几行

  1. int WINAPI WinMain(HINSTANCE hInstance,
  2.                      HINSTANCE hPrevInstance,
  3.                      LPTSTR     lpCmdLine,
  4.                      int       nCmdShow)
  5. {

  6.     HANDLE BootCompleteEvent = OpenEvent(EVENT_ALL_ACCESS, FALSE, TEXT("OEM/BootCompleteEvent"));
  7.     if (BootCompleteEvent == NULL)
  8.     {
  9.         RETAILMSG(1, (TEXT("[BootCompleteApp] ERROR: Notify OpenEvent() FAIL 0x%08X\r\n"), GetLastError()));
  10.         CloseHandle(BootCompleteEvent);
  11.         BootCompleteEvent = NULL;
  12.     }
  13.     else
  14.     {
  15.         RETAILMSG(1,(TEXT("[BootCompleteApp] Boot Complete Event Occured\r\n")));   
  16.         ResetEvent(BootCompleteEvent);
  17.         SetEvent(BootCompleteEvent);
  18.     }
  19.     return 0;
  20. }
复制代码
 
个人签名如果对linux,Android,wince 等嵌入式底层有兴趣的,请加这个QQ群吧,群号:27100460
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表