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.

Boot Basics on OMAP-L138, The Final Chapter (I hope)

Guru 15580 points
Other Parts Discussed in Thread: OMAP-L138, OMAP5910

Instead of continuing a thread that has gone in several directions, I've started a new one to continue the "Boot Basics" dialog.

So, my progress so far:

1. Generated seperate ARM and DSP initialization led blinking .out programs.

2. Generated a boot image using AISGen to combine the two .out files into one SPI flash bootable image.

3. Flashed the boot image into my SPI flash device.

4. Boot my custom board (with Logic SOM) from SPI flash.

5. Verify that the ARM is properly initialized and is is blinking the LED (yay!).

6. Verity that the DSP code is properly loaded into mDDR at location 0xc0000000.

7. Verify that the ARM init code has actually initialized HOST1CFG resgister with the "truncated DSP boot address vector to the DSP_ISTP_RST_VAL field in the host 1
configuration register (HOST1CFG) of the SYSCFG module."

HOST1CFG = 0xC0000001
 BOOTRDY = 0x1
 _RESV_2 = *********
 DSP_ISTP_RST_VAL = 0x1

HOWEVER, when I boot from SPI flash the ARM LED program blinks the LED, but the DSP program is stuck at address 0x0072120, which sounds like it went back to the default boot loader vector instead of 0xc0000000. I can manually enter 0xc000000 into the PC and the DSP will again end up at 0x0072120 (idle).

If I then enter 0xc000920, which is where the "main" symbol is, THE DSP PROGRAM RUNS AND THE LED BLINKS.

It sounds like the AIS is doing its job properly, but the DSP is vectored to the wrong starting address.

Any thoughts?

Thx,

