📄 fotg200_peripheral.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 + -