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.

c6416的Entry Point

c6416的Entry Point 在哪个地址上修改啊???和C6455和其他的dsp的Entry Point 不一样。

  • 6416默认从0地址启动

  • 我知道他默认从0地址执行;但是我想修改他,想从另一个地址开始运行,现在就是不知道在那个地址上修改啊???求大神指点!

  • C64没有类似功能。 解决方法是从0地址再做跳转。

  • 你好,怎么从0地址启动啊,写cmd文件吗,这是我的cmd文件;但是entry point 还不是0地址啊???

    *Vectors_poll.asm Vector file for polling
    .global _vectors
    .global _c_int00
    .global _vector0
    .global _vector1
    .global _vector2
    .global _vector3
    .global _vector4
    .global _vector5
    .global _vector6
    .global _vector7
    .global _vector8
    .global _vector9
    .global _vector10
    .global _vector11
    .global _vector12
    .global _vector13
    .global _vector14
    .global _vector15

    .ref _c_int00 ;entry address

    VEC_ENTRY .macro addr
    STW B0,*--B15
    MVKL addr,B0
    MVKH addr,B0
    B B0
    LDW *B15++,B0
    NOP 2
    NOP
    NOP
    .endm

    _vec_dummy:
    B B3
    NOP 5

    .sect ".vectors"
    .align 1024

    _vectors:
    _vector0: VEC_ENTRY _c_int00 ;RESET
    _vector1: VEC_ENTRY _vec_dummy ;NMI
    _vector2: VEC_ENTRY _vec_dummy ;RSVD
    _vector3: VEC_ENTRY _vec_dummy
    _vector4: VEC_ENTRY _vec_dummy
    _vector5: VEC_ENTRY _vec_dummy
    _vector6: VEC_ENTRY _vec_dummy
    _vector7: VEC_ENTRY _vec_dummy
    _vector8: VEC_ENTRY _vec_dummy
    _vector9: VEC_ENTRY _vec_dummy
    _vector10: VEC_ENTRY _vec_dummy
    _vector11: VEC_ENTRY _vec_dummy
    _vector12: VEC_ENTRY _vec_dummy
    _vector13: VEC_ENTRY _vec_dummy
    _vector14: VEC_ENTRY _vec_dummy
    _vector15: VEC_ENTRY _vec_dummy

  • 我用fpga通过hpi控制c6416,现在已经把程序通过hpi下载到dsp相应的地址空间了,不过下载的程序在dsp上运行的首地址是0x00001ec0,即entry point 是0x00001ec0;而dsp一上电就从0地址上运行;导致运行不成功,这种情况怎么办???

  • 是*.asm文件。 您的Vectors_poll.asm 应该实现了这个功能。 理论上,DSP脱离复位后,会从0地址运行,_vector0处的代码显示PC指针会跳转到_c_int00.

    在您的CMD文件中,把.vectors段指定到0地址了吗?

    下面是CMD文件的例子:

    MEMORY
    {
       VECS     o=0x00000000 l=0x00000800
       L2:      o=0x00000800 l=0x000DF800
       L2CACHE: o=0x000E0000 l=0x00020000
       SDRAM:   o=0x80000000 l=0x00800000
    }

    SECTIONS
    {   
      .vectors   > VECS
      .bss        > L2
      .far        > SDRAM
      .data       > L2
      .text       > L2
      .cio        > L2
      .cinit      > L2
      .boot       > L2
      .const      > L2
      .stack      > L2
      .sysmem     > L2
    }

    如果还有问题,您把具体测试方式和实验现象描述一下。

  • 你好,谢谢你以前的帮助,现在我又遇到一个问题了,能否帮我解释一下啊,非常谢谢了!

    C6416 EMIFA  这样配置寄存器   然后向外部存储器的三个地址写数据,最后观看CCS的memory为什么出现0xA0000000以后的所有地址都是一个值啊???都是0xFFFFFFFF,而不是0xA0000000是0x55555555,0xA0000004是0x12345678,0xA0000008是0xFFFFFFF?????

    程序如下:

    #include <csl.h>
    #include <csl_emifa.h>
    #include <stdio.h>

    #define EMIFA_CE3_BASE_ADDR1 0xA0000000
    #define EMIFA_CE3_BASE_ADDR2 0xA0000004
    #define EMIFA_CE3_BASE_ADDR3 0xA0000008

    EMIFA_Config emifaCfg0 = {
    0x0009207C,

    0xFFFFFFD3,
    0xFFFFFF03,
    0xFFFFFF43,
    0x6326CC22,

    0x57116000,
    0x0008061A,
    0x00054549,

    0x00000042,
    0x00000042,
    0x00000042,
    0x00000042
    };

    Uint32  index, tempData1,tempData2,tempData3; 
    Uint32 *pAsyncData1 = (Uint32 *)EMIFA_CE3_BASE_ADDR1;
    Uint32 *pAsyncData2 = (Uint32 *)EMIFA_CE3_BASE_ADDR2;
    Uint32 *pAsyncData3 = (Uint32 *)EMIFA_CE3_BASE_ADDR3;
    void main()
    {
    /*Initialise CSL,???CSL?*/
    CSL_init();
    EMIFA_config(&emifaCfg0);
    tempData1 = 0x55555555;
    tempData2 = 0x12345678;
    tempData3 = 0xFFFFFFFF;
    index=0;
    while(1){
    *pAsyncData1 = tempData1;
    *pAsyncData2 = tempData2; 
    *pAsyncData3 = tempData3;
    }
    printf("\nAsynchronous Read Write is Successful\n"); 
    return;
    }