MikeH

 

  • Is 0xC0000000 the entrypoint of your DSP blink program? If so, once you are connected to the DSP with the code already loaded in external memory, you should be able to "Load Symbols" of your original .out file (before the AIS conversion) and single-step through the code after setting the PC to 0xc0000000. That should show you which part is causing the DSP to jump back to boot loader address.

    Jeff

  • Jeff,

    I think I have a fundamental lack of understanding of the definition of "entrypoint".

    Here's my linker:

    /*****************************************************************************
    * linker command file for OMAP-L138 test code.
    *
    * © Copyright 2009, Logic Product Development Company. All Rights Reserved.
    ******************************************************************************/

    //-l rts67plus.lib
    //-l ..\..\..\..\bsl\lib\evmomapl138_bsl.lib

    -stack           0x00000800
    -heap            0x00000800

    MEMORY
    {
       dsp_l2_ram:      ORIGIN = 0x11800000  LENGTH = 0x00040000
       shared_ram:      ORIGIN = 0x80004000  LENGTH = 0x0001C000 //to allow for AIS bootloader
    //   external_ram:    ORIGIN = 0xC0000000  LENGTH = 0x04000000
       arm_local_ram:   ORIGIN = 0xFFFF0000  LENGTH = 0x00002000
      
       dsp_test_load_ram: ORIGIN = 0xC0000000  LENGTH = 0x04000000
    }

    SECTIONS
    {

       .text       > dsp_test_load_ram
       .const      > dsp_test_load_ram
       .bss        > dsp_test_load_ram
       .far        > dsp_test_load_ram
       .switch     > dsp_test_load_ram
       .stack      > dsp_test_load_ram
       .data       > dsp_test_load_ram
       .cinit      > dsp_test_load_ram
       .sysmem     > dsp_test_load_ram
       .cio        > dsp_test_load_ram

    }

    ...and here's my map file.


    SECTION ALLOCATION MAP

     output                                  attributes/
    section   page    origin      length       input sections
    --------  ----  ----------  ----------   ----------------
    .text      0    c0000000    00000960    
                      c0000000    00000420     evomapl138bsl_mod.lib : evmomapl138_gpio.obj (.text)
                      c0000420    000001a0                           : evmomapl138_timer.obj (.text)
                      c00005c0    000000e0     rts6740.lib : autoinit.obj (.text:__auto_init)
                      c00006a0    000000e0                 : exit.obj (.text:_exit)
                      c0000780    000000a0                 : memcpy64.obj (.text:_memcpy)
                      c0000820    00000080                 : boot.obj (.text:_c_int00)
                      c00008a0    00000040                 : args_main.obj (.text:__args_main)
                      c00008e0    00000040     main_dsp.obj (.text)
                      c0000920    00000020     rts6740.lib : _lock.obj (.text:__nop)
                      c0000940    00000020                 : exit.obj (.text:_abort)

    .data      0    c0000000    00000000     UNINITIALIZED

    .stack     0    c0000960    00000800     UNINITIALIZED
                      c0000960    00000008     rts6740.lib : boot.obj (.stack)
                      c0000968    000007f8     --HOLE--

    .const     0    c0001160    00000080    
                      c0001160    00000080     evomapl138bsl_mod.lib : evmomapl138.obj (.const:_bitval_u32)

    .cinit     0    c00011e0    00000054    
                      c00011e0    0000002c     rts6740.lib : exit.obj (.cinit)
                      c000120c    00000004     --HOLE-- [fill = 0]
                      c0001210    0000001c                 : _lock.obj (.cinit)
                      c000122c    00000004     --HOLE-- [fill = 0]
                      c0001230    00000004     (.pad.cinit) [fill = 0]

    .switch    0    c0001234    00000024    
                      c0001234    00000024     evomapl138bsl_mod.lib : evmomapl138_gpio.obj (.switch:_getRegisterBankAndBit)

    .far       0    c0001258    00000014     UNINITIALIZED
                      c0001258    0000000c     rts6740.lib : exit.obj (.far)
                      c0001264    00000008                 : _lock.obj (.far)

    .bss       0    c000126c    00000004     UNINITIALIZED
                      c000126c    00000004     evomapl138bsl_mod.lib : evmomapl138_i2c.obj (.bss)

    .....so where's my "entrypoint"?

    thx

    MikeH

  • The .map file should show you where your entrypoint is.  Did you paste the entire map file here? For example, here is what is usually at the top of a map file:

    ******************************************************************************
                   TMS320C6x Linker PC v7.0.4                     
    ******************************************************************************
    >> Linked Thu Jan 13 14:08:43 2011

    OUTPUT FILE NAME:   <C:xxxx/OMAP-L138_DSP_program.out>
    ENTRY POINT SYMBOL: "boot_entry"  address: 00700000

    In general if you did not specify a specific entry point in your linker command file, the RTS library function "c_int00" will be used, which will then jump to your function called "main".

    Jeff

  • Jeff,

    OK, here's the top of my .map file showing that the actual entrypoint is 0xc0000820.

    ******************************************************************************
                   TMS320C6x Linker PC v7.0.3                     
    ******************************************************************************
    >> Linked Thu Jan 20 16:02:35 2011

    OUTPUT FILE NAME:   <DSP_init.out>
    ENTRY POINT SYMBOL: "_c_int00"  address: c0000820

    Since all I specify to HOST1CFG is 0xc00, how do I set HOST1CFG = 0xc0000820?

        HOST1CFG = (0xC0000000 & 0xFFFFFC00);

     

    MikeH

  • The issue is that your entry point is not aligned to the 1K boundary, which is required by the DSP if you are setting the reset vectors.

    You should specify in your linker.cmd file that the .text:_c_int00 section is at the start of dsp_test_load_ram like this:

    SECTIONS

    {
       .text:_c_int00 > dsp_test_load_ram
       .text > dsp_test_load_ram
       ...

    }

    See the linker user guide for more info on how to specify where sections get mapped to.

    Jeff

  • Jeff,

    I have spent the last several hours reading the Assembly Launguae Tools V7.0 User Guide trying to understand what is happening with my project. If I use the example you gave, my linker puts c_int00 at 0xc0001160.

    ENTRY POINT SYMBOL: "_c_int00" address: c0001160

    However, if I change the section (symbol) definition to

    SECTIONS

    {
       .text:_c_int00 > external_ram run=0xc0000000
       .text  > external_ram

    ...the map file says

    ******************************************************************************

    TMS320C6x Linker PC v7.0.3

    ******************************************************************************

    >> Linked Fri Jan 21 12:06:57 2011

     

    OUTPUT FILE NAME: <DSP_init.out>

    ENTRY POINT SYMBOL: "_c_int00" address: c0000000

    ...but c_int00 actually appears at 0xc0000080 and .data appears at 0xc0000000


    SECTION ALLOCATION MAP

     output                                  attributes/
    section   page    origin      length       input sections
    --------  ----  ----------  ----------   ----------------
    .data      0    c0000000    00000000     UNINITIALIZED

    .text:_c_int00
    *          0    c0000080    00000080     RUN ADDR = c0000000
                      c0000080    00000080     rts6740.lib : boot.obj (.text:_c_int00)

    When I try to run the above compiled code starting at 0xc0000000 I get hung in a loop. When I run from 0xc0000080 the program runs fine.

    I'm sorry to be such a noob, but this is very confusing to me, and your guidance is much appreciated.

    thx

    MikeH

     

     

  • Mike,

    Here is a snip from one of my *.map files:

    ENTRY POINT SYMBOL: "_c_int00"  address: 1180f860


    MEMORY CONFIGURATION

             name            origin    length      used     unused   attr    fill
    ----------------------  --------  ---------  --------  --------  ----  --------
      VECTORS               11800000   00000200  00000200  00000000  RW X
      IRAM                  11800200   003ffe00  00024dc0  003db040  RW X
      CACHE_L1P             11e00000   00008000  00000000  00008000  RW X
      CACHE_L1D             11f00000   00008000  00000000  00008000  RW X
      L3_CBA_RAM            80000000   00020000  00000000  00020000  RW X
      SDRAM                 c3c00000   00400000  0010471c  002fb8e4  RW X


    SECTION ALLOCATION MAP

     output                                  attributes/
    section   page    origin      length       input sections
    --------  ----  ----------  ----------   ----------------
    .vecs      0    11800000    00000200     
                      11800000    00000200     dspVR_bios.p674.obj (.vecs)

    .data      0    11800200    00000000     UNINITIALIZED

    .text      0    11800200    00014e00

    Notice that there is a memory section called VECTORS.  I created this memory area in the MEMORY portion of the linker command file, and then assigned the .vec section to this area in the SECTIONS definition .  The first vector in the .vec table is a jump to _c_int00.   This technique lets you have AIS or any other load technique use the beginning of the vector table as your entry point.  This example shows the DSP running in its internal RAM memory, but just change the address of VECTORS for your use.

  • Bruce,

    Thanks for trying to help. But I feel pretty stupid right now.

    Here's my linker file.

    /*****************************************************************************
    * linker command file for OMAP-L138 test code.
    *
    * © Copyright 2009, Logic Product Development Company. All Rights Reserved.
    ******************************************************************************/

    //-l rts67plus.lib
    //-l ..\..\..\..\bsl\lib\evmomapl138_bsl.lib

    -stack           0x00000800
    -heap            0x00000800

    MEMORY
    {
     vectors:  ORIGIN = 0XC0000000  LENGTH = 0x00000200
       dsp_l2_ram:      ORIGIN = 0x11800000  LENGTH = 0x00040000
       shared_ram:      ORIGIN = 0x80004000  LENGTH = 0x0001C000 //to allow for AIS bootloader
       external_ram:    ORIGIN = 0xC0000200  LENGTH = 0x04000000
       arm_local_ram:   ORIGIN = 0xFFFF0000  LENGTH = 0x00002000
     }

    SECTIONS

    {

     .vecs > vectors
        .vecs: _c_int00 > vectors 
       .text  > external_ram
       .const      > external_ram
       .bss        > external_ram
       .far        > external_ram
       .switch     > external_ram
       .stack      > external_ram
       .data       > external_ram
       .cinit      > external_ram
       .sysmem     > external_ram
       .cio        > external_ram

    }

    And here's my map file.

    ******************************************************************************
                   TMS320C6x Linker PC v7.0.3                     
    ******************************************************************************
    >> Linked Fri Jan 21 13:33:28 2011

    OUTPUT FILE NAME:   <DSP_init.out>
    ENTRY POINT SYMBOL: "_c_int00"  address: c0000a20


    MEMORY CONFIGURATION

             name            origin    length      used     unused   attr    fill
    ----------------------  --------  ---------  --------  --------  ----  --------
      dsp_l2_ram            11800000   00040000  00000000  00040000  RWIX
      shared_ram            80004000   0001c000  00000000  0001c000  RWIX
      vectors               c0000000   00000200  00000000  00000200  RWIX
      external_ram          c0000200   04000000  00001270  03ffed90  RWIX
      arm_local_ram         ffff0000   00002000  00000000  00002000  RWIX


    SECTION ALLOCATION MAP

     output                                  attributes/
    section   page    origin      length       input sections
    --------  ----  ----------  ----------   ----------------
    .text      0    c0000200    00000960    
                      c0000200    00000420     evomapl138bsl_mod.lib : evmomapl138_gpio.obj (.text)
                      c0000620    000001a0                           : evmomapl138_timer.obj (.text)
                      c00007c0    000000e0     rts6740.lib : autoinit.obj (.text:__auto_init)
                      c00008a0    000000e0                 : exit.obj (.text:_exit)
                      c0000980    000000a0                 : memcpy64.obj (.text:_memcpy)
                      c0000a20    00000080                 : boot.obj (.text:_c_int00)
                      c0000aa0    00000040                 : args_main.obj (.text:__args_main)
                      c0000ae0    00000040     main_dsp.obj (.text)
                      c0000b20    00000020     rts6740.lib : _lock.obj (.text:__nop)
                      c0000b40    00000020                 : exit.obj (.text:_abort)

    .data      0    c0000200    00000000     UNINITIALIZED

    .stack     0    c0000b60    00000800     UNINITIALIZED
                      c0000b60    00000008     rts6740.lib : boot.obj (.stack)
                      c0000b68    000007f8     --HOLE--

    .const     0    c0001360    00000080    
                      c0001360    00000080     evomapl138bsl_mod.lib : evmomapl138.obj (.const:_bitval_u32)

    .cinit     0    c00013e0    00000054    
                      c00013e0    0000002c     rts6740.lib : exit.obj (.cinit)
                      c000140c    00000004     --HOLE-- [fill = 0]
                      c0001410    0000001c                 : _lock.obj (.cinit)
                      c000142c    00000004     --HOLE-- [fill = 0]
                      c0001430    00000004     (.pad.cinit) [fill = 0]

    .switch    0    c0001434    00000024    
                      c0001434    00000024     evomapl138bsl_mod.lib : evmomapl138_gpio.obj (.switch:_getRegisterBankAndBit)

    .far       0    c0001458    00000014     UNINITIALIZED
                      c0001458    0000000c     rts6740.lib : exit.obj (.far)
                      c0001464    00000008                 : _lock.obj (.far)

    .bss       0    c000146c    00000004     UNINITIALIZED
                      c000146c    00000004     evomapl138bsl_mod.lib : evmomapl138_i2c.obj (.bss)


    GLOBAL SYMBOLS: SORTED ALPHABETICALLY BY Name

    address    name
    --------   ----
    c000146c   $bss
    c000146c   .bss
    c0000200   .data
    c0000200   .text
    c0000b40   C$$EXIT
    c00005b0   _GPIO_getInput
    c0000344   _GPIO_setDir
    c00003c0   _GPIO_setOutput
    c000042c   _GPIO_toggleLoop
    c0000748   _USTIMER_delay
    c0000730   _USTIMER_get
    c0000668   _USTIMER_init
    c000062c   _USTIMER_reset
    c0000620   _USTIMER_set
    c0001360   __STACK_END
    00000800   __STACK_SIZE
    00000001   __TI_args_main
    c0001460   ___TI_enable_exit_profile_output
    ffffffff   ___TI_pprof_out_hndl
    ffffffff   ___TI_prof_data_size
    ffffffff   ___TI_prof_data_start
    ffffffff   ___binit__
    c000146c   ___bss__
    ffffffff   ___c_args__
    c00013e0   ___cinit__
    c0000200   ___data__
    c0000200   ___edata__
    c0001470   ___end__
    c0000b60   ___etext__
    ffffffff   ___pinit__
    c0000200   ___text__
    c0000aa0   __args_main
    c00007c0   __auto_init
    c0001458   __cleanup_ptr
    c000145c   __dtors_ptr
    c0001464   __lock
    c0000b20   __nop
    c0000b60   __stack
    c0001468   __unlock
    c0000b40   _abort
    c0001360   _bitval_u32
    c0000a20   _c_int00
    c00008a0   _exit
    c0000ae0   _main
    c0000980   _memcpy
    ffffffff   binit
    c00013e0   cinit
    c0000200   edata
    c0001470   end
    c0000b60   etext
    ffffffff   pinit


    GLOBAL SYMBOLS: SORTED BY Symbol Address

    address    name
    --------   ----
    00000001   __TI_args_main
    00000800   __STACK_SIZE
    c0000200   .data
    c0000200   .text
    c0000200   ___data__
    c0000200   ___edata__
    c0000200   ___text__
    c0000200   edata
    c0000344   _GPIO_setDir
    c00003c0   _GPIO_setOutput
    c000042c   _GPIO_toggleLoop
    c00005b0   _GPIO_getInput
    c0000620   _USTIMER_set
    c000062c   _USTIMER_reset
    c0000668   _USTIMER_init
    c0000730   _USTIMER_get
    c0000748   _USTIMER_delay
    c00007c0   __auto_init
    c00008a0   _exit
    c0000980   _memcpy
    c0000a20   _c_int00
    c0000aa0   __args_main
    c0000ae0   _main
    c0000b20   __nop
    c0000b40   C$$EXIT
    c0000b40   _abort
    c0000b60   ___etext__
    c0000b60   __stack
    c0000b60   etext
    c0001360   __STACK_END
    c0001360   _bitval_u32
    c00013e0   ___cinit__
    c00013e0   cinit
    c0001458   __cleanup_ptr
    c000145c   __dtors_ptr
    c0001460   ___TI_enable_exit_profile_output
    c0001464   __lock
    c0001468   __unlock
    c000146c   $bss
    c000146c   .bss
    c000146c   ___bss__
    c0001470   ___end__
    c0001470   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

    [51 symbols]

    Notice that my .vecs section does not show up in the .map and that c_int00 is at 0xc0000a20. I hope you can see something obvious here.....

    MikeH

     

  • Mike,

    My example used DSP/BIOS and that is where the .vec section came from.  For you, without DSP/BIOS  the correct section to map into VECTORS is .cinit.  from your post, you need to make the .cmd file look like this I think:

    .....

    SECTIONS

    {

     .cinit > vectors 
       .text  > external_ram
       .const      > external_ram
       .bss        > external_ram

    ......

     

     

    When you don't have DSP/BIOS in your application, the initialization is in the .cinit section.  Again, the jump to _c_int00 is at the very beginning of .cinit, so you can use the beginning of .cinit as you entry point instead of _c_int00

     

     

  • Bruce,

    Thanks again for persevering with me. Getting closer, but still not booting DSP.

    Per your suggestion, I made the linker look like this:

     


    MEMORY
    {
     vectors:  ORIGIN = 0XC0000000  LENGTH = 0x00000200
       dsp_l2_ram:      ORIGIN = 0x11800000  LENGTH = 0x00040000
       shared_ram:      ORIGIN = 0x80004000  LENGTH = 0x0001C000 //to allow for AIS bootloader
       external_ram:    ORIGIN = 0xC0000200  LENGTH = 0x04000000
       arm_local_ram:   ORIGIN = 0xFFFF0000  LENGTH = 0x00002000
     }

    SECTIONS
    {
     .cinit  > vectors 
       .text  > external_ram
       .const      > external_ram
       .bss        > external_ram
       .far        > external_ram
       .switch     > external_ram
       .stack      > external_ram
       .data       > external_ram
    //   .cinit      > external_ram
       .sysmem     > external_ram
       .cio        > external_ram

    ...which caused .cinit to be linked to 0xc0000000

    ******************************************************************************
                   TMS320C6x Linker PC v7.0.3                     
    ******************************************************************************
    >> Linked Fri Jan 21 14:29:15 2011

    OUTPUT FILE NAME:   <DSP_init.out>
    ENTRY POINT SYMBOL: "_c_int00"  address: c0000a20


    MEMORY CONFIGURATION

             name            origin    length      used     unused   attr    fill
    ----------------------  --------  ---------  --------  --------  ----  --------
      dsp_l2_ram            11800000   00040000  00000000  00040000  RWIX
      shared_ram            80004000   0001c000  00000000  0001c000  RWIX
      vectors               c0000000   00000200  00000054  000001ac  RWIX
      external_ram          c0000200   04000000  0000121c  03ffede4  RWIX
      arm_local_ram         ffff0000   00002000  00000000  00002000  RWIX


    SECTION ALLOCATION MAP

     output                                  attributes/
    section   page    origin      length       input sections
    --------  ----  ----------  ----------   ----------------
    .cinit     0    c0000000    00000054    
                      c0000000    0000002c     rts6740.lib : exit.obj (.cinit)
                      c000002c    00000004     --HOLE-- [fill = 0]
                      c0000030    0000001c                 : _lock.obj (.cinit)
                      c000004c    00000004     --HOLE-- [fill = 0]
                      c0000050    00000004     (.pad.cinit) [fill = 0]

    But, c_int00 is up at  c0000a20 for some reason. And when I step through the code starting at 0xc0000000, it never jumps to 0xc0000a20.

    Sorry for being so dense, but this (obvously) has me stumped.

    Thx,

    MikeH

  • Mike,

    Could you post a dissassembly of .cinit from 0xc0000000 to 0xc0000053?  Alternatively, you could load your code via JTAGE and step from 0xc0000000 and see what is going on.

  • Bruce,

    Disassembly of .cinit from 0xc0000000 to 0xc0000053:

    0xC0000000:   00000004            LDHU.D1T1     *-A0[0],A0
    0xC0000004:   C0001404     [ A0]  LDHU.D1T1     *A0--[0],A0
    0xC0000008:   00000000            NOP
    0xC000000C:   00000000            NOP
    0xC0000010:   00000004            LDHU.D1T1     *-A0[0],A0
    0xC0000014:   C0001408     [ A0]  EXTU.S1       A0,0,20,A0
    0xC0000018:   00000000            NOP
    0xC000001C:   00000000            NOP
    0xC0000020:   00000004            LDHU.D1T1     *-A0[0],A0
    0xC0000024:   C000140C     [ A0]  LDHU.D2T1     *+B14[20],A0
    0xC0000028:   00000001            NOP
    0xC000002C:   00000000 ||         NOP
    0xC0000030:   00000004            LDHU.D1T1     *-A0[0],A0
    0xC0000034:   C0001410     [ A0]  B.S1          0xC00000C0 (PC+160 = 0xc00000c0)
    0xC0000038:   C0000B20     [ A0]  ABSDP.S1      A1:A0,A1:A0
    0xC000003C:   00000000            NOP
    0xC0000040:   00000004            LDHU.D1T1     *-A0[0],A0
    0xC0000044:   C0001414     [ A0]  LDBU.D1T1     *A0--[0],A0
    0xC0000048:   C0000B20     [ A0]  ABSDP.S1      A1:A0,A1:A0
    0xC000004C:   00000000            NOP
    0xC0000050:   00000000            NOP

    ...which pretty much confirms what I see in the .map file for .cinit

    SECTION ALLOCATION MAP

     output                                  attributes/
    section   page    origin      length       input sections
    --------  ----  ----------  ----------   ----------------
    .cinit     0    00000000    00000000     UNINITIALIZED

    .cinit     0    c0000000    00000054    
                      c0000000    0000002c     rts6740.lib : exit.obj (.cinit)
                      c000002c    00000004     --HOLE-- [fill = 0]
                      c0000030    0000001c                 : _lock.obj (.cinit)
                      c000004c    00000004     --HOLE-- [fill = 0]
                      c0000050    00000004     (.pad.cinit) [fill = 0]

    .text      0    c0000200    00000960    

    There is no _c_int00 jump.

    When I step through the code starting at  0xc0000000, the program appears to be initializing memory for the first few instructions, then jumps from 0xc0000042 to 0xc00000c0. I don't see any code compiled for 0xc00000c0.

    MikeH

     

     

  • I GOT IT WORKING!!!!  Both the ARM and DSP now boot from SPI Flash.

    Final linker config:

    /*****************************************************************************
    * linker command file for OMAP-L138 test code.
    *
    * © Copyright 2009, Logic Product Development Company. All Rights Reserved.
    ******************************************************************************/

    //-l rts67plus.lib
    //-l ..\..\..\..\bsl\lib\evmomapl138_bsl.lib

    -stack           0x00000800
    -heap            0x00000800

    MEMORY
    {
     vectors:  ORIGIN = 0XC0000000  LENGTH = 0x00000200
       dsp_l2_ram:      ORIGIN = 0x11800000  LENGTH = 0x00040000
       shared_ram:      ORIGIN = 0x80004000  LENGTH = 0x0001C000 //to allow for AIS bootloader
       external_ram:    ORIGIN = 0xC0000200  LENGTH = 0x04000000
       arm_local_ram:   ORIGIN = 0xFFFF0000  LENGTH = 0x00002000
     }

    SECTIONS
    {
     .cinit  > vectors
      .text:_c_int00 > vectors

     
       .text  > external_ram
       .const      > external_ram
       .bss        > external_ram
       .far        > external_ram
       .switch     > external_ram
       .stack      > external_ram
       .data       > external_ram
       .sysmem     > external_ram
       .cio        > external_ram

    }

    Thanks to all for the assistance.

    Someone at TI should put this in an app note......

     

    MikeH

     

  • I guess the layout in non-DSP/BIOS projects isn't how I thought.  Here's another option:

    Make a small assembly language module that has the following:

     

      .sect "MYBOOT"

    .global _c_int00

    .global _Restart

    _Restart:
      B         .s1  _c_int00
      RET

     

    Include this in your project and set the section MYBOOT to be at 0xC0000000. 

    I have used this method successfully in the past with the OMAP5910 to start the DSP from the Arm.

    Some of my syntax may need a little work for the C674x, but you should get the idea.

     

    I'll try to work out the details in a quick "hello world" project if needed.

  • Bruce,

    I think I'm now going to move on the the "real" project which includes a DSP/BIOS project. Thanks,

    MikeH

     

  • Fist, thanks to MikeH for question, and to all fore discussion.

    I do not understand, which entry points is valid? From C0000000 to C0000400 or C0000000, C0000400, C0000800, C0000C00 and etc in this range? 

    As I can judge, MikeH have built two projects: first for DSP, and second for ARM side. So, how we may process these .out files though AISgen to obtain one ASIC-file for starting them from SPI or though UART-utilits? Yes, I have read sprab41.pdf, but still have some questions. 1) I should select a device type ARM for both DSP an ARM .out files, and take them both at one time at ARM application file string?  2) When I specified two .out files, entry point was taken from fist .out file, isn’t it? How may I configure DDR?  Yes, I have read part 5.3.4, but what exactly should be written at DRAPYC1R, SDCR and etc to perform DDR configurations like in function EVMOMAPL138_initRAM from evmomapl138.c ?

     

    May be anyone give me an example configuration files file to solve my confuse?

     

    Thank you!