Hi all, I'm working with the C6711DSK. I'm currently trying to load a dsp program to my board using a PC windows program - via HPI. I have had success with this but I had to configure the memory in a strange manner. I'd now like to configure the memory in the correct manner. In order to get my program working, I configured my SDRAM segment from a base of 0x80000000 to 0x00000000. So my windows app. loads the following code - #include "audiocfg.h" #include <csl_cache.h> #define HOST_RECEIVE_HAND_SHAKING_INFO 0x55555555 #define HS_BUFFER_LEN 6 #define ID_0 0x12345678 #define ID_1 0xf1f2f3f4 #define ID_2 0x08070605 #pragma DATA_SECTION(handShakingBuffer, "my_DataSect") int handShakingBuffer[HS_BUFFER_LEN]; Void main() { handShakingBuffer[0] = ID_0; handShakingBuffer[1] = ID_1; handShakingBuffer[2] = ID_2; CACHE_flush(CACHE_L2ALL, (void *)0, 0); while(handShakingBuffer[4] != HOST_RECEIVE_HAND_SHAKING_INFO); return; } And succesfully reads the values - 0x12345678 0xf1f2f3f4 0x08070605 using HPI. I'm now trying to configure the memory as - ENTRY POINT SYMBOL: "_c_int00" address: 800009a0 MEMORY CONFIGURATION name origin length used attr fill ---------------------- -------- --------- -------- ---- -------- ResetVector 00000000 00000020 00000020 RWIX HandShake 00000020 00000018 00000018 RWIX SDRAM 80000000 10000000 00005ebd RWIX SECTION ALLOCATION MAP output attributes/ section page origin length input sections -------- ---- ---------- ---------- ---------------- .vers 0 00000000 00000038 COPY SECTION 00000000 00000038 audiocfg.obj (.vers) .clk 0 and I've added the pragma - #pragma DATA_SECTION(handShakingBuffer, "HandShake") int handShakingBuffer[HS_BUFFER_LEN]; When I upload this program, I get the values - [0] 0200C069 [1] 027FFFEA [2] 02100277 [3] 02000C29 [4] 0238002A [5] 020388EB at 0x00000020 (handShakingBuffer). When I should be getting - handShakingBuffer[0] = ID_0; //0x12345678 handShakingBuffer[1] = ID_1; handShakingBuffer[2] = ID_2; I then used CCS to upload the following program to my dsp board - Void main() { CACHE_flush(CACHE_L2ALL, (void *)0, 0); while(handShakingBuffer[4] != HOST_RECEIVE_HAND_SHAKING_INFO); return; } I watched the values in handShakingBuffer, before and after the flush and they didn't change, the were - [0] 0200C069 [1] 027FFFEA [2] 02100277 [3] 02000C29 [4] 0238002A [5] 020388EB same as above. I think this means that I am loading the dsp program correctly with my windows app, but that the dsp code is not executing. This might be because HWI_reset is not correctly configured. I have 3 way caching enabled, and HWI is set to generate reset vector at address 0. In the memory section manager, I have - BIOS data - all set for SDRAM BIOS code - all set for SDRAM Compiler Sections - all set for SDRAM Load Address - no options highlighted. Remember also that I can actually get this to work with my application by simply deleting the memory segments - ResetVector HandShake and setting SDRAM's base to 0, but this is not good practice. What might the issue be here? Thanks very much for your help, Aine. |
|
HPI memory configuration
Started by ●August 30, 2003
Reply by ●August 31, 20032003-08-31
Hello Aine,
It appears that your code is performing is performing a reset. When a
reset is performed and ROM boot is enabled [the default config of the DSK is
ROM], the first 1024 locations of ROM are DMA'd into internal memory
beginning at address 0. [You can verify this by doing a memory fill of
some pattern beginning at zero with CCS. View address 0 and observe the
pattern. Perform debug->reset CPU and watch the contents change - you will
see your observed pattern at 0x20.]
If you are going to use a reset, it should be executed first.
You then must initialize the EMIF before you load your code [when using CCS
the dsk GEL file does this for you].
Good luck,
mikedunn
aine_canby <a...@yahoo.com> wrote: Hi all, |