⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 usbtcdisp1582interrupt.c

📁 This the compressed USB driver source code for vxworks5.6. It has device controller driver and other
💻 C
📖 第 1 页 / 共 3 页
字号:
/* usbTcdIsp1582Interrupt.c - defines modules for interrupt handling *//* Copyright 2004 Wind River Systems, Inc. *//*Modification history--------------------01g,17sep04,ami  WindView Instrumentation Changes01f,02aug04,mta  Modification History Changes01e,19jul04,ami Coding Convention Changes01d,09jul04,mta Fixes based on pentium full speed testing01c,30jun04,pdg Bug fixes - isp1582 full speed testing01b,01jun04,mta Changes for Interrupt Mode01a,21apr04,ami First*//*DESCRIPTIONThis file implements the interrupt related functionalities of TCD(Target Controller Driver) for the Philips ISP 1582.INCLUDE FILES: usb/usbPlatform.h, usb/ossLib.h, usb/usbPciLib.h, usb/usb.h,               usb/target/usbHalCommon.h, usb/target/usbTcd.h               drv/usb/target/usbisp1582.h,               drv/usb/target/usbIsp1582Eval.h,               drv/usb/target/usbIsp1582Tcd.h, usb/target/usbPeriphInstr.h*//* includes */#include "usb/usbPlatform.h"	                  #include "usb/ossLib.h" 		            #include "usb/usbPciLib.h"	                #include "usb/usb.h"                           #include "usb/target/usbHalCommon.h"           #include "usb/target/usbTcd.h"                #include "drv/usb/target/usbIsp1582.h"         #include "drv/usb/target/usbIsp1582Eval.h"	 #include "drv/usb/target/usbIsp1582Tcd.h"#include "usb/target/usbPeriphInstr.h"/********************************************************************************* usbTcdIsp1582Isr - isr of Isp 1582 TCD** This is the ISR for the Isp 1582 TCD.** RETURNS: N/A** ERRNO:*   none** \NOMANUAL*/VOID usbTcdIsp1582Isr    (    pVOID	param			/* ISR Paramter */	    )    {    pUSB_TCD_ISP1582_TARGET	pTarget = NULL;	/* USB_TCD_ISP1582_TARGET */     UINT16			data16 = 0 ;    USBISP1582_DEBUG ("usbTcdIsp1582Isr: Entered...\n",0,0,0,0,0,0);    if ( param == NULL )        {        USBISP1582_ERROR ("usbTcdIsp1582Isr : Bad Parameters...\n",0,0,0,0,0,0);        return;        }    pTarget = (pUSB_TCD_ISP1582_TARGET) param;    /* Disable the Control Port */    USB_PCI_WORD_OUT((pTarget->ioBase + ISP1582EVAL_CNTL_PORT), ~(0x80));    /* Disable all interrupts by reseting bit GLINTENA of mode register */    /* Read the mode regsiter and then reset GLINTENA bit */    data16 = isp1582Read16 (pTarget , ISP1582_MODE_REG);    data16 &= ~ISP1582_MODE_REG_GLINTENA;    /* Write to mode register to disable interrupts */    isp1582Write16 (pTarget , ISP1582_MODE_REG ,data16 & ISP1582_MODE_REG_MASK);    /* Call the HAL ISR */    (*pTarget->usbHalIsr)(pTarget->usbHalIsrParam);    /* Enable Interrupts */    data16 |= ISP1582_MODE_REG_GLINTENA;    isp1582Write16 (pTarget ,ISP1582_MODE_REG , data16 & ISP1582_MODE_REG_MASK);    /* Enable the Control Port */    USB_PCI_WORD_OUT((pTarget->ioBase + ISP1582EVAL_CNTL_PORT) , 0x80);    USBISP1582_DEBUG ("usbTcdIsp1582Isr: Exiting...\n",0,0,0,0,0,0);    return;    }/********************************************************************************* usbTcdIsp1582FncInterruptStatusGet - to get the interrupt status** This function returns the interrupt status i.e whether the reset interrupt,* suspend interrupt, resume interrupt, disconnect interrupt or endpoint* related interrupt is pending.** RETURNS : OK or ERROR, if the interrupt status is not retrieved successfully.** ERRNO:* \is* \i S_usbTcdLib_BAD_PARAM.* Bad Parameter is passed.* \ie** \NOMANUAL*/LOCAL STATUS usbTcdIsp1582FncInterruptStatusGet    (    pTRB_INTERRUPT_STATUS_GET_CLEAR	pTrb	/* Trb to be executed */    )    {    pTRB_HEADER	pHeader = (pTRB_HEADER) pTrb;	/* TRB_HEADER */	    pUSB_TCD_ISP1582_TARGET	pTarget = NULL;	/* USB_TCD_ISP1582_TARGET */    UINT32	data32 = 0;			    UINT16	data16 = 0;    UINT8	data8 = 0;    UINT32	endpointIntMask = 0;		/* endpoint interrupt mask */    /* WindView Instrumentation */     USB_TCD_LOG_EVENT(USB_TCD_ISP1582_INTERRUPT,    "usbTcdIsp1582FncInterruptStatusGet entered...", USB_TCD_ISP582_WV_FILTER);       USBISP1582_DEBUG ("usbTcdIsp1582FncInterruptStatusGet: Entered...\n",    0,0,0,0,0,0);    /* Validate Parameters */    if ((pHeader == NULL) || (pHeader->trbLength < sizeof (TRB_HEADER)) ||        (pHeader->handle == NULL))        {        /* WindView Instrumentation */         USB_TCD_LOG_EVENT(USB_TCD_ISP1582_INTERRUPT,        "usbTcdIsp1582FncInterruptStatusGet exiting: Bad Parameter Received...",        USB_TCD_ISP582_WV_FILTER);           USBISP1582_ERROR ("usbTcdIsp1582FncInterruptStatusGet : \        Bad Parameters...\n",0,0,0,0,0,0);        return ossStatus (S_usbTcdLib_BAD_PARAM);        }    pTarget =  (pUSB_TCD_ISP1582_TARGET) pHeader->handle;    /* Reset uInterruptStatus */    pTrb->uInterruptStatus = 0;    /* Read the Interrupt Status Register */    data32 = isp1582Read32 ( pTarget , ISP1582_INT_REG);    /*     * While reading interrupt register always and it with the interrupt     * Enable Register.     */    data32 &= isp1582Read32 ( pTarget , ISP_1582_INT_ENABLE_REG);    /* If bit 0 is set then its a Bus Reset Interrupt. */    if (( data32 & ISP1582_INT_REG_BRST) != 0)        {        USBISP1582_DEBUG ("usbTcdIsp1582FncInterruptStatusGet: Reset Interrupt \        ...\n",0,0,0,0,0,0);        /* WindView Instrumentation */         USB_TCD_LOG_EVENT(USB_TCD_ISP1582_INTERRUPT,        "usbTcdIsp1582FncInterruptStatusGet: Reset Event Occured...",        USB_TCD_ISP582_WV_FILTER);           /* Reinilialize the registers */        /* Mode Register */        data16 = isp1582Read16 (pTarget , ISP1582_MODE_REG);        data16 |= ISP1582_MODE_REG_CLKAON;        data16 |= ISP1582_MODE_REG_POWRON;        data16 |= ISP1582_MODE_REG_DMACLKON;        data16 |= ISP1582_MODE_REG_GLINTENA;                isp1582Write16 (pTarget , ISP1582_MODE_REG , data16);        /* write 0 to OTG register */        isp1582Write8(pTarget,ISP_1582_OTG_REG, 0);        /* Interrupt Configuration Register */        data8 = ((ISP1582_INT_CONF_REG_CDBGMOD_SHIFT(                  ISP1582_INT_CONF_REG_CDBGMOD_ACK_ONLY)) |                 (ISP1582_INT_CONF_REG_DDBGMODIN_SHIFT(                  ISP1582_INT_CONF_REG_DDBGMODIN_ACK_ONLY)) |                 (ISP1582_INT_CONF_REG_DDBGMODOUT_SHIFT(                  ISP1582_INT_CONF_REG_DDBGMODOUT_ACK_NYET)));        isp1582Write8 (pTarget , ISP1582_INT_CONFIG_REG , data8);        /* Interrupt Enable Register */        isp1582Write32 (pTarget , ISP_1582_INT_ENABLE_REG ,                       (ISP1582_INT_ENABLE_REG_IEBRST |                         ISP1582_INT_ENABLE_REG_IESUSP |              ISP1582_INT_ENABLE_REG_IERESM ));        pTrb->uInterruptStatus |= USBTCD_RESET_INTERRUPT_MASK;        }    /* If bit 3 is set then Suspend event has occured */    if (( data32 & ISP1582_INT_REG_SUSP) != 0)        {        /* WindView Instrumentation */         USB_TCD_LOG_EVENT(USB_TCD_ISP1582_INTERRUPT,        "usbTcdIsp1582FncInterruptStatusGet: Suspend Event Occured...",        USB_TCD_ISP582_WV_FILTER);           USBISP1582_DEBUG ("usbTcdIsp1582FncInterruptStatusGet: Suspend Interrupt\        ...\n",0,0,0,0,0,0);        pTrb->uInterruptStatus |= USBTCD_SUSPEND_INTERRUPT_MASK;        }    /* If bit 4 is set then Resume event has occured */    if (( data32 & ISP1582_INT_REG_RESM) != 0)        {        USBISP1582_DEBUG ("usbTcdIsp1582FncInterruptStatusGet: Resume Interrupt\        ...\n",0,0,0,0,0,0);        /* WindView Instrumentation */         USB_TCD_LOG_EVENT(USB_TCD_ISP1582_INTERRUPT,        "usbTcdIsp1582FncInterruptStatusGet: Resume Event Occured...",        USB_TCD_ISP582_WV_FILTER);           pTrb->uInterruptStatus |= USBTCD_RESUME_INTERRUPT_MASK;        }    /* if bit 6 is set then DMA related event has occured */    if (( data32 & ISP1582_INT_REG_DMA) != 0)        {        UINT8 endpointIndex = 0;        USBISP1582_DEBUG ("usbTcdIsp1582FncInterruptStatusGet: DMA Interrupt \        ...\n",0,0,0,0,0,0);        /* WindView Instrumentation */         USB_TCD_LOG_EVENT(USB_TCD_ISP1582_INTERRUPT,        "usbTcdIsp1582FncInterruptStatusGet: DMA Related Event Occured...",        USB_TCD_ISP582_WV_FILTER);           pTarget->dmaEot = TRUE;        pTrb->uInterruptStatus |= USBTCD_ENDPOINT_INTERRUPT_MASK;        endpointIndex = pTarget->dmaEndpointId;        pTarget->endptIntPending |= (1 << endpointIndex);        }    /*     * If bit 8 is set then setup interrupt has occured. Set setupIntPending     * to TRUE     */    if (( data32 & ISP1582_INT_REG_EP0SETUP) != 0)        {        USBISP1582_DEBUG ("usbTcdIsp1582FncInterruptStatusGet: Setup Interrupt \        ...\n",0,0,0,0,0,0);        /* WindView Instrumentation */         USB_TCD_LOG_EVENT(USB_TCD_ISP1582_INTERRUPT,        "usbTcdIsp1582FncInterruptStatusGet: Setup Packet Event Occured...",        USB_TCD_ISP582_WV_FILTER);           pTarget->setupIntPending = TRUE;        pTrb->uInterruptStatus |= USBTCD_ENDPOINT_INTERRUPT_MASK;        }    /*     * If any of bit from 10 to 25 is set, endpoint related intrrupt has     * occured.     */    if ((endpointIntMask = (data32 & ISP1582_INT_ENDPT_MASK)) != 0)        {        USBISP1582_DEBUG ("usbTcdIsp1582FncInterruptStatusGet: Endpoint \        Interrupt...\n",0,0,0,0,0,0);         /* WindView Instrumentation */         USB_TCD_LOG_EVENT(USB_TCD_ISP1582_INTERRUPT,        "usbTcdIsp1582FncInterruptStatusGet: Endpoint Related Event Occured...",        USB_TCD_ISP582_WV_FILTER);           /* Update endptPending accordingly */        pTarget->endptIntPending |= (endpointIntMask >>                                     ISP1582_INT_REG_ENDPT_SFT_VAL);        pTrb->uInterruptStatus |= USBTCD_ENDPOINT_INTERRUPT_MASK;        }    /* WindView Instrumentation */     USB_TCD_LOG_EVENT(USB_TCD_ISP1582_INTERRUPT,    "usbTcdIsp1582FncInterruptStatusGet exiting...", USB_TCD_ISP582_WV_FILTER);       USBISP1582_DEBUG ("usbTcdIsp1582FncInterruptStatusGet: Exiting...\n",    0,0,0,0,0,0);    return OK;    }/*******************************************************************************

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -