Prev: BCH codes
Next: KB-Window
From: Kenneth Lakin on
Hello,

My name is Kenneth Lakin.

I am working with a SignalWare AED_109 analogue daughtercard attached to
a Texas Instruments 6416DSK. I am modifying SignalWare's analogue
daughtercard sample program. I am attempting to burn the sample program
into the DSK's on-board flash, and have it start executing on power up.
In order to do this, I must relocate the start of the memory section
that contains the interrupt table (INT_RAM) away from address 0x0.
(According to SPRA999, upon power up, the 64x DSP loads the first 1K of
code from flash to address 0x0, then begins program execution from that
point.) I have verified that this process stomps all over the previous
memory contents in that spot, so the relocation of the interrupt table
is necessary.
Regardless what code I have in flash, whenever I move the start of the
INT_RAM section less than 0xE0 bytes away from 0x0, the sample program
will create a few lines of output, and hang in the _unexp_int07 routine.
If I move the start of the INT_RAM section more than 0xE0 bytes from
0x0, the sample program will operate normally up until the FPGA is
initialized. At the point of FPGA initialization, execution of the
program will immediately jump to the beginning of the main function and
continue. This loop continues indefinitely.
I have spoken to SignalWare about the issue. They have suggested that I
am moving the interrupt vector, and am not updating a register that
tells the CPU where the interrupt vector is relocated to. I have
examined SPRU190d (Peripherals Reference Guide), SPRU273b (Peripheral
Support Library Reference), and SPRA554c (Vector Table and Boot ROM
Creation). This last document mentions an "interrupt service table
pointer" (ISTP). Search as I might, I can find nothing that tells me
/where/ the ISTP is so that I might modify it. Would someone kindly
point me in the direction of enlightening documentation?

Many thanks,
Kenneth Lakin
From: Randy Yates on
Look in the datasheet for your specific processor, the 6416.

--RY

From: Brad Griffis on
Kenneth Lakin wrote:
> Hello,
>
> My name is Kenneth Lakin.
>
> I am working with a SignalWare AED_109 analogue daughtercard attached to
> a Texas Instruments 6416DSK. I am modifying SignalWare's analogue
> daughtercard sample program. I am attempting to burn the sample program
> into the DSK's on-board flash, and have it start executing on power up.
> In order to do this, I must relocate the start of the memory section
> that contains the interrupt table (INT_RAM) away from address 0x0.
> (According to SPRA999, upon power up, the 64x DSP loads the first 1K of
> code from flash to address 0x0, then begins program execution from that
> point.) I have verified that this process stomps all over the previous
> memory contents in that spot, so the relocation of the interrupt table
> is necessary.
> Regardless what code I have in flash, whenever I move the start of the
> INT_RAM section less than 0xE0 bytes away from 0x0, the sample program
> will create a few lines of output, and hang in the _unexp_int07 routine.
> If I move the start of the INT_RAM section more than 0xE0 bytes from
> 0x0, the sample program will operate normally up until the FPGA is
> initialized. At the point of FPGA initialization, execution of the
> program will immediately jump to the beginning of the main function and
> continue. This loop continues indefinitely.
> I have spoken to SignalWare about the issue. They have suggested that I
> am moving the interrupt vector, and am not updating a register that
> tells the CPU where the interrupt vector is relocated to. I have
> examined SPRU190d (Peripherals Reference Guide), SPRU273b (Peripheral
> Support Library Reference), and SPRA554c (Vector Table and Boot ROM
> Creation). This last document mentions an "interrupt service table
> pointer" (ISTP). Search as I might, I can find nothing that tells me
> /where/ the ISTP is so that I might modify it. Would someone kindly
> point me in the direction of enlightening documentation?
>
> Many thanks,
> Kenneth Lakin

Kenneth,

A description of the ISTP register can be found in the c6000 CPU and
Instruction Set Reference Guide on page 8-8 (651 of 685 in Acrobat):

http://www-s.ti.com/sc/psheets/spru189f/spru189f.pdf

It is a true CPU register (i.e. it's not located at an address) so you
need to access it by using the cregister keyword:

extern cregister volatile unsigned int ISTP;

This is documented in the Compiler User's Guide:

http://focus.ti.com/docs/apps/catalog/resources/appnoteabstract.jhtml?abstractName=spru187l

Note also in the CPU Guide that the bottom 10 bits of ISTP are read-only
bits. This means that your interrupt vector table must be located on a
1k byte boundary such that the lower 10 bits of the address are all zero.

Brad


 | 
Pages: 1
Prev: BCH codes
Next: KB-Window