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.

Interrupt Driven UART on C6747_ without_ BIOS



I'm trying to get a simple application to run on the C6747 (the chip is actually the OMAP L137, but we're only using the DSP side).

I need to do UART based communications on at least two of the serial ports.

We will also have to have an interrupt driven by an IO pin.

I have some relatively simple code driving the UART(s) in polled mode (from the OMAP L137 EVM Test Code).  This is working as well as polled serial communications can, but I need to get at least the receive interrupt driven.

I know these are really capable parts, but I don't really need all that - Just IO, UARTs, and a FP DSP.  Maybe a timer.

What I'm stuck on now is how to route all the UART Events to an interrupt, and then be able to service that interrupt, looking at the various registers available to determine why the interrupt fired.  I know this involves the INTMUX registers, but I have not found a document that describes SPECIFICALLY, for the C6747 what bits to twiddle to map the UART events to the interrupt controller.

I've looked all the examples, but they either assume you're using DSP/BIOS or some other thing I don't need.  I've grepped every bit of source I can find, but I cannot find any source code that puts the terms UART and INTMUX together.  Separately, I can find stuff in the BIOS code, but in over 4K(!!) of lines in the serial port driver, how to get interrupt driven serial communications working, specifically for the C6747.

Even the CSL buries stuff in levels of obfuscation and seems overly complicated for what I need to do.

This seems SO elemental and is trivial on nearly every other processor I've worked on - even working with the Windows serial port driver source code is less byzantine.  

Does anyone know of a concise example or documentation that tells me what I want to know (INTMUX / UART event definitions)?

Thanks.

  • Here is the event map for the C6747: http://focus.ti.com/lit/ds/sprs377d/sprs377d.pdf.  Take a look at section 6.8.1, Table 6-7.

    Here you can see that, for example, UART0 is event #38.  You would then need to write 38 (0x26) into the INTMUX field that corresponds to the INTR # that you have chosen to service that event.  Your selected INTR # will fire when the UART0 event is asserted.

    Regards,

    - Rob

  • Thanks for the info.

    I still wish there was a non-BIOS example somewhere.   I can see the value in that approach, but there's lots of times you just don't need that much baggage.

    I have it all working, and it's not THAT complicated once you know what to do, but piecing together all the information you need to get this working has been very time consuming. 

    The same thing goes for flashing the EEPROM on the board - there appear to be many ways to do this, but I found that only one worked for me - and why that method worked and the other ones didn't is still a mystery to me.  Also, the tools have one set of terminology, the EVM hardware has another, and there's no secret decoder ring that puts the two together - or at least one I could find in the sea of documentation.

    G