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.

SRIO manual and circular buffering

 

On page 65 of the C6474 SRIO manual (sprug23) it states: "There are four DOORBELL registers, each currently with 16 bits, allowing 64 interrupt sources or circular buffers.". 

What is meant with "circular buffers" here? The manual further mentions "TID circular buffers" and on page 105:

"When the CPU is interrupted, it reads the ICSR registers to determine the source of the interrupt and appropriate action to take. For example, if it is a DOORBELL interrupt, the CPU will read from an L2 address that is specified by its circular buffer read pointer that is managed by software. There may be more than one circular buffer for each core. The correct circular buffer to read from and increment depends on the bit set in the ICSR register. The CPU then clears the status bit."

What does this stand for (Transfer ID?)?

I assume what is meant is that a doorbell is sent after a WRITE/READ transaction to a buffer has been completed, such that the DSP can do something before the remote party restarts the read-write cycle. However, no specifics are mentioned at all concerning this in the manual. An example would be great. In our setup we use the IDT FIC, which has the capability to generate a doorbell after it wraps the destination address it was writing/reading to/from. This works great and we implemented a type of ping-pong buffer with it. 

Reading the TI SRIO manual makes me feel I am missing something and that there is another way to do this when going from one DSP to another. Is there a way in the TI SRIO peripheral to setup an automated circular buffer? If so, I have not seen a reference in the DIO library, apart from streaming examples which send a doorbell after all data is transmitted.  

Regards,

Dirk

  • Dirk,

    Somehow this post slipped through the cracks, sorry for the late response. 

    You are not really missing any hidden feature or capability here.  Your approach is fine.  The use of a Transfer ID (TID) and circular buffer approach would have to be managed completely in software.  It was mentioned as a possible use case, but there is no sw example that I know of which actually shows it.  Essentially, Doorbells are used to set interrupt ICSR bits in the peripheral.  You can use them for whatever purpose you like, but typically they are used as you mentioned, after a data transfer via NWRITE for example, because the data is moved to memory directly without the CPU even knowing it occurred.

    Regards,

    Travis

  • Thanks for confirming Travis, I just to make sure I was using it the right way. Especially datasheets as big as the SRIO one sometimes contain "mysterious" references. This forum is great for clearing up things the datasheets are not explicit about.

    Cheers,

    Dirk