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.

Code execution from External memory using CCS

Hello All,

I am facing issue while executing the ARM binary code from External memory (SRAM interface over EMIFB bus) using Code Composer Studio.

The HW Environment is OMAP L137 based customized HW & SRAM is interfaced to EMIFB bus using FPGA.

Below are the steps followed:
1) In order execute the ARM code from SRAM, I have modified the DSP GEL file and configured the required interfaces.
2) Connected to DSP Core so that GEL file gets executed.
3) Generated ARM binary file where all code segments are moved to SRAM locations. Connected and loaded the binary onto ARM core.
4) Upon loading the binary, the ARM core entering into “Running” state instead of halting
   at main( ). When I press the “pause” button,  the control is halting at invalid location.

Can you please help me in resolving this issue.

Thanks & Regards
Srinivas

  • Hi Srinivas,

    3) Generated ARM binary file where all code segments are moved to SRAM locations. Connected and loaded the binary onto ARM core.

    Have you mentioned all the program sections in SRAM through linker command file ?

  • Hi Titus,

    Thank you for the prompt reply.

    Yes. I have modified the linker file so that all program sections to be located at SRAM address range.

    Regards
    Srinivas

     

     

  • Hi Titus,

    Please find the linker and map files used in my CCS project attached to this post.

    Please let me know your suggestions on this issue.

    5315.linker_map_files.zip

    Thanks & Regards
    Srinivas

     

     

  • Hi Srinivas,

    Have you enabled EMIFB support in gel file for your EMIFB's SRAM ?

    Are you able to access your SRAM through CCS memory browser after you loaded your current program through internal RAM ?

    I am facing issue while executing the ARM binary code from External memory (SRAM interface over EMIFB bus) using Code Composer Studio.

    Could you please try to run simple "Hello world" program on DSP core through SRAM ?

    Could you please try the below linker command file in CCS and tell me that whether you are able to hit at main().

    /* =========================================================================*
     * OMAPL137_DSP_cache.cmd - Linker Command File for OMAPL137 CACHE Example	*
     * 																			*
     * These linker options are for command line linking only. For IDE linking, *
     * you should set your linker options in Project Properties.				*
     * 		-c					Link Using C Conventions						*
     *		-stack 	0x1000		Software Stack Size								*
     *		-heap	0x1000		Heap Area Size									*
     * =========================================================================*/
    -stack 0x1000
    -heap 0x1000
    
    /* =========================================================================*
     * 						Specify the System Memory Map						*
     * =========================================================================*/
    MEMORY
    {
    	L2:		o = 0x11800000		l = 0x00040000
    	L1P:	o = 0x11E00000		l = 0x00008000
    	L1D:	o = 0x11F00000		l = 0x00008000
    	L3:		o = 0x80000000		l = 0x00020000
    	SDRAM:	o = 0xC0000000		l = 0x001FFFFF
    }
    
    /* =========================================================================*
     * 				Specify the Sections Allocation into Memory					*
     * =========================================================================*/
    SECTIONS
    {
    	.cinit		>		SDRAM			/* Initialization Tables			*/
    	.pinit		>		SDRAM			/* C++ Constructor Tables			*/
    	.const		>		SDRAM			/* Constant Data					*/
    	.switch		>		SDRAM			/* Jump Tables						*/
    	.text		>		SDRAM			/* Executable Code					*/
    	
    	.bss		>		SDRAM			/* Global & Static Variables 		*/
    	.far		>		SDRAM			/* Far Global & Static Variables	*/
    	.stack		>		SDRAM			/* Software System Stack			*/
    	.sysmem		>		SDRAM			/* Dynamic Memory Allocation Area 	*/
    	
    	.cio		>		SDRAM			/* C I/O Buffer						*/
    	.vecs		>		SDRAM			/* Interrupt Vectors				*/
    }

  • Hi Titus,

    Thanks for the reply. Please find below my response.

    Have you enabled EMIFB support in gel file for your EMIFB's SRAM ?

    [srinivas]: Yes. Required parameters are configured for SRAM over EMIFB bus.

    Are you able to access your SRAM through CCS memory browser after you loaded your current program through internal RAM ?
    [srinivas]: Yes. I am able to see the SRAM contents in memory browser.

    Could you please try to run simple "Hello world" program on DSP core through SRAM ?
    [srinivas]: I have executed the LED blinking program on DSP core, where DSP GEL does the initial configuration and DSP application executes the LED blinking from SRAM. All code segments are moved to SRAM in this case.

    Could you please try the below linker command file in CCS and tell me that whether you are able to hit at main().
    [srinivas]: The linker file which i have used almost same. Except for the size of stack and heap. I have used 0x800.

    Thanks & Regards
    Srinivas

     

  • Hi Srinivas,

    Could you please try the below linker command file in CCS and tell me that whether you are able to hit at main().
    [srinivas]: The linker file which i have used almost same. Except for the size of stack and heap. I have used 0x800.

    Have you tried the linker command file ?

    What about the results ?

    Same behavior ?

    What about size of SRAM ?

    Are you able to access your SRAM through CCS memory browser after you loaded your current program through internal RAM ?
    [srinivas]: Yes. I am able to see the SRAM contents in memory browser.

    Are you able to access your SRAM memory through CCS memory browser after you loaded your current ARM app via internal RAM ?

    Create "hot menu" option for EMIFB initialization( SRAM ) and try to call "EMIFB init" hot menu through script option in CCS after connected the ARM core.

    4) Upon loading the binary, the ARM core entering into “Running” state instead of halting
       at main( ). When I press the “pause” button,  the control is halting at invalid location.

    If possible, try to run the program through CCSv6 then you will be getting the reason for "running state"

  • Hi Titus,

    Thank you for the reply.

    Sorry for the delay.

    Have you tried the linker command file ?
    What about the results ?
    Same behavior ?
    [srinivas]: Yes. I tried with the linker file mentioned in the above communication.
    The behavior is same. Code enters directly into running state and no change in behavior when compare to 
    previously used linker file.


    What about size of SRAM ?
    [srinivas]: SRAM size is 2Mbytes starting from 0xC0000000


    Are you able to access your SRAM memory through CCS memory browser after you loaded your current 
    ARM app via internal RAM ?
    [srinivas]: Yes. We are able to test SRAM using this method by loading code in internal memory. It 
    works fine.


    Create "hot menu" option for EMIFB initialization( SRAM ) and try to call "EMIFB init" hot menu 
    through script option in CCS after connected the ARM core.
    [srinivas]: Are you talking about ARM GEL file or DSP GEL File. Because i am already initializing 
    EMIFB interface in DSP GEL file.

    If possible, try to run the program through CCSv6 then you will be getting the reason for "running 
    state"
    [srinivas]: My present version of CCS is 5.2.1.00018


    Further to add to this topic,
    I have tried executing the LED blinking program from DSP core. Moved all code segments to SRAM location (0xC0000000) and compiled the code for DSP core and executed it.

    Upon connecting the DSP core , GEL file gets executed and then after loading the DSP LED blinking program the code enters into Running state (same issue mentioned earlier). Halting the program shows invalid address location.

    In this current state of program, I modified the PC(program counter) value with main() function address using CCS “register” window option.

    When i execute the code with the main() function address loaded onto PC, the code gets executed and we are able to see the LEDs blinking. Even stepwise execution is working in this case.
    I don’t see any issue with SRAM (interfaced to EMIFB using FPGA) and seems to be working fine.
    But when we run the code directly, it is NOT showing the same result.

    Please let me know, if you have further suggestions on this issue.

    Thanks & Regards
    Srinivas

  • Hi Titus,

    Please find the latest update on the issue observed below:

    This exercise is performed on Custom board with SRAM interface (on EMIFB bus interfaced via FPGA).
    On EMIFB bus, the SRAM has CAS latency = 3, Page Size = 2048 Words settings.
    The SRAM memory is aligned in the forms of 128 Rows and each row size is 8K words (1 word = 16bits).
    We are executing the LED blinking program from DSP core (as mentioned in the below mail).

    When the executable binary ".text" segment fits inside single ROW  (of SRAM) the code is executing properly and we are able to see the LED blinking.
    But when the ".text" is spanned across two SRAM ROW'S (i.e., .text start address is Row-X and end address in Row-X+1) we are not able to see the LED blinking and control is directly entering into Running state.
    We are not sure why the Program Counter is not able to pick the correct address in the failing case. Can you please suggest pointers on this issue.

    Also can you please share information how Program Counter gets loaded when the code is initially loaded/started.

    Thanks & Regards,
    Srinivas

  • Hi Srinivas,

    Sorry for the delayed response.

    Is there any update on this issue ?

    "_c_int00" is the name of the symbol of the C environment entry point.

    1) Could you please try to align (8K) the SRAM memory while you mentioning about ".text" section in linker command file.

    Ex:

    .text  > SDRAM

    .text:_c_int00: align=8192 > SDRAM

    http://processors.wiki.ti.com/index.php/Accessing_c_int00

    2) Try to tweak the "load" and "run" executions in linker command file.

    What is address of "_c_int00" both working and non-working condition ?

    Would you please attach the both working and non-working " *.map " file ?

    http://processors.wiki.ti.com/index.php/Linker_Command_File_Primer

  •  Hi Titus,

    Thank you for the reply.

    I) i tried to aling the _c_init00 .text to 8K alignment but the behavious is the same.

    2) c_init address:

    _c_init00 address [working case]: 0xc0013200

     _c_init00 address [NON-working case]: 0xc0014200

    Both the scenarios are verifeid with 8K aligned .text.

    The only change i made in the code is increasing a dummy buffer size from 1k [working] to 2k [non-working].

    Uint32 Dummy_Buffer[1024*1];

    Please find the linker file and map file for both working and non-working cases is attached to this post.

    Thanks & Regards
    Srinivas

     

    7587._not_wkg_8kaling_TI_DSPLED_Blink.map.txt
    ******************************************************************************
                   TMS320C6x Linker PC v7.3.4                      
    ******************************************************************************
    >> Linked Tue Sep 23 08:34:59 2014
    
    OUTPUT FILE NAME:   <TI_DSPLED_Blink.out>
    ENTRY POINT SYMBOL: "_c_int00"  address: c00130a0
    
    
    MEMORY CONFIGURATION
    
             name            origin    length      used     unused   attr    fill
    ----------------------  --------  ---------  --------  --------  ----  --------
      L2                    11800000   00040000  00000000  00040000  RWIX
      L1P                   11e00000   00008000  00000000  00008000  RWIX
      L1D                   11f00000   00008000  00000000  00008000  RWIX
      L3                    80000000   00020000  00000000  00020000  RWIX
      SDRAM                 c0000000   001fffff  0001429c  001ebd63  RWIX
    
    
    SECTION ALLOCATION MAP
    
     output                                  attributes/
    section   page    origin      length       input sections
    --------  ----  ----------  ----------   ----------------
    .pinit     0    c0000000    00000000     UNINITIALIZED
    
    .far       0    c0000000    00012094     UNINITIALIZED
                      c0000000    00012080     main.obj (.far)
                      c0012080    0000000c     rts6740.lib : exit.obj (.far)
                      c001208c    00000008                 : _lock.obj (.far)
    
    .text      0    c00120a0    00001160     
                      c00120a0    00000a60     device.obj (.text)
                      c0012b00    000001a0     util.obj (.text)
                      c0012ca0    00000100     rts6740.lib : autoinit.obj (.text:__auto_init)
                      c0012da0    000000e0                 : exit.obj (.text:_exit)
                      c0012e80    000000e0     led.obj (.text)
                      c0012f60    000000a0     rts6740.lib : cpy_tbl.obj (.text:_copy_in)
                      c0013000    000000a0                 : memcpy64.obj (.text:_memcpy)
                      c00130a0    00000080                 : boot.obj (.text:_c_int00)
                      c0013120    00000060     main.obj (.text)
                      c0013180    00000040     rts6740.lib : args_main.obj (.text:__args_main)
                      c00131c0    00000020                 : _lock.obj (.text:__nop)
                      c00131e0    00000020                 : exit.obj (.text:_abort)
    
    .stack     0    c0013200    00001000     UNINITIALIZED
                      c0013200    00000008     rts6740.lib : boot.obj (.stack)
                      c0013208    00000ff8     --HOLE--
    
    .cinit     0    c0014200    00000084     
                      c0014200    0000002c     rts6740.lib : exit.obj (.cinit)
                      c001422c    00000004     --HOLE-- [fill = 0]
                      c0014230    00000029     main.obj (.cinit)
                      c0014259    00000007     --HOLE-- [fill = 0]
                      c0014260    0000001c     rts6740.lib : _lock.obj (.cinit)
                      c001427c    00000004     --HOLE-- [fill = 0]
                      c0014280    00000004     (.pad.cinit) [fill = 0]
    
    .const     0    c0014284    00000014     
                      c0014284    00000014     device_uart.obj (.const)
    
    .bss       0    c0014298    00000010     UNINITIALIZED
                      c0014298    0000000c     main.obj (.bss)
                      c00142a4    00000004     util.obj (.bss)
    
    
    GLOBAL SYMBOLS: SORTED ALPHABETICALLY BY Name 
    
    address    name
    --------   ----
    c0014298   $bss
    c0014298   .bss
    c00120a0   .text
    c00131e0   C$$EXIT
    c00128c4   _DEVICE_AsyncMemInit
    c0012784   _DEVICE_ExternalMemInit
    c0012168   _DEVICE_LPSCTransition
    c00125e4   _DEVICE_PLL0Init
    c0012300   _DEVICE_PSCInit
    c0012960   _DEVICE_SPIInit
    c0012ae8   _DEVICE_TIMER0Init
    c0012aec   _DEVICE_TIMER0Start
    c0012af4   _DEVICE_TIMER0Status
    c0012af0   _DEVICE_TIMER0Stop
    c0012a08   _DEVICE_UARTInit
    c0014284   _DEVICE_UART_config
    c00120e0   _DEVICE_init
    c00125cc   _DEVICE_kickLock
    c00125a4   _DEVICE_kickUnlock
    c00122c4   _DEVICE_pinmuxControl
    c001429c   _Diag_flag
    c0000000   _Dummy_Buffer
    c00120a0   _Dummy_Code
    c0012000   _RxBuffer
    c0002000   _Test_Array
    c0012b20   _UTIL_allocMem
    c0012b84   _UTIL_callocMem
    c0012b00   _UTIL_getCurrMemPtr
    c0012bd4   _UTIL_memcpy
    c0012b08   _UTIL_setCurrMemPtr
    c0012c24   _UTIL_waitLoop
    c0012c60   _UTIL_waitLoopAccurate
    c0014200   __STACK_END
    00001000   __STACK_SIZE
    00000001   __TI_args_main
    c0012088   ___TI_enable_exit_profile_output
    ffffffff   ___TI_pprof_out_hndl
    ffffffff   ___TI_prof_data_size
    ffffffff   ___TI_prof_data_start
    ffffffff   ___binit__
    c0014298   ___bss__
    ffffffff   ___c_args__
    c0014200   ___cinit__
    c00142a8   ___end__
    c0013200   ___etext__
    ffffffff   ___pinit__
    c00120a0   ___text__
    c0013180   __args_main
    c0012ca0   __auto_init
    c0012080   __cleanup_ptr
    c0012084   __dtors_ptr
    c001208c   __lock
    c00131c0   __nop
    c0013200   __stack
    c0012090   __unlock
    c00131e0   _abort
    c0012e80   _blink_led
    c00130a0   _c_int00
    c0012f60   _copy_in
    c0012da0   _exit
    c0014294   _hDEVICE_UART_config
    c0013120   _main
    c0013000   _memcpy
    c0014298   _ptr
    c00142a0   _uartInfo
    ffffffff   binit
    c0014200   cinit
    c00142a8   end
    c0013200   etext
    ffffffff   pinit
    
    
    GLOBAL SYMBOLS: SORTED BY Symbol Address 
    
    address    name
    --------   ----
    00000001   __TI_args_main
    00001000   __STACK_SIZE
    c0000000   _Dummy_Buffer
    c0002000   _Test_Array
    c0012000   _RxBuffer
    c0012080   __cleanup_ptr
    c0012084   __dtors_ptr
    c0012088   ___TI_enable_exit_profile_output
    c001208c   __lock
    c0012090   __unlock
    c00120a0   .text
    c00120a0   _Dummy_Code
    c00120a0   ___text__
    c00120e0   _DEVICE_init
    c0012168   _DEVICE_LPSCTransition
    c00122c4   _DEVICE_pinmuxControl
    c0012300   _DEVICE_PSCInit
    c00125a4   _DEVICE_kickUnlock
    c00125cc   _DEVICE_kickLock
    c00125e4   _DEVICE_PLL0Init
    c0012784   _DEVICE_ExternalMemInit
    c00128c4   _DEVICE_AsyncMemInit
    c0012960   _DEVICE_SPIInit
    c0012a08   _DEVICE_UARTInit
    c0012ae8   _DEVICE_TIMER0Init
    c0012aec   _DEVICE_TIMER0Start
    c0012af0   _DEVICE_TIMER0Stop
    c0012af4   _DEVICE_TIMER0Status
    c0012b00   _UTIL_getCurrMemPtr
    c0012b08   _UTIL_setCurrMemPtr
    c0012b20   _UTIL_allocMem
    c0012b84   _UTIL_callocMem
    c0012bd4   _UTIL_memcpy
    c0012c24   _UTIL_waitLoop
    c0012c60   _UTIL_waitLoopAccurate
    c0012ca0   __auto_init
    c0012da0   _exit
    c0012e80   _blink_led
    c0012f60   _copy_in
    c0013000   _memcpy
    c00130a0   _c_int00
    c0013120   _main
    c0013180   __args_main
    c00131c0   __nop
    c00131e0   C$$EXIT
    c00131e0   _abort
    c0013200   ___etext__
    c0013200   __stack
    c0013200   etext
    c0014200   __STACK_END
    c0014200   ___cinit__
    c0014200   cinit
    c0014284   _DEVICE_UART_config
    c0014294   _hDEVICE_UART_config
    c0014298   $bss
    c0014298   .bss
    c0014298   ___bss__
    c0014298   _ptr
    c001429c   _Diag_flag
    c00142a0   _uartInfo
    c00142a8   ___end__
    c00142a8   end
    ffffffff   ___TI_pprof_out_hndl
    ffffffff   ___TI_prof_data_size
    ffffffff   ___TI_prof_data_start
    ffffffff   ___binit__
    ffffffff   ___c_args__
    ffffffff   ___pinit__
    ffffffff   binit
    ffffffff   pinit
    
    [70 symbols]
    

  • Attached the working case map file.

    6864._wkg_8kalign_TI_DSPLED_Blink.map.txt
    ******************************************************************************
                   TMS320C6x Linker PC v7.3.4                      
    ******************************************************************************
    >> Linked Tue Sep 23 08:30:47 2014
    
    OUTPUT FILE NAME:   <TI_DSPLED_Blink.out>
    ENTRY POINT SYMBOL: "_c_int00"  address: c00120a0
    
    
    MEMORY CONFIGURATION
    
             name            origin    length      used     unused   attr    fill
    ----------------------  --------  ---------  --------  --------  ----  --------
      L2                    11800000   00040000  00000000  00040000  RWIX
      L1P                   11e00000   00008000  00000000  00008000  RWIX
      L1D                   11f00000   00008000  00000000  00008000  RWIX
      L3                    80000000   00020000  00000000  00020000  RWIX
      SDRAM                 c0000000   001fffff  0001329c  001ecd63  RWIX
    
    
    SECTION ALLOCATION MAP
    
     output                                  attributes/
    section   page    origin      length       input sections
    --------  ----  ----------  ----------   ----------------
    .pinit     0    c0000000    00000000     UNINITIALIZED
    
    .far       0    c0000000    00011094     UNINITIALIZED
                      c0000000    00011080     main.obj (.far)
                      c0011080    0000000c     rts6740.lib : exit.obj (.far)
                      c001108c    00000008                 : _lock.obj (.far)
    
    .text      0    c00110a0    00001160     
                      c00110a0    00000a60     device.obj (.text)
                      c0011b00    000001a0     util.obj (.text)
                      c0011ca0    00000100     rts6740.lib : autoinit.obj (.text:__auto_init)
                      c0011da0    000000e0                 : exit.obj (.text:_exit)
                      c0011e80    000000e0     led.obj (.text)
                      c0011f60    000000a0     rts6740.lib : cpy_tbl.obj (.text:_copy_in)
                      c0012000    000000a0                 : memcpy64.obj (.text:_memcpy)
                      c00120a0    00000080                 : boot.obj (.text:_c_int00)
                      c0012120    00000060     main.obj (.text)
                      c0012180    00000040     rts6740.lib : args_main.obj (.text:__args_main)
                      c00121c0    00000020                 : _lock.obj (.text:__nop)
                      c00121e0    00000020                 : exit.obj (.text:_abort)
    
    .stack     0    c0012200    00001000     UNINITIALIZED
                      c0012200    00000008     rts6740.lib : boot.obj (.stack)
                      c0012208    00000ff8     --HOLE--
    
    .cinit     0    c0013200    00000084     
                      c0013200    0000002c     rts6740.lib : exit.obj (.cinit)
                      c001322c    00000004     --HOLE-- [fill = 0]
                      c0013230    00000029     main.obj (.cinit)
                      c0013259    00000007     --HOLE-- [fill = 0]
                      c0013260    0000001c     rts6740.lib : _lock.obj (.cinit)
                      c001327c    00000004     --HOLE-- [fill = 0]
                      c0013280    00000004     (.pad.cinit) [fill = 0]
    
    .const     0    c0013284    00000014     
                      c0013284    00000014     device_uart.obj (.const)
    
    .bss       0    c0013298    00000010     UNINITIALIZED
                      c0013298    0000000c     main.obj (.bss)
                      c00132a4    00000004     util.obj (.bss)
    
    
    GLOBAL SYMBOLS: SORTED ALPHABETICALLY BY Name 
    
    address    name
    --------   ----
    c0013298   $bss
    c0013298   .bss
    c00110a0   .text
    c00121e0   C$$EXIT
    c00118c4   _DEVICE_AsyncMemInit
    c0011784   _DEVICE_ExternalMemInit
    c0011168   _DEVICE_LPSCTransition
    c00115e4   _DEVICE_PLL0Init
    c0011300   _DEVICE_PSCInit
    c0011960   _DEVICE_SPIInit
    c0011ae8   _DEVICE_TIMER0Init
    c0011aec   _DEVICE_TIMER0Start
    c0011af4   _DEVICE_TIMER0Status
    c0011af0   _DEVICE_TIMER0Stop
    c0011a08   _DEVICE_UARTInit
    c0013284   _DEVICE_UART_config
    c00110e0   _DEVICE_init
    c00115cc   _DEVICE_kickLock
    c00115a4   _DEVICE_kickUnlock
    c00112c4   _DEVICE_pinmuxControl
    c001329c   _Diag_flag
    c0000000   _Dummy_Buffer
    c00110a0   _Dummy_Code
    c0011000   _RxBuffer
    c0001000   _Test_Array
    c0011b20   _UTIL_allocMem
    c0011b84   _UTIL_callocMem
    c0011b00   _UTIL_getCurrMemPtr
    c0011bd4   _UTIL_memcpy
    c0011b08   _UTIL_setCurrMemPtr
    c0011c24   _UTIL_waitLoop
    c0011c60   _UTIL_waitLoopAccurate
    c0013200   __STACK_END
    00001000   __STACK_SIZE
    00000001   __TI_args_main
    c0011088   ___TI_enable_exit_profile_output
    ffffffff   ___TI_pprof_out_hndl
    ffffffff   ___TI_prof_data_size
    ffffffff   ___TI_prof_data_start
    ffffffff   ___binit__
    c0013298   ___bss__
    ffffffff   ___c_args__
    c0013200   ___cinit__
    c00132a8   ___end__
    c0012200   ___etext__
    ffffffff   ___pinit__
    c00110a0   ___text__
    c0012180   __args_main
    c0011ca0   __auto_init
    c0011080   __cleanup_ptr
    c0011084   __dtors_ptr
    c001108c   __lock
    c00121c0   __nop
    c0012200   __stack
    c0011090   __unlock
    c00121e0   _abort
    c0011e80   _blink_led
    c00120a0   _c_int00
    c0011f60   _copy_in
    c0011da0   _exit
    c0013294   _hDEVICE_UART_config
    c0012120   _main
    c0012000   _memcpy
    c0013298   _ptr
    c00132a0   _uartInfo
    ffffffff   binit
    c0013200   cinit
    c00132a8   end
    c0012200   etext
    ffffffff   pinit
    
    
    GLOBAL SYMBOLS: SORTED BY Symbol Address 
    
    address    name
    --------   ----
    00000001   __TI_args_main
    00001000   __STACK_SIZE
    c0000000   _Dummy_Buffer
    c0001000   _Test_Array
    c0011000   _RxBuffer
    c0011080   __cleanup_ptr
    c0011084   __dtors_ptr
    c0011088   ___TI_enable_exit_profile_output
    c001108c   __lock
    c0011090   __unlock
    c00110a0   .text
    c00110a0   _Dummy_Code
    c00110a0   ___text__
    c00110e0   _DEVICE_init
    c0011168   _DEVICE_LPSCTransition
    c00112c4   _DEVICE_pinmuxControl
    c0011300   _DEVICE_PSCInit
    c00115a4   _DEVICE_kickUnlock
    c00115cc   _DEVICE_kickLock
    c00115e4   _DEVICE_PLL0Init
    c0011784   _DEVICE_ExternalMemInit
    c00118c4   _DEVICE_AsyncMemInit
    c0011960   _DEVICE_SPIInit
    c0011a08   _DEVICE_UARTInit
    c0011ae8   _DEVICE_TIMER0Init
    c0011aec   _DEVICE_TIMER0Start
    c0011af0   _DEVICE_TIMER0Stop
    c0011af4   _DEVICE_TIMER0Status
    c0011b00   _UTIL_getCurrMemPtr
    c0011b08   _UTIL_setCurrMemPtr
    c0011b20   _UTIL_allocMem
    c0011b84   _UTIL_callocMem
    c0011bd4   _UTIL_memcpy
    c0011c24   _UTIL_waitLoop
    c0011c60   _UTIL_waitLoopAccurate
    c0011ca0   __auto_init
    c0011da0   _exit
    c0011e80   _blink_led
    c0011f60   _copy_in
    c0012000   _memcpy
    c00120a0   _c_int00
    c0012120   _main
    c0012180   __args_main
    c00121c0   __nop
    c00121e0   C$$EXIT
    c00121e0   _abort
    c0012200   ___etext__
    c0012200   __stack
    c0012200   etext
    c0013200   __STACK_END
    c0013200   ___cinit__
    c0013200   cinit
    c0013284   _DEVICE_UART_config
    c0013294   _hDEVICE_UART_config
    c0013298   $bss
    c0013298   .bss
    c0013298   ___bss__
    c0013298   _ptr
    c001329c   _Diag_flag
    c00132a0   _uartInfo
    c00132a8   ___end__
    c00132a8   end
    ffffffff   ___TI_pprof_out_hndl
    ffffffff   ___TI_prof_data_size
    ffffffff   ___TI_prof_data_start
    ffffffff   ___binit__
    ffffffff   ___c_args__
    ffffffff   ___pinit__
    ffffffff   binit
    ffffffff   pinit
    
    [70 symbols]
    

    Linker file used:

    0820.linker_ti.cmd.txt
    /* =========================================================================* 
     * OMAPL137_DSP_cache.cmd - Linker Command File for OMAPL137 CACHE Example  * 
     *                                                                          * 
     * These linker options are for command line linking only. For IDE linking, * 
     * you should set your linker options in Project Properties.                * 
     *      -c                  Link Using C Conventions                        * 
     *      -stack  0x1000      Software Stack Size                             * 
     *      -heap   0x1000      Heap Area Size                                  * 
     * =========================================================================*/ 
    -stack 0x1000 
    -heap 0x1000 
     
    /* =========================================================================* 
     *                      Specify the System Memory Map                       * 
     * =========================================================================*/ 
    MEMORY 
    { 
        L2:     o = 0x11800000      l = 0x00040000 
        L1P:    o = 0x11E00000      l = 0x00008000 
        L1D:    o = 0x11F00000      l = 0x00008000 
        L3:     o = 0x80000000      l = 0x00020000 
        SDRAM:  o = 0xC0000000      l = 0x001FFFFF 
    } 
     
    /* =========================================================================* 
     *              Specify the Sections Allocation into Memory                 * 
     * =========================================================================*/ 
    SECTIONS 
    { 
        .cinit      >        SDRAM           /* Initialization Tables            */ 
        .pinit      >        SDRAM           /* C++ Constructor Tables           */ 
        .const      >        SDRAM           /* Constant Data                    */ 
        .switch     >        SDRAM           /* Jump Tables                      */ 
        .text       >        SDRAM           /* Executable Code                  */
        .text:
         _c_int00: align=8192 > SDRAM
        .bss        >        SDRAM           /* Global & Static Variables        */ 
        .far        >        SDRAM           /* Far Global & Static Variables    */ 
        .stack      >        SDRAM           /* Software System Stack            */ 
        .sysmem     >        SDRAM           /* Dynamic Memory Allocation Area   */ 
         
        .cio        >        SDRAM           /* C I/O Buffer                     */ 
        .vecs       >        SDRAM           /* Interrupt Vectors                */ 
    } 
    

    Thanks & Regards

    Srinivas

     

     

     

  • Srinivas, I am fighting somewhat similar problem and it looks like you have an error in your linker script. I am not sure if it will fix the issue, but if you check "sprug84c.pdf" p.24 you'll see that the interrupt vector table should reside at 0xFFFF0000, not on the external memory.

  • Hi,

    Thank you for the reply.

     I will go through the document suggested. In my case, i  did not get any linker error.

    I have two custom boards one with SDRAM and another one with SRAM on EMIFB bus.

    On SDRAM based HW, i could able to locate the complete program segments(including interrupt vector table) onto SDRAM and executed the code successfully but on SRAM based board it is creating the issue.

    Thanks & Regards
    Srinivas

  • Srinivas, I guess I gave you a wrong advice because when I looked through the DSP script I thought it was for ARM, sorry.

    I also have a question about your ARM code, were you able to use ARM interrupts?

  • Hi,

    Thanks you for the reply.

    The ARM code is a simple LED blinking code and Interrupts are enabled.

    On SDRAM based HW, verified that interrupts are working fine (used UART interrupts for displaying messages).

    Regards
    Srinivas