This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
Hi,
TX is working. there was a hidden bit that was marked as Reserved (31st bit of Original Buffer length word of descriptor) and setting this interrupts started appearing and TX is working fine now.
BUT!
RX is not working. It remains queued in the queue but not going for processing. Instead rx_sop_starvation interrupt occurs continuously.
Please help me in this regard. Settings are as following. If there is anything missing or wrong please let me know asap.
=====
-->1st 4 are same as in above post
=========================
While transmitting from a EP except 0 using CPPI DMA
=========================
10- Clear Global RNDIS bit using USB0CTRL register
11- Set requested EP DMA Transparent mode using USB0TXMODE register
12- Required number of descriptors (1 PD and all others BD) are created and filled according to the following, each descriptor is 32 bytes log (8 words).
word0 :: Descriptor type=16, Protocol-specific valid word count=0, Packet length= total data length to be transferred (for BD this reg is written as 0 on all bits)
word1 :: Written the full register with 0
word2 :: type of this packet = 5, On-chip=0, Packet return queue # = set accordingly, (for BD type of this packet is not present )
word3 :: Buffer 0 length = current data length to be transferred in this packet
word4 :: Buffer 0 pointer = address of memory where data to be transmitted is placed
word5 :: Next descriptor pointer = pointer to next descripter
word6 :: Original buffer 0 length = same as Buffer 0 length (31st bit set to 1)
word7 :: Original buffer 0 pointer = same as Buffer 0 pointer
13- Pushed all of above created descriptors (PD 1st then other BDs in the sequence) one by one by writing "Queue N Register D" using corresponding Queue number(0-14) of USB0 Rx Endpoint x (x is 1-15), i am pushing for EP2 in Free Descriptor Buffer 1
-a- desc_ptr = the PD memory address (remember it is 32 bit aligned so last 5 bits will be zero so assuming that controller will append these 5 zeros to make it complete address)
-b- desc_size = 2 ( as descriptor size is 32, so 0=24, 1=28, 2=32, -----)
14- To Enable DMA used these settings in CSR: -a- Clear Autoset=0 -b- AUTOCLEAR = 1, DMAEN=1 & DMAMODE = 0
Waiting for the response. Thank you in advance.