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

📄 xllp_usbohci.h

📁 Intel PXA270底层设备驱动代码
💻 H
📖 第 1 页 / 共 2 页
字号:
#define	XLLP_USBOHCI_UHCRHPS_POCI				( 1u   << 3 )
#define	XLLP_USBOHCI_UHCRHPS_PRS				( 1u   << 4 )

#define	XLLP_USBOHCI_UHCRHPS_PPS				( 1u   << 8 )

#define	XLLP_USBOHCI_UHCRHPS_LSDA				( 1u   << 9 )		// meaning on read
#define	XLLP_USBOHCI_UHCRHPS_CPP				( 1u   << 9 )		// Write 1 to clear

#define	XLLP_USBOHCI_UHCRHPS_CSC				( 1u   << 16 )
#define	XLLP_USBOHCI_UHCRHPS_PESC				( 1u   << 17 )
#define	XLLP_USBOHCI_UHCRHPS_PSSC				( 1u   << 18 )
#define	XLLP_USBOHCI_UHCRHPS_POCIC				( 1u   << 19 )
#define	XLLP_USBOHCI_UHCRHPS_PRSC				( 1u   << 20 )

// fields and bits for UHCSTAT:		UHC Status register
// All UHCSTAT bits below are Write 1 to clear
#define	XLLP_USBOHCI_UHCSTAT_RWUE				( 1u   << 7 )
#define	XLLP_USBOHCI_UHCSTAT_HBA				( 1u   << 8 )
#define	XLLP_USBOHCI_UHCSTAT_HTA				( 1u   << 10 )
#define	XLLP_USBOHCI_UHCSTAT_UPS1				( 1u   << 11 )
#define	XLLP_USBOHCI_UHCSTAT_UPS2				( 1u   << 12 )
#define	XLLP_USBOHCI_UHCSTAT_UPRI				( 1u   << 13 )
#define	XLLP_USBOHCI_UHCSTAT_SBTAI				( 1u   << 14 )
#define	XLLP_USBOHCI_UHCSTAT_SBMAI				( 1u   << 15 )
#define	XLLP_USBOHCI_UHCSTAT_UPS3				( 1u   << 16 )

#define P_XLLP_USBOHCI_UHCSTAT( pUsbhHandle ) ((pUsbhHandle)->pUSBHRegs->UHCSTAT)

// Mask for write 1 to clear bits in UHCSTAT
#define XLLP_USBOHCI_UHCSTAT_MASK  (0xFFFFFFFF)
//#define XLLP_USBOHCI_UHCSTAT_MWRITE( pUsbhHandle, y )  (P_XLLP_USBOHCI_UHCSTAT( pUsbhHandle ) = (((P_XLLP_USBOHCI_UHCSTAT( pUsbhHandle )) & (~XLLP_USBOHCI_UHCSTAT_MASK)) | y))
////Optimized:
//#define XLLP_USBOHCI_UHCSTAT_MWRITE( pUsbhHandle, y )    ((P_XLLP_USBOHCI_UHCSTAT( pUsbhHandle )) = (y))
#define XLLP_USBOHCI_UHCSTAT_MWRITE( pUsbhHandle, y )    (((pUsbhHandle)->pUSBHRegs->UHCSTAT) = (y))
//To invoke, call:
//XLLP_USBOHCI_UHCSTAT_MWRITE( pUsbhHandle, y)  

// fields and bits for UHCHR:		UHC Reset register

#define XLLP_USBOHCI_UHCHR_FSBIR				( 1u <<  0)	// Force System Bus Interface Reset: When 1, resets the logic that interfaces to the system bus, DMA, etc. Auto clears after three system bus clocks.
#define	XLLP_USBOHCI_UHCHR_FHR					( 1u <<  1)	// Force Host controller Reset: When 1, resets OHCI core. Must be held high for 10 uSeconds, then cleared
#define XLLP_USBOHCI_UHCHR_CGR					( 1u <<  2)	// Clock Generation Reset: When 0, resets the OHCI Clock Generation block (DPLL). Used only in simulation
#define XLLP_USBOHCI_UHCHR_SSDC					( 1u <<  3)	// Simulation Scale Down Clock: When 1, internal 1 mSec timer changes to 1 uSec to speed up simulations
#define XLLP_USBOHCI_UHCHR_UIT					( 1u <<  4)	// USB Interrupt Test: Enable Interrupt Test Mode and UHCHIT register
#define XLLP_USBOHCI_UHCHR_SSE					( 1u <<  5)	// Sleep Standby Enable: enable/disable both ports SE receivers & power  supply
#define XLLP_USBOHCI_UHCHR_PSPL					( 1u <<  6)	// Power SENSE Polarity: Control polarity of Over-current Indicator signals input from the MAX1693EUB USB Power Switch
#define XLLP_USBOHCI_UHCHR_PCPL					( 1u <<  7)	// Power CONTROL Polarity: Control polarity of Power Enable signals output to the MAX1693EUB USB Power Switch
#define XLLP_USBOHCI_UHCHR_SSEP1				( 1u <<  9)	// Sleep Standby Enable: enable/disable port1 SE receivers & power supply
#define XLLP_USBOHCI_UHCHR_SSEP2				( 1u << 10)	// Sleep Standby Enable: enable/disable port2 SE receivers & power supply
#define XLLP_USBOHCI_UHCHR_SSEP3				( 1u << 11)	// Sleep Standby Enable: enable/disable port3 SE receivers & power supply


