Reply by get2...@hotmail.com August 25, 20072007-08-25
Hello,
We are new to DSPs and have recently been required to use the Sharc processor. We've just spent some time trying to understand and get an interrupt signal working. Unfortunately we're quite confused as to how the code goes about looking up interrupts when they happen. Currently we need a very simple interrupt to occur: when a pin on the DPI goes high (rising edge), an interrupt is set. This has to be done within the sample UART talkthrough program (ASM).

We understand that the UART takes the DPI interrupt, as well as the P14I assignment (is the P14I assignment part of the PICR settings?). We want to know if it's possible to interrupt with the extra signal on a DPI pin (since the UART already seems to use the DPI as the interrupt, and we cannot use the DAI as we will be needing it in future). Also, is this done through the 4 elements of the IVT or through another interrupt label in the IVT?

We've written some code, and was wondering if you could correct this or tell us if we're going in the right direction:

//This is the part in the UART program which enables and sets up the UART interrupt.
//Enable Global Interrupts
bit set mode1 IRPTEN;

// Maps the UART0 receive interrupt to P14 using the programmable interrupt controller
ustat1 = dm(PICR2);
bit clr ustat1 MASKP14;
bit set ustat1 UART0Rx;
dm(PICR2) = ustat1;

bit set IMASK P14I; //Unmasks the UART Receive interrupt

ustat1 = UARTRBFIE;
dm(UART0IER) = ustat1; // Enables UART receive interrupt

//Here we add some code to try to set up a new interrupt signal
ustat1 = dm(PICR2);
bit clr ustat1 MASKBITS;
bit set ustat1 DPIINTERRUPT; //DPIINTERRUPT defined as (0x0E<<10)
dm(PICR2) = ustat1;

bit set IMASK P14I; //does this need to be P13I or another P label? Also, how is it routed to the IVT?

I'm assuming the DPI to EXT_MISC SRU line should be soemthing like this:
SRU2(DPI_P02_I, EXT_MISC_2)

And we set the DPI interrupt settings for rising edge:
bit set DPI_IRPTL_RE 0x1; //not sure of specifics but something similar to this

The IVT section should have something like this:

__DPII:
__P13I :

jump _signalisr;
jump (pc,0);
jump (pc,0);
jump (pc,0);
__DPII: // 0x64: DPI interrupt
__P14I :

jump _rxisr;
jump (pc,0);
jump (pc,0);
jump (pc,0);
Is the above code roughly correct or are we misunderstanding the interrupt functionality? We've gone through the manuals numerous times but it does not seem to bother explaining the link between the interrupt functions.

If anyone could give us a brief explanation of how something like this might be implemented, and something about how the chip handles the interrupts and the meaning of the labels, vector elements, etc, it would be hugely appreciated.

Thank you,

David