主题中讨论的其他器件: C2000WARE
您好、专家
我 在调试有关 TMS320F28P650DK 芯片的第二个引导加载程序功能时遇到问题。 项目可以在引导加载程序区域中正常工作、而中断函数在跳转到应用程序区域后无法工作。 和其他外设模块(例如:CLA、CAN、ePWM)在应用区域初始化后可以正常工作。 顺便说一下、中断函数可以在引导加载程序区域中正常运行。
我想中断矢量表配置不正确。 但我无法找到 原因。
引导加载程序区域起始地址为0x80000、应用程序区域起始地址为0x86000。
引导加载程序项目的 CMD 如下:
//闪存配置
内存
{
begin:origin = 0x080000、length = 0x000002 //根据需要更新 codestart 位置
BOOT_RSVD:origin = 0x000002、length = 0x0001AF /* M0的一部分,引导 ROM 将此用于堆栈*/
RAMM0:origin = 0x0001B1、length = 0x00024F
RAMM1:origin = 0x000400、length = 0x000400
RAMD0:origin = 0x00C000、length = 0x002000
RAMD1:origin = 0x00E000、length = 0x002000
RAMD2:origin = 0x01A000、length = 0x002000 //可映射至 CPU1或 CPU2。 配置为 CPU2时、请使用地址0x8000。 用户应根据核心选择来注释/取消注释
RAMD3:origin = 0x01C000、length = 0x002000 //可被映射至 CPU1或 CPU2。 配置为 CPU2时、请使用地址0xA000。 用户应根据核心选择来注释/取消注释
RAMD4:origin = 0x01E000、length = 0x002000 //可映射至 CPU1或 CPU2。 配置为 CPU2时、请使用地址0xC000。 用户应根据核心选择来注释/取消注释
RAMD5:origin = 0x020000、length = 0x002000 //可以映射到 CPU1或 CPU2。 配置为 CPU2时、请使用地址0xE000。 用户应根据核心选择来注释/取消注释
RAMLS0:origin = 0x008000、length = 0x000800
RAMLS1:origin = 0x008800、length = 0x000800
RAMLS2:origin = 0x009000、length = 0x000800
RAMLS3:origin = 0x009800、length = 0x000800
RAMLS4:origin = 0x00A000、length = 0x000800
RAMLS5 : origin = 0x00A800 , length = 0x000800
RAMLS6:origin = 0x00B000、length = 0x000800
RAMLS7:origin = 0x00B800、length = 0x000800
RAMLS8:origin = 0x022000、length = 0x002000 //配置为 CLA 程序时使用地址0x4000
RAMLS9:origin = 0x024000、length = 0x002000 //当被配置为 CLA 程序时使用地址0x6000
// RAMLS8_CLA:origin = 0x004000、length = 0x002000 //仅在配置为 CLA 程序存储器时使用
// RAMLS9_CLA:origin = 0x006000,length = 0x002000 //仅在配置为 CLA 程序存储器时使用
RAMGS0:origin = 0x010000、length = 0x002000
RAMGS1:origin = 0x012000、length = 0x002000
RAMGS2:origin = 0x014000、length = 0x002000
RAMGS3:origin = 0x016000、length = 0x002000
RAMGS4:origin = 0x018000,length = 0x002000
/*闪存组(每个128个扇区)*/
/*FLASH_BANK0:origin = 0x080002,length = 0x1FFFE //可以映射到 CPU1或 CPU2。 用户应根据核心选择来注释/取消注释
*/
/*引导加载程序区域*/
FLASH_BANK0_SEC_0_3:origin = 0x080002、length = 0xFFE、/*片上闪存*/
FLASH_BANK0_SEC_4_23:origin = 0x081000、length = 0x5000、/*片上闪存*/
/* CLA 面积*/
/*FLASH_BANK0_SEC_16_39:origin = 0x084000、length = 0x6000、*//*片上闪存*/
/*FLASH_BANK0_SEC_16_23:origin = 0x085000,length = 0x1000,*/
/*BSS 区域*/
FLASH_BANK0_SEC_24_31:origin = 0x086000、length = 0x2000、/*片上闪存*/
/*文本区域*/
FLASH_BANK0_SEC_32_55:origin = 0x088000、length = 0x6000、/*片上闪存*/
FLASH_BANK0_SEC_56_63:origin = 0x08E000、length = 0x2000、/*片上闪存*/
FLASH_BANK0_SEC_64_71:origin = 0x090000、length = 0x2000、
FLASH_BANK0_SEC_72_79:origin = 0x092000、length = 0x2000、
FLASH_BANK0_SEC_80_87:origin = 0x094000、length = 0x2000、
FLASH_BANK0_SEC_88_95:origin = 0x096000、length = 0x2000、
FLASH_BANK0_SEC_96_103:origin = 0x098000、length = 0x2000、
FLASH_BANK0_SEC_104_111:origin = 0x09A000、length = 0x2000、
FLASH_BANK0_SEC_112_119:origin = 0x09C000、length = 0x2000、
FLASH_BANK0_SEC_120_127:origin = 0x09E000、length = 0x1FF0、
Flash_BANK1:origin = 0x0A0000、length = 0x20000 //可映射至 CPU1或 CPU2。 用户应根据核心选择来注释/取消注释
Flash_BANK2:origin = 0x0C0000、length = 0x20000 //可映射至 CPU1或 CPU2。 用户应根据核心选择来注释/取消注释
FLASH_BANK3:origin = 0x0E0002、length = 0x1FFFE //可映射至 CPU1或 CPU2。 用户应根据核心选择来注释/取消注释
FLASH_BANK4:origin = 0x100000、length = 0x20000 //可映射到 CPU1或 CPU2。 用户应根据核心选择来注释/取消注释
CPU1TOCPU2RAM:origin = 0x03A000、length = 0x000800
CPU2TOCPU1RAM:origin = 0x03B000、length = 0x000800
CLATOCPURAM:origin = 0x001480、length = 0x000080
CPUTOCLARAM:origin = 0x001500、length = 0x000080
CLATODMARAM:origin = 0x001680、length = 0x000080
DMATOCLARAM:origin = 0x001700、length = 0x000080
CANA_MSG_RAM:origin = 0x049000、length = 0x000800
CANB_MSG_RAM:origin = 0x04B000、length = 0x000800
复位:origin = 0x3FFFC0、length = 0x000002
}
部分
{
代码开始:>开始
.text:>> FLASH_BANK0_SEC_4_23、align (8)
.TI.ramfunc:load = FLASH_BANK0_SEC_0_3、
RUN = RAMD2、//可以在 RAM 中运行以获得最优循环性能
Load_start (RamfuncsLoadStart)、
Load_Size (RamfuncsLoadSize)、
Load_End (RamfuncsLoadEnd)、
RUN_START (RamfuncsRunStart)、
RUN_SIZE (RamfuncsRunSize)、
RUN_END (RamfuncsRunEnd)、
对齐(8)
FAPI:> FLASH_BANK0_SEC_0_3
{
--library=fapi_F28P65x_EABI_v3.00.01.lib
},对齐(8)
.cinit:> FLASH_BANK0_SEC_0_3、align (8)
.switch:> FLASH_BANK0_SEC_0_3、ALIGN (8)
.reset:> reset,type = DSECT /*未使用,*/
.stack:> RAMM1
#if defined (__TI_EABI __)
下一篇:> RAMD2
.bss:输出:> RAMD2
init_array:> FLASH_BANK0_SEC_0_3、ALIGN (8)
.const:> FLASH_BANK0_SEC_0_3、ALIGN (8)
.data:> RAMD2
.sysmem:> RAMD2
#else
.pinit:> FLASH_BANK0_SEC_0_3、ALIGN (8)
.ebss :>> RAMD2
econst:> FLASH_BANK0_SEC_0_3、ALIGN (8)
.esysmem :> RAMD2
#endif
ramgs0:> RAMGS0、type=NOINIT
ramgs1:> RAMGS1、type=NOINIT
ramgs2:> RAMGS2、type=NOINIT
MSGRAM_CPU1_TO_CPU2 > CPU1TOCPU2RAM、类型= NOINIT
MSGRAM_CPU2_TO_CPU1 > CPU2TOCPU1RAM、类型= NOINIT
DataBufferSection :> RAMD2, ALIGN(8)
应用项目的 CMD 如下所示:
内存
{
begin:origin = 0x080000、length = 0x000002 //根据需要更新 codestart 位置
BOOT_RSVD:origin = 0x000002、length = 0x0001AF /* M0的一部分,引导 ROM 将此用于堆栈*/
RAMM0:origin = 0x0001B1、length = 0x00024F
RAMM1:origin = 0x000400、length = 0x000400
RAMD0:origin = 0x00C000、length = 0x002000
RAMD1:origin = 0x00E000、length = 0x002000
// RAMD2:origin = 0x01A000,length = 0x002000 //可以映射到 CPU1或 CPU2。 配置为 CPU2时、请使用地址0x8000。 用户应根据核心选择来注释/取消注释
// RAMD3:origin = 0x01C000,length = 0x002000 //可映射至 CPU1或 CPU2。 配置为 CPU2时、请使用地址0xA000。 用户应根据核心选择来注释/取消注释
// RAMD4:origin = 0x01E000,length = 0x002000 //可以映射到 CPU1或 CPU2。 配置为 CPU2时、请使用地址0xC000。 用户应根据核心选择来注释/取消注释
// RAMD5:origin = 0x020000,length = 0x002000 //可以映射到 CPU1或 CPU2。 配置为 CPU2时、请使用地址0xE000。 用户应根据核心选择来注释/取消注释
RAMLS0LS1LS2LS3:origin = 0x008000、length = 0x002000
/*RAMLS0:origin = 0x008000,length = 0x000800
RAMLS1:origin = 0x008800、length = 0x000800
RAMLS2:origin = 0x009000、length = 0x000800
RAMLS3:origin = 0x009800,length = 0x000800*/
RAMLS4LS5LS6LS7:origin = 0x00A000、length = 0x002000
/* RAMLS4:origin = 0x00A000、length = 0x000800
RAMLS5 : origin = 0x00A800 , length = 0x000800
RAMLS6:origin = 0x00B000、length = 0x000800
RAMLS7:origin = 0x00B800,length = 0x000800*/
RAMLS8:origin = 0x022000、length = 0x002000 //配置为 CLA 程序时使用地址0x4000
RAMLS9:origin = 0x024000、length = 0x002000 //当被配置为 CLA 程序时使用地址0x6000
/*RAMLS8_CLA:origin = 0x004000、length = 0x002000 //仅在配置为 CLA 程序存储器时使用
RAMLS9_CLA:origin = 0x006000,length = 0x002000*///仅在配置为 CLA 程序存储器时使用
RAMGS0:origin = 0x010000、length = 0x002000
RAMGS1:origin = 0x012000、length = 0x002000
RAMGS2:origin = 0x014000、length = 0x002000
RAMGS3:origin = 0x016000、length = 0x002000
RAMGS4:origin = 0x018000,length = 0x002000
/*闪存组(每个128个扇区)*/
/*FLASH_BANK0:origin = 0x080002,length = 0x1FFFE //可以映射到 CPU1或 CPU2。 用户应根据核心选择注释/取消注释*/
/*引导加载程序区域*/
FLASH_BANK0_SEC_0_3:origin = 0x080002、length = 0xFFE、/*片上闪存*/
FLASH_BANK0_SEC_4_23:origin = 0x081000、length = 0x5000、/*片上闪存*/
PSU_APP_FLAG:origin = 0x086002,length = 0x0002 /* shelf app state word*/
/* CLA 面积*/
FLASH_BANK0_SEC_24_27:origin = 0x086004、length = 0xFFC、/*片上闪存*/
/*BSS 区域*/
FLASH_BANK0_SEC_28_31:origin = 0x087000、length = 0x1000、/*片上闪存*/
/*文本区域*/
FLASH_BANK0_SEC_32_55:origin = 0x088000、length = 0x5FFC、/*片上闪存*/
BOOT_DONE_FLAG:origin = 0x08DFFC、length = 0x0002 /* App update Success flag */
FLASH_BANK0_SEC_56_63:origin = 0x08E000、length = 0x2000、
FLASH_BANK0_SEC_64_71:origin = 0x090000、length = 0x2000、
FLASH_BANK0_SEC_72_79:origin = 0x092000、length = 0x2000、
FLASH_BANK0_SEC_80_87:origin = 0x094000、length = 0x2000、
FLASH_BANK0_SEC_88_95:origin = 0x096000、length = 0x2000、
FLASH_BANK0_SEC_96_103:origin = 0x098000、length = 0x2000、
FLASH_BANK0_SEC_104_111:origin = 0x09A000、length = 0x2000、
FLASH_BANK0_SEC_112_119:origin = 0x09C000、length = 0x2000、/*片上闪存*/
/*FLASH_BANK0_SEC_24_31:origin = 0x086000、length = 0x2000、*//*片上闪存*/
/*FLASH_BANK0_SEC_32_39:origin = 0x088000、length = 0x2000、*//*片上闪存*/
/*FLASH_BANK0_SEC_40_47:origin = 0x08A000、length = 0x2000、*//*片上闪存*/
/*FLASH_BANK0_SEC_48_55:origin = 0x08C000,length = 0x2000,*//*片上闪存*/
/* boot_done_flag:origin = 0x08DFFC,length = 0x000002*//*应用程序更新成功标志*/
/*FLASH_BANK0_SEC_56_63:origin = 0x08E000、length = 0x2000、*//*片上闪存*/
/*FLASH_BANK0_SEC_64_71:origin = 0x090000、length = 0x2000、
FLASH_BANK0_SEC_72_79:origin = 0x092000、length = 0x2000、
FLASH_BANK0_SEC_80_87:origin = 0x094000、length = 0x2000、
FLASH_BANK0_SEC_88_95:origin = 0x096000、length = 0x2000、
FLASH_BANK0_SEC_96_103:origin = 0x098000、length = 0x2000、
FLASH_BANK0_SEC_104_111:origin = 0x09A000、length = 0x2000、
FLASH_BANK0_SEC_112_119:origin = 0x09C000、length = 0x2000、
FLASH_BANK0_SEC_120_127:origin = 0x09E000、length = 0x1FF0、*/
Flash_BANK1:origin = 0x0A0000、length = 0x20000 //可映射至 CPU1或 CPU2。 用户应根据核心选择来注释/取消注释
Flash_BANK2:origin = 0x0C0000、length = 0x20000 //可映射至 CPU1或 CPU2。 用户应根据核心选择来注释/取消注释
FLASH_BANK3:origin = 0x0E0000、length = 0x20000 //可被映射至 CPU1或 CPU2。 用户应根据核心选择来注释/取消注释
FLASH_BANK4:origin = 0x100000、length = 0x20000 //可映射到 CPU1或 CPU2。 用户应根据核心选择来注释/取消注释
CPU1TOCPU2RAM:origin = 0x03A000、length = 0x000800
CPU2TOCPU1RAM:origin = 0x03B000、length = 0x000800
CLATOCPURAM:origin = 0x001480、length = 0x000080
CPUTOCLARAM:origin = 0x001500、length = 0x000080
CLATODMARAM:origin = 0x001680、length = 0x000080
DMATOCLARAM:origin = 0x001700、length = 0x000080
CANA_MSG_RAM:origin = 0x049000、length = 0x000800
CANB_MSG_RAM:origin = 0x04B000、length = 0x000800
复位:origin = 0x3FFFC0、length = 0x000002
}
部分
{
代码开始:>开始
.text:>> FLASH_BANK0_SEC_32_55、align (8)
.cinit:> FLASH_BANK0_SEC_28_31、align (8)
.switch:> FLASH_BANK0_SEC_28_31、ALIGN (8)
.reset:> reset,type = DSECT /*未使用,*/
.stack:> RAMM1
#if defined (__TI_EABI __)
bss:> RAMD1
.bss:输出:> RAMD1
init_array:> FLASH_BANK0_SEC_28_31、align (8)
.const:> FLASH_BANK0_SEC_28_31、ALIGN (8)
.data:> RAMD1
.sysmem:> RAMD1
#else
.pinit:> FLASH_BANK0_SEC_28_31、align (8)
.ebss :>> RAMD1
econst:> FLASH_BANK0_SEC_28_31、ALIGN (8)
.esysmem :> RAMD1
#endif
Psu_App_Flag :> PSU_APP_FLAG
Psu_Done_Flag :> boot_done_flag
ramgs0:> RAMGS0、type=NOINIT
ramgs1:> RAMGS1、type=NOINIT
ramgs2:> RAMGS2、type=NOINIT
MSGRAM_CPU1_TO_CPU2 > CPU1TOCPU2RAM、类型= NOINIT
MSGRAM_CPU2_TO_CPU1 > CPU2TOCPU1RAM、类型= NOINIT
#if defined (__TI_EABI __)
.TI.ramfunc:{}load = FLASH_BANK0_SEC_28_31、
Run = RAMD1、
Load_start (RamfuncsLoadStart)、
Load_Size (RamfuncsLoadSize)、
Load_End (RamfuncsLoadEnd)、
RUN_START (RamfuncsRunStart)、
RUN_SIZE (RamfuncsRunSize)、
RUN_END (RamfuncsRunEnd)、
对齐(8)
#else
.TI.ramfunc:{}load = FLASH_BANK0_SEC_28_31、
Run = RAMD1、
Load_start (_RamfuncsLoadStart)、
Load_Size (_RamfuncsLoadSize)、
Load_End (_RamfuncsLoadEnd)、
RUN_START (_RamfuncsRunStart)、
RUN_SIZE (_RamfuncsRunSize)、
RUN_END (_RamfuncsRunEnd)、
对齐(8)
#endif
/* CLA 特定部分*/
#if defined (__TI_EABI __)
/* CLA 特定部分*/
Cla1Prog:load = flash_BANK0_SEC_24_27、
运行= RAMLS4LS5LS6LS7、
Load_Start (Cla1ProgLoadStart)、
RUN_START (Cla1ProgRunStart)、
Load_Size (Cla1ProgLoadSize)、
对齐(4)
#else
/* CLA 特定部分*/
Cla1Prog:load = flash_BANK0_SEC_24_27、
运行= RAMLS4LS5LS6LS7、
Load_Start (_Cla1ProgLoadStart)、
RUN_START (_Cla1ProgRunStart)、
Load_Size (_Cla1ProgLoadSize)、
对齐(4)
#endif
Cla1ToCpuMsgRAM:> CLATOCPURAM
CpuToCla1MsgRAM:> CPUTOCLARAM
.scratchpad:> RAMLS0LS1LS2LS3
.bss_cla:> RAMLS0LS1LS2LS3
控制变量:> RAMLS0LS1LS2LS3
Cla1DataRam :> RAMLS0LS1LS2LS3
CLA_shared:> RAMLS0LS1LS2LS3
CLADataLS1:> RAMLS0LS1LS2LS3
#if defined (__TI_EABI __)
.const_cla:load = FLASH_BANK0_SEC_24_27、
运行= RAMLS0LS1LS2LS3、
RUN_START (Cla1ConstRunStart)、
Load_Start (Cla1ConstLoadStart)、
Load_Size (Cla1ConstLoadSize)、
对齐(4)
#else
.const_cla:load = FLASH_BANK0_SEC_24_27、
运行= RAMLS0LS1LS2LS3、
RUN_START (_Cla1ConstRunStart)、
Load_Start (_Cla1ConstLoadStart)、
Load_Size (_Cla1ConstLoadSize)、
对齐(4)
#endif
}
JUMP 的指令如下:
您能给我一些建议吗?