// fields and bits for UHCHIE:		UHC Interrupt Enable register
#define	XLLP_USBOHCI_UHCHIE_RWIE				( 1u   << 7 )
#define	XLLP_USBOHCI_UHCHIE_HBAIE				( 1u   << 8 )
#define	XLLP_USBOHCI_UHCHIE_TAIE				( 1u   << 10 )
#define	XLLP_USBOHCI_UHCHIE_UPS1IE				( 1u   << 11 )
#define	XLLP_USBOHCI_UHCHIE_UPS2IE				( 1u   << 12 )
#define	XLLP_USBOHCI_UHCHIE_UPRIE				( 1u   << 13 )
#define	XLLP_USBOHCI_UHCHIE_UPS3IE				( 1u   << 14 )


// fields and bits for UHCHIT:		USB Host Interrupt Test register
#define	XLLP_USBOHCI_UHCHIT_RWUT				( 1u   << 7 )
#define	XLLP_USBOHCI_UHCHIT_BAT					( 1u   << 8 )
#define	XLLP_USBOHCI_UHCHIT_IRQT				( 1u   << 9 )
#define	XLLP_USBOHCI_UHCHIT_TAT					( 1u   << 10 )
#define	XLLP_USBOHCI_UHCHIT_UPS1T				( 1u   << 11 )
#define	XLLP_USBOHCI_UHCHIT_UPS2T				( 1u   << 12 )
#define	XLLP_USBOHCI_UHCHIT_UPRT				( 1u   << 13 )
#define	XLLP_USBOHCI_UHCHIT_STAT				( 1u   << 14 )
#define	XLLP_USBOHCI_UHCHIT_SMAT				( 1u   << 15 )
#define	XLLP_USBOHCI_UHCHIT_UPS3T				( 1u   << 16 )


// Port Power Managment Modes
enum {
	XLLP_USBOHCI_PPM_NPS,
	XLLP_USBOHCI_PPM_GLOBAL,
	XLLP_USBOHCI_PPM_PERPORT,
	XLLP_USBOHCI_PPM_MIXED
};


typedef struct XLLP_USBH_HANDLE_S 
{
   P_XLLP_USBOHCI_T  pUSBHRegs;    // Pointer to USB Host registers
   P_XLLP_GPIO_T   pGPIORegs;      // Pointer to the GPIO registers
   P_XLLP_BCR_T    pBLRRegs;       // Pointer to the Board Specific registers
   P_XLLP_CLKMGR_T pCLKMGRRegs;    // Pointer to the Clock Manager registers
   P_XLLP_OST_T pOSTRegs;          // Pointer to OST registers
   P_XLLP_PLATFORM_USBH_T pPlatformUSBHConfig ; //Pointer to Platform Specific USBH Configuration

} XLLP_USBH_HANDLE_T, *P_XLLP_USBH_HANDLE_T;


typedef enum _XLLP_USBH_ERROR_T {
     
    XLLP_USBH_SUCCESS = 0,
	XLLP_USBH_GPIO_POINTER_NULL,
	XLLP_USBH_CONTROLLER_POINTER_NULL,
	XLLP_USBH_BLR_POINTER_NULL,
	XLLP_USBH_CLKMGR_POINTER_NULL,
	XLLP_USBH_OST_POINTER_NULL, 
	XLLP_USBH_FEATURE_NOT_SUPPORTED

}XLLP_USBH_ERROR_T;

typedef enum _XLLP_USBH_PORT_T {
     
    XLLP_USBH_PORT_1 = 1,
	XLLP_USBH_PORT_2,
	XLLP_USBH_PORT_3

}XLLP_USBH_PORT_T;

/*
************************************************************************************
*                            FUNCTION PROTOTYPES 
************************************************************************************
*/



//Chip specific:

XLLP_USBH_ERROR_T XllpUsbhReset(P_XLLP_USBH_HANDLE_T pUsbhHandle);

