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

📄 fotg200_peripheral.h

📁 FIC8120方案的 StartCell_Driver
💻 H
字号:
#ifndef __FOTG200_Peripheral_M_H
	#define __FOTG200_Peripheral_M_H

#include 	"symbol.h"
//	#define code 
//	#define bdata
//	#define xdata

	//#define IRQ_FOTG200 					40	//27
//========== 1.Define Data Type  =========================================================================================
	typedef unsigned char BOOLEAN;
	typedef unsigned char INT8U;			/* 1 byte */
	typedef unsigned short INT16U;		/* 2 bytes */
	typedef unsigned int INT32U;			/* 4 bytes */
	typedef signed char INT8S;			/* 1 byte */
	typedef signed short INT16S;			/* 2 bytes */
	typedef signed int INT32S;			/* 4 bytes */
	
	#define MESS_ERROR		(0x01 << 0)
	#define MESS_WARNING	(0x01 << 1)
	#define MESS_INFO		(0x01 << 2)
	#define TRUE				1
	#define FALSE			0
	
	#define mLowByte(u16)	((INT8U)(u16	 ))
	#define mHighByte(u16)	((INT8U)(u16 >> 8))

	// Macro
	#define bFOTGPeri_Port(bOffset)		*((volatile INT8U *) ( CPE_FOTG200_BASE | (bOffset)))
	#define hwFOTGPeri_Port(bOffset)		*((volatile INT16U *) ( CPE_FOTG200_BASE | (bOffset)))
	#define wFOTGPeri_Port(bOffset)		*((volatile INT32U *) ( CPE_FOTG200_BASE | (bOffset)))
	
	// Macro
	
	// Main control register(0x100)
	#define mUsbRmWkupST()			(wFOTGPeri_Port(0x100) & BIT0)
	#define mUsbRmWkupSet()		(wFOTGPeri_Port(0x100) |= BIT0)
	#define mUsbRmWkupClr()			(wFOTGPeri_Port(0x100) &= ~BIT0)
	
	#define mUsbTstHalfSpeedEn()		(wFOTGPeri_Port(0x100) |= BIT1)
	#define mUsbTstHalfSpeedDis()	(wFOTGPeri_Port(0x100) &= ~BIT1)

	#define mUsbGlobIntEnRd()		(wFOTGPeri_Port(0x100) & BIT2)
	#define mUsbGlobIntEnSet()		(wFOTGPeri_Port(0x100) |= BIT2)
	#define mUsbGlobIntDis()			(wFOTGPeri_Port(0x100) &= ~BIT2)
	
	#define mUsbGoSuspend()			(wFOTGPeri_Port(0x100) |=  BIT3)
	
	#define mUsbSoftRstSet()			(wFOTGPeri_Port(0x100) |=  BIT4)
	#define mUsbSoftRstClr()			(wFOTGPeri_Port(0x100) &= ~BIT4)

	#define mUsbChipEnSet()			(wFOTGPeri_Port(0x100) |= BIT5)
	
	#define mUsbOTGHighSpeedST()		(wFOTGPeri_Port(0x100) & BIT6)
	
	// Device address register(0x104)
	#define mUsbDevAddrSet(Value)	(wFOTGPeri_Port(0x104) = (INT32U)Value)
	#define mUsbCfgST()				(wFOTGPeri_Port(0x104) & BIT7)
	#define mUsbCfgSet()				(wFOTGPeri_Port(0x104) |= BIT7)
	#define mUsbCfgClr()				(wFOTGPeri_Port(0x104) &= ~BIT7)
  #define mUsbDMARst()   (wFOTGPeri_Port(0x100) |= BIT8)
  #define mUsbFIFOClr(fifo_num)   (wFOTGPeri_Port(0x1b0+fifo_num*4) |= BIT12)

	// Test register(0x108)
	#define mUsbClrAllFIFOSet()		(wFOTGPeri_Port(0x108) |= BIT0)
	#define mUsbClrAllFIFOClr()		(wFOTGPeri_Port(0x108) &= ~BIT0)

	// SOF Frame Number register(0x10C)
	#define mUsbFrameNo()			(INT16U)(wFOTGPeri_Port(0x10C) & 0x7FF)
	#define mUsbMicroFrameNo()		(INT8U)((wFOTGPeri_Port(0x10C) & 0x3800)>>11)

	// SOF Mask register(0x110)
	#define mUsbSOFMaskHS()		(wFOTGPeri_Port(0x110) = 0x44c)
	#define mUsbSOFMaskFS()		(wFOTGPeri_Port(0x110) = 0x2710)

	// PHY Test Mode Selector register(0x114)
	#define mUsbTsMdWr(item)		(wFOTGPeri_Port(0x114) = (INT32U)item)
	#define mUsbUnPLGClr()			(wFOTGPeri_Port(0x114) &= ~BIT0)
	#define mUsbUnPLGSet()			(wFOTGPeri_Port(0x114) |= BIT0)
	// Vendor Specific IO Control register(0x118)

	// Cx configuration and status register(0x11C)

	// Cx configuration and FIFO Empty Status register(0x120)
	#define mUsbEP0DoneSet()		(wFOTGPeri_Port(0x120) |= BIT0)
	#define mUsbTsPkDoneSet()		(wFOTGPeri_Port(0x120) |= BIT1)
	#define mUsbEP0StallSet()			(wFOTGPeri_Port(0x120) |= BIT2)
	#define mUsbCxFClr()				(wFOTGPeri_Port(0x120) |= BIT3)

	#define mUsbCxFFull()			(wFOTGPeri_Port(0x120) & BIT4)
	#define mUsbCxFEmpty()			(wFOTGPeri_Port(0x120) & BIT5)
	#define mUsbCxFByteCnt()		(INT8U)((wFOTGPeri_Port(0x120) & 0x7F000000)>>24)
	
	// IDLE Counter register(0x124)
	#define mUsbIdleCnt(time)		(wFOTGPeri_Port(0x124) = (INT32U)time)

	// Mask of interrupt group(0x130)
	#define mUsbIntGrp0Dis()			(wFOTGPeri_Port(0x130) |= BIT0)
	#define mUsbIntGrp1Dis()			(wFOTGPeri_Port(0x130) |= BIT1)
	#define mUsbIntGrp2Dis()			(wFOTGPeri_Port(0x130) |= BIT2)

	#define mUsbIntGroupMaskRd()	(wFOTGPeri_Port(0x130))
	
	// Mask of interrupt source group 0(0x134)
	#define mUsbIntEP0SetupDis()		(wFOTGPeri_Port(0x134) |= BIT0)
	#define mUsbIntEP0InDis()		(wFOTGPeri_Port(0x134) |= BIT1)
	#define mUsbIntEP0OutDis()		(wFOTGPeri_Port(0x134) |= BIT2)
	#define mUsbIntEP0EndDis()		(wFOTGPeri_Port(0x134) |= BIT3)
	#define mUsbIntEP0FailDis()		(wFOTGPeri_Port(0x134) |= BIT4)

	#define mUsbIntEP0SetupEn()		(wFOTGPeri_Port(0x134) &= ~(BIT0))
	#define mUsbIntEP0InEn()			(wFOTGPeri_Port(0x134) &= ~(BIT1))
	#define mUsbIntEP0OutEn()		(wFOTGPeri_Port(0x134) &= ~(BIT2))
	#define mUsbIntEP0EndEn()		(wFOTGPeri_Port(0x134) &= ~(BIT3))
	#define mUsbIntEP0FailEn()		(wFOTGPeri_Port(0x134) &= ~(BIT4))

	#define mUsbIntSrc0MaskRd()		(wFOTGPeri_Port(0x134))
	
	// Mask of interrupt source group 1(0x138)
	#define mUsbIntFIFO0_3OUTDis()	(wFOTGPeri_Port(0x138) |= 0xFF)
	#define mUsbIntFIFO0_3INDis()	(wFOTGPeri_Port(0x138) |= 0xF0000)
	
	#define mUsbIntF0OUTEn()		(wFOTGPeri_Port(0x138) &= ~(BIT1 | BIT0))	
	#define mUsbIntF0OUTDis()		(wFOTGPeri_Port(0x138) |= (BIT1 | BIT0))	
	#define mUsbIntF1OUTEn()		(wFOTGPeri_Port(0x138) &= ~(BIT3 | BIT2))
	#define mUsbIntF1OUTDis()		(wFOTGPeri_Port(0x138) |= (BIT3 | BIT2))
	#define mUsbIntF2OUTEn()		(wFOTGPeri_Port(0x138) &= ~(BIT5 | BIT4))
	#define mUsbIntF2OUTDis()		(wFOTGPeri_Port(0x138) |= (BIT5 | BIT4))
	#define mUsbIntF0INEn()			(wFOTGPeri_Port(0x138) &= ~BIT16)
	#define mUsbIntF0INDis()			(wFOTGPeri_Port(0x138) |= BIT16)
	#define mUsbIntF3OUTEn()		(wFOTGPeri_Port(0x138) &= ~(BIT7 | BIT6))
	#define mUsbIntF3OUTDis()		(wFOTGPeri_Port(0x138) |= (BIT7 | BIT6))

	#define mUsbIntF0INEn()			(wFOTGPeri_Port(0x138) &= ~BIT16)
	#define mUsbIntF0INDis()			(wFOTGPeri_Port(0x138) |= BIT16)
	#define mUsbIntF2INEn()			(wFOTGPeri_Port(0x138) &= ~BIT18)
	#define mUsbIntF2INDis()			(wFOTGPeri_Port(0x138) |= BIT18)

	#define mUsbIntSrc1MaskRd()		(wFOTGPeri_Port(0x138))
	
	// Mask of interrupt source group 2(DMA int mask)(0x13C)
	#define mUsbIntSuspDis()			(wFOTGPeri_Port(0x13C) |= BIT1)		
	#define mUsbIntDmaErrDis()		(wFOTGPeri_Port(0x13C) |= BIT8)
	#define mUsbIntDmaFinishDis()	(wFOTGPeri_Port(0x13C) |= BIT7)

	#define mUsbIntSuspEn()			(wFOTGPeri_Port(0x13C) &= ~(BIT1))		
	#define mUsbIntDmaErrEn()		(wFOTGPeri_Port(0x13C) &= ~(BIT8))
	#define mUsbIntDmaFinishEn()		(wFOTGPeri_Port(0x13C) &= ~(BIT7))

	#define mUsbIntSrc2MaskRd()		(wFOTGPeri_Port(0x13C))

	// Interrupt group (0x140)
	#define mUsbIntGroupRegRd()		(wFOTGPeri_Port(0x140))
	#define mUsbIntGroupRegSet(wValue)	(wFOTGPeri_Port(0x140) |= wValue)
	
	// Interrupt source group 0(0x144)
	#define mUsbIntSrc0Rd()			(wFOTGPeri_Port(0x144))	
	#define mUsbIntEP0AbortClr()		(wFOTGPeri_Port(0x144) &= ~(BIT5))	
	#define mUsbIntSrc0Clr()			(wFOTGPeri_Port(0x144) = 0)
	#define mUsbIntSrc0Set(wValue)	(wFOTGPeri_Port(0x144) |= wValue)
	
	// Interrupt source group 1(0x148)
	#define mUsbIntSrc1Rd()			(wFOTGPeri_Port(0x148))
	#define mUsbIntSrc1Set(wValue)	(wFOTGPeri_Port(0x148) |= wValue)
	
	// Interrupt source group 2(0x14C)
	#define mUsbIntSrc2Rd()			(wFOTGPeri_Port(0x14C))
	#define mUsbIntSrc2Set(wValue)	(wFOTGPeri_Port(0x14C) |= wValue)
	
	
	#define mUsbIntBusRstClr()		(wFOTGPeri_Port(0x14C) &= ~BIT0)		
	#define mUsbIntSuspClr()			(wFOTGPeri_Port(0x14C) &= ~BIT1)		
	#define mUsbIntResmClr()			(wFOTGPeri_Port(0x14C) &= ~BIT2)		
	#define mUsbIntIsoSeqErrClr()		(wFOTGPeri_Port(0x14C) &= ~BIT3)			
	#define mUsbIntIsoSeqAbortClr()	(wFOTGPeri_Port(0x14C) &= ~BIT4)			
	#define mUsbIntTX0ByteClr()		(wFOTGPeri_Port(0x14C) &= ~BIT5)			
	#define mUsbIntRX0ByteClr()		(wFOTGPeri_Port(0x14C) &= ~BIT6)			
	#define mUsbIntDmaFinishClr()	(wFOTGPeri_Port(0x14C) &= ~BIT7)			
	#define mUsbIntDmaErrClr()		(wFOTGPeri_Port(0x14C) &= ~BIT8)			
	#define mUsbIntDmaFinishRd()	(wFOTGPeri_Port(0x14C) &BIT7)			

	#define mUsbIntDmaFinish()		(wFOTGPeri_Port(0x14C) & BIT7)			
	#define mUsbIntDmaErr()			(wFOTGPeri_Port(0x14C) & BIT8)			
	
	// Rx 0 byte packet register(0x150)
	#define mUsbIntRX0ByteRd()		(INT8U)(wFOTGPeri_Port(0x150))
	#define mUsbIntRX0ByteSetClr(set)		(wFOTGPeri_Port(0x150) &= ~((INT32U)set))
	
	// Tx 0 byte packet register(0x154)
	#define mUsbIntTX0ByteRd()		(INT8U)(wFOTGPeri_Port(0x154))
	#define mUsbIntTX0ByteSetClr(data)		(wFOTGPeri_Port(0x154) &= ~((INT32U)data))

	// ISO sequential Error/Abort register(0x158)
	#define mUsbIntIsoSeqErrRd()		(INT8U)((wFOTGPeri_Port(0x158) & 0xff0000)>>16)
	#define mUsbIntIsoSeqErrSetClr(data)		(wFOTGPeri_Port(0x158) &= ~(((INT32U)data)<<16))

	#define mUsbIntIsoSeqAbortRd()	(INT8U)(wFOTGPeri_Port(0x158) & 0xff)
	#define mUsbIntIsoSeqAbortSetClr(data)	(wFOTGPeri_Port(0x158) &= ~((INT32U)data))

	// IN Endpoint MaxPacketSize register(0x160,0x164,...,0x17C)
	#define mUsbEPinHighBandSet(EPn, dir , size )	(wFOTGPeri_Port(0x160 + ((EPn - 1) << 2)) &= ~(BIT14 |BIT13));  (wFOTGPeri_Port(0x160 + ((EPn - 1) << 2)) |= ((((INT8U)(size >> 11)+1) << 13)*(1 - dir)) )
	#define mUsbEPMxPtSz(EPn, dir, size)		(wFOTGPeri_Port(0x160 + (dir * 0x20) + ((EPn - 1) << 2)) = (INT16U)(size))
	#define mUsbEPMxPtSzClr(EPn, dir)			(wFOTGPeri_Port(0x160 + (dir * 0x20) + ((EPn - 1) << 2)) = 0)

	#define mUsbEPinMxPtSz(EPn)		(wFOTGPeri_Port(0x160 + ((EPn - 1) << 2)) & 0x7ff)
	#define mUsbEPinStallST(EPn)		((wFOTGPeri_Port(0x160 + ((EPn - 1) << 2)) & BIT11) >> 11)
	#define mUsbEPinStallClr(EPn)		(wFOTGPeri_Port(0x160 + ((EPn - 1) << 2)) &= ~BIT11)
	#define mUsbEPinStallSet(EPn)		(wFOTGPeri_Port(0x160 + ((EPn - 1) << 2)) |=  BIT11)
	#define mUsbEPinRsTgClr(EPn)		(wFOTGPeri_Port(0x160 + ((EPn - 1) << 2)) &= ~BIT12)
	#define mUsbEPinRsTgSet(EPn)	(wFOTGPeri_Port(0x160 + ((EPn - 1) << 2)) |=  BIT12)

	// OUT Endpoint MaxPacketSize register(0x180,0x164,...,0x19C)
	#define mUsbEPoutMxPtSz(EPn)	((wFOTGPeri_Port(0x180 + ((EPn - 1) << 2))) & 0x7ff)
	#define mUsbEPoutStallST(EPn)	((wFOTGPeri_Port(0x180 + ((EPn - 1) << 2)) & BIT11) >> 11)
	#define mUsbEPoutStallClr(EPn)	(wFOTGPeri_Port(0x180 + ((EPn - 1) << 2)) &= ~BIT11)
	#define mUsbEPoutStallSet(EPn)	(wFOTGPeri_Port(0x180 + ((EPn - 1) << 2)) |=  BIT11)
	#define mUsbEPoutRsTgClr(EPn)	(wFOTGPeri_Port(0x180 + ((EPn - 1) << 2)) &= ~BIT12)
	#define mUsbEPoutRsTgSet(EPn)	(wFOTGPeri_Port(0x180 + ((EPn - 1) << 2)) |=  BIT12)

	// Endpoint & FIFO Configuration
	// Endpoint 1~4 Map register(0x1a0), Endpoint 5~8 Map register(0x1a4)
	#define mUsbEPMap(EPn, MAP)	(bFOTGPeri_Port(0x1a0 + (EPn-1)) = MAP)
	#define mUsbEPMapRd(EPn)		(bFOTGPeri_Port(0x1a0+ (EPn-1)))
	#define mUsbEPMapAllClr()		(wFOTGPeri_Port(0x1a0) = 0);(wFOTGPeri_Port(0x1a4) = 0)
	
	// FIFO Map register(0x1a8)
	#define mUsbFIFOMap(FIFOn, MAP)	(bFOTGPeri_Port(0x1a8 + FIFOn) = MAP)
	#define mUsbFIFOMapRd(FIFOn)		(bFOTGPeri_Port(0x1a8 + FIFOn))
	#define mUsbFIFOMapAllClr()			(wFOTGPeri_Port(0x1a8) = 0)
	
	// FIFO Configuration register(0x1ac)
	#define mUsbFIFOConfig(FIFOn, CONFIG)	(bFOTGPeri_Port(0x1ac + FIFOn) = CONFIG)
	#define mUsbFIFOConfigRd(FIFOn)			(bFOTGPeri_Port(0x1ac + FIFOn))
	#define mUsbFIFOConfigAllClr()		(bFOTGPeri_Port(0x1ac) = 0)
	#define FIFOEnBit					0x20

	// FIFO byte count register(0x1b0)
	#define mUsbFIFOOutByteCount(fifo_num)	(((wFOTGPeri_Port(0x1b0+fifo_num*4)&0x7ff)))
	#define mUsbFIFODone(fifo_num)			(wFOTGPeri_Port(0x1b0+fifo_num*4) |= BIT11)

	// DMA target FIFO register(0x1c0)
	#define FOTG200_DMA2FIFO_Non 		0
	#define FOTG200_DMA2FIFO0 			BIT0
	#define FOTG200_DMA2FIFO1 			BIT1
	#define FOTG200_DMA2FIFO2 			BIT2
	#define FOTG200_DMA2FIFO3 			BIT3
	#define FOTG200_DMA2CxFIFO 		BIT4
	
	#define mUsbDMA2FIFOSel(sel)		(wFOTGPeri_Port(0x1c0) = sel)
	#define mUsbDMA2FIFORd()			(wFOTGPeri_Port(0x1c0))
	
	// DMA parameter set 1 (0x1c8)	
	#define mUsbDmaConfig(len,Dir)		(wFOTGPeri_Port(0x1c8) = (((INT32U)len)<<8)|((1-Dir)<<1))
	//#define mUsbDmaLenRd()				((wFOTGPeri_Port(0x1c8) & 0x1fff0000) >> 8)
        #define mUsbDmaLenRd()				((wFOTGPeri_Port(0x1c8) & 0x00FFFFFF00) >> 8)	
	#define mUsbDmaConfigRd()			(wFOTGPeri_Port(0x1c8))
	#define mUsbDmaConfigSet(set)		(wFOTGPeri_Port(0x1c8) = set)
	
	#define mUsbDmaStart()				(wFOTGPeri_Port(0x1c8) |= BIT0)
	#define mUsbDmaStop()				(wFOTGPeri_Port(0x1c8) &= ~BIT0)

	// DMA parameter set 2 (0x1cc)	
	#define mUsbDmaAddr(addr)			(wFOTGPeri_Port(0x1cc) = addr)
	#define mUsbDmaAddrRd()			(wFOTGPeri_Port(0x1cc))
	
	// 8 byte command data port(0x1d0)
	#define mUsbEP0CmdDataRdDWord()	(wFOTGPeri_Port(0x1d0))
	
	
#endif /* __FOTG200_Peripheral_M_H  */

⌨️ 快捷键说明

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