13#define USB_DTD_POOL_SIZE 128
20#define dTD_PNEXT_TERMINATE 0x00000001
22#define dTD_STAT_Halted 0x40
23#define dTD_STAT_Active 0x80
24#define dTD_STAT_clrActiveHaltBits 0x3F
25#define dTD_BUF_PAGE_SIZE 0x1000
26#define dTD_BUF_PAGE_MASK 0xFFFFF000
52 void Init(uint8_t *buf, uint32_t size,
bool irqOnComplete, uint8_t multOverride = 0);
53} __attribute__((packed));
60 uint16_t flagAndMaxLen;
80 uint8_t RESERVED2[16];
82 void Init(eEndPt_t type, uint8_t isoMult, uint16_t wMaxPacketSize,
bool irqOnSetup);
83} __attribute__((packed));
103class UDC_MIMXRT :
public UDC {
105 volatile USB_Type &usb;
107 USB_dQ dTDs[USB_ENDPTCTRL_COUNT*2];
108 HW_SetupBuf setupBuf[USB_ENDPTCTRL_COUNT];
109 bool resetInProgress;
114 uint32_t nIsr_setup[USB_ENDPTCTRL_COUNT];
115 uint32_t nIsr_OUT[USB_ENDPTCTRL_COUNT];
116 uint32_t nIsr_IN[USB_ENDPTCTRL_COUNT];
118 uint32_t nIsr_PortChange;
122 void getSetupPkt(uint8_t epnum);
124 int readOutTransfer(uint8_t epnum, uint8_t *dataBuf, uint16_t maxLen);
126 void QueueTD(uint8_t epidx, dTD* dtd);
127 void QueueTD_Empty(uint8_t epidx, dTD* dtd);
128 void PrimeEP(uint8_t epidx);
129 void FlushEP(uint8_t epidx);
130 void TDCleanup(uint8_t epidx,
bool canceled);
131 void AbortTransfer(uint8_t epnum, eDir_t dir);
134 virtual void StallEP(uint8_t epnum, eDir_t dir);
137 void isr_phy(USBPHY_Type &uphy);
138 static void usb1_isr();
139 static void usb2_isr();
140 static void usbphy1_isr();
141 static void usbphy2_isr();
142 friend void ::DumpUSBPHY();
143 friend void ::UserMain(
void *pd);
145 virtual int initInTransfer(uint8_t epnum, uint8_t* data, uint16_t length,
bool irqOnComplete,
bool dontblock =
false);
146 virtual int initInTransfer(uint8_t epnum,
PoolPtr pp,
bool irqOnComplete,
bool dontblock =
false);
147 virtual int initOutTransfer(uint8_t epnum,
bool irqOnComplete,
bool dontblock =
false);
149 virtual void StallEP(uint8_t devAddr, uint8_t epnum, eDir_t dir);
150 virtual void FlushEP(uint8_t devAddr, uint8_t epnum);
152 UDC_MIMXRT(USB_Type *hwusb, dQH *qHeads, dTD *tdPool,
int poolLen);
153 virtual void Init(Device *dev);
155 virtual int TransmitBuffer(uint8_t devAddr, uint8_t ep,
PoolPtr pp);
156 virtual int TransmitData(uint8_t devAddr, uint8_t ep, uint8_t *pData, uint16_t length);
158 virtual int sendControlPkt(uint8_t epnum, uint8_t *buf, uint16_t bufLen);
159 virtual int sendControlPkt(uint8_t epnum,
PoolPtr pp);
160 virtual int SendZLP(uint8_t devAddr, uint8_t epnum);
162 virtual int InAvail(uint8_t epnum);
163 virtual int OutAvail(uint8_t epnum);
165 virtual int RegisterEP(uint8_t devAddr, uint8_t epnum, eDir_t dir, eEndPt_t type,
166 uint16_t maxPktSize, endPtCB_t fnCB);
167 virtual int SetDevAddr(uint8_t devAddr, Device *dev);
168 virtual int ReleaseEP(uint8_t devAddr, uint8_t epnum, eDir_t dir);
172class UHC_MIMXRT :
public UHC {
173 volatile USB_Type &usb;
176 UHC_MIMXRT(USB_Type *usb);
178 int SendToDevice(uint8_t devAddr, uint8_t endpt,
void *buf,
int datLen);
181class UOTGC_MIMXRT :
public UOTGC {
182 volatile USB_Type &usb;
185 UOTGC_MIMXRT(USB_Type *usb);
void UserMain(void *pd)
Main function.
Definition PlatformSpecific/SAME70/MODM7AE70/ADC_Simple/src/main.cpp:42
Semaphores are used to control access to shared resources or or to communicate between tasks in a mul...
Definition nbrtos.h:411
OS_FIFO element definition.
Definition nbrtos.h:909
Main buffer structure for network and serial communication.
Definition buffers.h:90