XLLP_USBH_ERROR_T XllpUsbhSelectPowerManagementMode (
								   P_XLLP_USBH_HANDLE_T pUsbhHandle , 
								   XLLP_UINT32_T  PowerMode,                           
                                   XLLP_UINT32_T  NumPorts, 
                                   P_XLLP_UINT32_T  pPortMode) ;

XLLP_USBH_ERROR_T XllpUsbhPowerUp(P_XLLP_USBH_HANDLE_T pUsbhHandle);

XLLP_USBH_ERROR_T XllpUsbhPowerDown(P_XLLP_USBH_HANDLE_T pUsbhHandle);


__inline XLLP_USBH_ERROR_T XllpUsbhTurnOnUSBHostClock(P_XLLP_USBH_HANDLE_T pUsbhHandle)
{
	// The clock enable bit for the USB Host OHCI block in PXA27x
	// is bit 10.
	
	pUsbhHandle->pCLKMGRRegs->cken |= XLLP_CLKEN_USBHOST;

    return (XLLP_USBH_SUCCESS);
}


__inline XLLP_USBH_ERROR_T XllpUsbhTurnOnSRAMClock(P_XLLP_USBH_HANDLE_T pUsbhHandle)
{
	
	// The clock enable bit for the Internal SRAM in PXA27x
	// is bit 20.
	pUsbhHandle->pCLKMGRRegs->cken |= XLLP_CLKEN_MEMCLOCK ;

    return (XLLP_USBH_SUCCESS);
}

__inline XLLP_USBH_ERROR_T XllpUsbhTurnOffUSBHostClock(P_XLLP_USBH_HANDLE_T pUsbhHandle)
{
	// The clock enable bit for the USB Host OHCI block in PXA27x
	// is bit number 10.
	pUsbhHandle->pCLKMGRRegs->cken &= ~XLLP_CLKEN_USBHOST;

    return (XLLP_USBH_SUCCESS);
}


//Platform Specific:


extern XLLP_USBH_ERROR_T XllpUsbhPortEnableOverCurrentNotification(P_XLLP_USBH_HANDLE_T pUsbhHandle,XLLP_USBH_PORT_T Port);

extern XLLP_USBH_ERROR_T XllpUsbhPortEnablePower(P_XLLP_USBH_HANDLE_T pUsbhHandle, XLLP_USBH_PORT_T Port); 

extern XLLP_USBH_ERROR_T XllpUsbhInitPlatformSpecificConfig(P_XLLP_USBH_HANDLE_T pUsbhHandle);

extern XLLP_USBH_ERROR_T XllpUsbhConfigPlatformSpecificUSBHReset(P_XLLP_USBH_HANDLE_T pUsbhHandle);

XLLP_USBH_ERROR_T XllpUsbhPortEnableSleepStandbyEnable(P_XLLP_USBH_HANDLE_T pUsbhHandle, 
													   XLLP_USBH_PORT_T Port, 
													   XLLP_BOOL_T enable);


__inline XLLP_USBH_ERROR_T XllpUsbhConfigureGlobalSleepStandbyEnable(P_XLLP_USBH_HANDLE_T pUsbhHandle, 
																  XLLP_BOOL_T enable)
{
	if (XLLP_TRUE == enable)
    {
      pUsbhHandle->pUSBHRegs->UHCHR &= ~XLLP_USBOHCI_UHCHR_SSE;
	}
	else
	{
	  pUsbhHandle->pUSBHRegs->UHCHR |= XLLP_USBOHCI_UHCHR_SSE;
	}

    return (XLLP_USBH_SUCCESS);
}



__inline XLLP_USBH_ERROR_T XllpUsbhConfigurePowerSensePolarity(P_XLLP_USBH_HANDLE_T pUsbhHandle, 
													  XLLP_LEVEL_T level)
{
	if (XLLP_HI == level)
    {
      pUsbhHandle->pUSBHRegs->UHCHR &= ~XLLP_USBOHCI_UHCHR_PSPL;
	}
	else
	{
	  pUsbhHandle->pUSBHRegs->UHCHR |= XLLP_USBOHCI_UHCHR_PSPL;
	}

    return (XLLP_USBH_SUCCESS);
}


__inline XLLP_USBH_ERROR_T XllpUsbhConfigurePowerControlPolarity(
														P_XLLP_USBH_HANDLE_T pUsbhHandle, 
													    XLLP_LEVEL_T level)
{
	if (XLLP_HI == level)
    {
      pUsbhHandle->pUSBHRegs->UHCHR &= ~XLLP_USBOHCI_UHCHR_PCPL;
	}
	else
	{
	  pUsbhHandle->pUSBHRegs->UHCHR |= XLLP_USBOHCI_UHCHR_PCPL;
	}

    return (XLLP_USBH_SUCCESS);
}




#ifdef __cplusplus
}
#endif


#endif //__XLLP_USBHOST_H__

⌨️ 快捷键说明

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