![Texas Instruments AM1808 Technical Reference Manual Download Page 1684](http://html.mh-extra.com/html/texas-instruments/am1808/am1808_technical-reference-manual_10945581684.webp)
Use Cases
1684
SPRUH82C – April 2013 – Revised September 2016
Copyright © 2013–2016, Texas Instruments Incorporated
Universal Serial Bus 2.0 (USB) Controller
Example 34-5. Programming the USB DMA Controller (continued)
region0DescriptorSpace[descNum].HPDword3buffLength=singlePktLength;
if ((dir==TRANSMIT) & (prevDescTxNum==0)) {
region0DescriptorSpace[descNum].HPDword4buffAdd=(Uint32)rxBuffer;
prevDe+;
} else if ((dir==TRANSMIT) & (prevDescTxNum!=0)) {
region0DescriptorSpace[descNum].HPDword4buffAdd=region0DescriptorSpace[descNum-
1].HPDword4b region0DescriptorSpace[descNum-1].HPDword3buffLength;
prevDe+;
}
if ((dir==RECEIVE) & (prevDescRxNum==0)) {
region0DescriptorSpace[descNum].HPDword4buffAdd=(Uint32)rxBuffer;
prevDe+;
} else if ((dir==RECEIVE) & (prevDescRxNum!=0)) {
region0DescriptorSpace[descNum].HPDword4buffAdd=region0DescriptorSpace[descNum-
1].HPDword4b region0DescriptorSpace[descNum-1].HPDword3buffLength;
prevDe+;
}
if ((dir==TRANSMIT) & ((prevDescTxNum-1)>0))
region0DescriptorSpace[descNum-
1].HPDword5nextHBDptr=(Uint32)®ion0DescriptorSpace[descNum];
//Modify Previous Link
Address
region0DescriptorSpace[descNum].HPDword5nextHBDptr=0;
//Current Descriptor is
the Last Descriptor: Null Value is used as the Next Buffer Descriptor Address
region0DescriptorSpace[descNum].HPDword6orgBuffLength=region0DescriptorSpace[descNum].HPDword3buff
Length;
region0DescriptorSpace[descNum].HPDword7orgBuffAdd=region0DescriptorSpace[descNum].HPDword4buffAdd
;;
}
// usage: qDesc2SubmitQ(rx/txSubmitQ,HPD/HBD);
//Queue Number, HPDdescriptorNumber
void qDesc2SubmitQ(Uint16 queueNum, Uint16 hpdDescriptorNum) {
usbRegs-
>QCTRL[queueNum].CTRLD=(Uint32)®ion0DescriptorSpace[hpdDescriptorNum] | 0x2; //
bits[4:0]=dec_size=[0-31]=[24,28,32,...,148]
}
void enableCoreTxDMA(Uint16 endPoint) {
Uint16 index_save;
index_save=usbRegs->INDEX;
usbRegs->INDEX=endPoint;
usbRegs->TXCSR.PERI_TXCSR&=0x7FFF; // Clear AUTOSET
usbRegs->TXCSR.PERI_TXCSR|=0x1400; // Set DMAReqEnab & DMAReqMode
usbRegs->INDEX=index_save;
}
void enableCoreRxDMA(Uint16 endPoint) {
Uint16 index_save;
index_save=usbRegs->INDEX;
usbRegs->INDEX=endPoint;