主题中讨论的其他器件:TMDSCNCD28388D、 C2000WARE
工具/软件:TI C/C++编译器
评估板: F28388D controlCARD (TMDSCNCD28388D)
运行控制算法 CLA1并使用 GPIO28来确认 CLA 任务1正在定期执行。
当 CLA 代码大小为特定大小时、CLA-Task1运行。 但是、一旦我通过添加单个 MNOP 来增加代码大小、CLA-Task1就不再运行、因为 GPIO28不会切换。
(请参阅下面的注释掉 MNOP)
除可用内存外、CLA 不应对任务代码大小有任何限制。
在映射文件中、一旦 ClaTask1从0x54c 变为0x54e。 或 Cla1Prog 从0x584到0x586 CLA 任务不运行。
以下是一些支持信息:
编译器和链接器选项:
-v28 -ml -mt --cla_support=cla2 -float_support=fpu64 -idiv_support=idiv0 -tmu_support=tmu0 -vcu_support=vcu2 -O2 -opt_for_speed=2 -fp_mode=relaxed -fp_reassoc=on -vcu/gen3 -vcus/gencontent/texclintrends/gencontent/gencontent/包含/ti/ccs930/ccs/tools/compiler/ti-cgt-c2000_18.12.5.LTS/include -包含-包含-包含-p3_content/gencontent/gencontent/gencontent/texclinc/包含-content/gencontent/gencontent/texclinc/包含-content/gencontent/gencontent/gencontent/tex-content/gencontent/tex-content/tex-content/包含-content/gencontent/gencontent/tex-content/包含-content/gencontent/tex-sinc"–包含-content/texclinc/包含-content/tex-content/gencontent/tex-content/包含-content/gencontent/texclintr/tex-content/tex-content/gen3–包含-content/gencontent/
-v28 -ml -mt --cla_support=cla2 -float_support=fpu64 -idiv_support=idiv0 --tmu_support=vcu_support=vcu2 -O2 -opt_for_speed=2 -fp_mode=relaxed -fp_reassoc=on -vcu_support=vcubs=v-cla=v-ram_display_remote_display-命令-dag_subsize_display-ine-f=-命令-display_subsize_remote_display-命令-命令-f=-ine-dag_off-命令-命令-命令-***-命令-ine-dag_ine-dag_ines=-ine-dag_bulate-dag=-ine-dag=-ine-dag=-ine-dag_bi-display-dag_bi-display-dag_off-ine-dag_remote_remote_remote_display-ines=-ines=-dag-/ti/ccs930/ccs/tools/compiler/ti-cgt-c2000_18.12.5.LTS/include /ti/ccs930/ccs/tools/compiler/ti-cgt-c2000_18.12.5.LTS/lib
链接器文件:
存储器
{
/* begin 用于"引导至闪存"引导加载程序模式*/
开始:origin = 0x080000,length = 0x000002
BOOT_RSVD:origin = 0x000002,length = 0x0001AE // M0的部分,引导 ROM 将使用此栈*/
RAMM0M1:origin = 0x0001B0,length = 0x000648
// RAMM1_RSVD:origin = 0x0007F8,length = 0x000008 //根据勘误咨询“Memory:Prepetching Beyond valid Memory”(内存:超出有效内存的预取),保留并不用于代码*/
CLA1_MSGRAMLOW:origin = 0x001480,length = 0x000080
CLA1_MSGRAMHIGH:origin = 0x001500,length = 0x000080
RAMLS0LS1:origin = 0x008000、length = 0x001000
RAMLS2LS3LS4LS5:origin = 0x009000,length = 0x002000
RAMLS6:origin = 0x00B000、length = 0x000800
RAMLS7:origin = 0x00B800,length = 0x000800
RAMD0:origin = 0x00C000、length = 0x000800
RAMD1:origin = 0x00C800,length = 0x000800
RAMGS0:origin = 0x00D000,length = 0x001000
RAMGS1:origin = 0x00E000、length = 0x001000
RAMGS2:origin = 0x00F000、length = 0x001000
RAMGS3:origin = 0x010000,length = 0x001000
RAMGS4:origin = 0x011000,length = 0x001000
RAMGS5:origin = 0x012000,length = 0x001000
RAMGS6:origin = 0x013000、length = 0x001000
RAMGS7:origin = 0x014000,length = 0x001000
RAMGS8:origin = 0x015000,length = 0x001000
RAMGS9:origin = 0x016000,length = 0x001000
RAMGS10:origin = 0x017000,length = 0x001000
RAMGS11:origin = 0x018000,length = 0x001000
RAMGS12:origin = 0x019000,length = 0x001000
RAMGS13:origin = 0x01A000,length = 0x001000
RAMGS14:origin = 0x01B000,length = 0x001000
RAMGS15:origin = 0x01C000,length = 0x000FF8
// RAMGS15_RSVD:origin = 0x01CFF8,length = 0x000008 //根据勘误咨询“Memory: pret撷取 超出有效内存”*/,保留并不用于代码
CPU1TOCPU2RAM:origin = 0x03A000,length = 0x000800
CPU2TOCPU1RAM:origin = 0x03B000,length = 0x000800
CPUTOCMRAM:origin = 0x039000,length = 0x000800
CMTOCPURAM:origin = 0x038000,length = 0x000800
CANA_MSG_RAM:origin = 0x049000、length = 0x000800
CANB_MSG_RAM:origin = 0x04B000、length = 0x000800
/*闪存扇区*/
FLASH0:origin = 0x080002,length = 0x001FFE /*片上闪存*/
FLASH1:origin = 0x082000,length = 0x002000 //片上闪存*/
FLASH2:origin = 0x084000、length = 0x002000 //片上闪存*/
FLASH3:origin = 0x086000、length = 0x002000 //片上闪存*/
FLASH4:origin = 0x088000、length = 0x008000 //片上闪存*/
FLASH5:origin = 0x090000,length = 0x008000 //片上闪存*/
Flash6:origin = 0x098000、length = 0x008000 //片上闪存*
FLASH7:origin = 0x0A0000,length = 0x008000 //片上闪存*/
FLASH8:origin = 0x0A8000、length = 0x008000 //片上闪存*/
FLASH9:origin = 0x0B0000,length = 0x008000 //片上闪存*/
FLASH10:origin = 0x0B8000、length = 0x002000 //片上闪存*/
FLASH11:origin = 0x0BA000、length = 0x002000 //片上闪存*/
FLASH12:origin = 0x0BC000、length = 0x002000 //片上闪存*/
FLASH13:origin = 0x0BE000、length = 0x001FF0 /*片上闪存*/
// FLASH13_RSVD:origin = 0x0BFFF0,length = 0x000010 //根据勘误咨询“Memory:Prepetching Beyond valid Memory”(内存:有效内存之外的预取)来保留代码,不要将其用于代码*/
复位:origin = 0x3FFFC0,length = 0x000002
}
部分
{
codestart:>开始,align (4)
.text:>> FLASH1 | FLASH2 | FLASH3 | FLASH4、ALIGN (4)
.cinit:> FLASH4,align (4)
.switch:> FLASH1,ALIGN(4)
.reset:> reset,type = DSECT /* not used,*/
.stack:> RAMM0M1
#if defined (_TI_EABI)
init_array:> FLASH1,align (4)
.bss:>> RAMGS0 | RAMGS1,ALIG(4)
.bss:输出:> RAMGS0
.bss:CIO :>RAMGS0
.data :>RAMGS1
.sysmem:> RAMGS1
/*初始化段进入闪存*/
.const:> FLASH5、align (4)
其他
.pinit:> FLASH1,align (4)
.ebss:> RAMGS0
.esysmem:> RAMGS1
.cio:> RAMGS1
/*初始化段进入闪存*/
.econst:>> FLASH4 | FLASH5、ALIG(4)
#endif
#if defined (_TI_EABI)
.TI.ramfunc:{}负载= FLASH3,
运行= RAMD0、
Load_start (RamfuncsLoadStart)、
load_size (RamfuncsLoadSize)、
Load_End (RamfuncsLoadEnd)、
RUN_START (RamfuncsRunStart)、
run_size (RamfuncsRunSize)、
RUN_END (RamfuncsRunEnd)、
对齐(4)
其他
.TI.ramfunc:{}负载= FLASH3,
运行= RAMD0、
load_start (_RamfuncsLoadStart)、
load_size (_RamfuncsLoadSize)、
load_end (_RamfuncsLoadEnd)、
run_start (_RamfuncsRunStart)、
run_size (_RamfuncsRunSize)、
run_end (_RamfuncsRunEnd)、
对齐(4)
#endif
MSGRAM_CPU1_TO_CPU2:>CPU1TOCPU2RAM,type=NOINIT
MSGRAM_CPU2_TO_CPU1:>CPU2TOCPU1RAM,type=NOINIT
MSGRAM_CPU_TO_CM:> CPUTOCMRAM,type=NOINIT
MSGRAM_CM_TO_CPU:> CMTOCPURAM,type=NOINIT
/* CLA 特定部分*/
Cla1ToCpuMsgRAM:> CLA1_MSGRAMLOW,type=NOINIT
CpuToCla1MsgRAM:> CLA1_MSGRAMHIGH,type=NOINIT
暂存区:>RAMLS0LS1.
.bss_cla:> RAMLS0LS1
CPU1_cla1_shared:> RAMLS0LS1
#if defined (_TI_EABI)
const_cla:load = FLASH2,
运行= RAMLS2LS3LS4LS5、
RUN_START (Cla1ConstRunStart)、
Load_start (Cla1ConstLoadStart)、
load_size (Cla1ConstLoadSize)
其他
const_cla:load = FLASH2,
运行= RAMLS2LS3LS4LS5、
run_start (_Cla1ConstRunStart)、
Load_start (_Cla1ConstLoadStart)、
load_size (_Cla1ConstLoadSize)
#endif
#if defined (_TI_EABI)
Cla1Prog:load = FLASH7,
运行= RAMLS2LS3LS4LS5、
Load_start (Cla1funcsLoadStart)、
LOAD_END (Cla1funcsLoadEnd)、
run_start (Cla1funcsRunStart)、
load_size (Cla1funcsLoadSize)、
对齐(4)
其他
Cla1Prog:load = FLASH7,
运行= RAMLS2LS3LS4LS5、
load_start (_Cla1funcsLoadStart)、
load_end (_Cla1funcsLoadEnd)、
run_start (_Cla1funcsRunStart)、
load_size (_Cla1funcsLoadSize)、
对齐(4)
#endif
}
/*
//============================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
//文件结束。
//============================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
*
CLA 初始化代码
空 claHal_init (空)
{
extern uint32_t Cla1funcsRunStart、Cla1funcsLoadStart、Cla1funcsLoadSize;
extern uint32_t Cla1ConstRunStart、Cla1ConstLoadStart、Cla1ConstLoadSize;
EALLOW;
#ifdef _flash
memcpy (((uint32_t *)&Cla1funcsRunStart、(uint32_t *)&Cla1funcsLoadStart、
(uint32_t)和 Cla1funcsLoadSize);
memcpy (((uint32_t *)&Cla1ConstRunStart、(uint32_t *)&Cla1ConstLoadStart、
(uint32_t)和 Cla1ConstLoadSize);
#endif //_FLASH
MemCfgRegs.MSGxINIT.bit.init_CLA1TOCPU = 1;
while (MemCfgRegs.MSGxINITDONE.bit.INITDONE_CLA1TOCPU!= 1){};
MemCfgRegs.MSGxINIT.bit.init_CPUTOCLA1 = 1;
while (MemCfgRegs.MSGxINITDONE.bit.INITDONE_CPUTOCLA1!= 1){};
MemCfgRegs.LSxCLAPGM.bit.CLAPGM_LS0 = 0U;
MemCfgRegs.LSxCLAPGM.bit.CLAPGM_LS1 = 0U;
MemCfgRegs.LSxCLAPGM.bit.CLAPGM_LS2 = 1U;
MemCfgRegs.LSxCLAPGM.bit.CLAPGM_LS3 = 1U;
MemCfgRegs.LSxCLAPGM.bit.CLAPGM_LS4 = 1U;
MemCfgRegs.LSxCLAPGM.bit.CLAPGM_LS5 = 1U;
MemCfgRegs.LSxMSEL.bit.MSEL_LS0 = 1U;
MemCfgRegs.LSxMSEL.bit.MSEL_LS1 = 1U;
MemCfgRegs.LSxMSEL.bit.MSEL_LS2 = 1U;
MemCfgRegs.LSxMSEL.bit.MSEL_LS3 = 1U;
MemCfgRegs.LSxMSEL.bit.MSEL_LS4 = 1U;
MemCfgRegs.LSxMSEL.bit.MSEL_LS5 = 1U;
#pragma diag_suppress 770
Cla1Regs.MVECT1 =(uint16_t)(&Cla1Task1);
Cla1Regs.MVECT2 =(uint16_t)(&Cla1Task2);
Cla1Regs.MVECT3 =(uint16_t)(&Cla1Task3);
Cla1Regs.MVECT4 =(uint16_t)(&Cla1Task4);
Cla1Regs.MVECT5 =(uint16_t)(&Cla1Task5);
Cla1Regs.MVECT6 =(uint16_t)(&Cla1Task6);
Cla1Regs.MVECT7 =(uint16_t)(&Cla1Task7);
Cla1Regs.MVECT8 =(uint16_t)(&Cla1Task8);
#pragma diag_default 770
DmaClaSrcSelRegs.CLA1TASKSRCSEL1.bit.task1 = CLA_TRIGGER_ADCD1;
Cla1Regs.MIER 位 INT1 = 1U;
Cla1Regs.MCTL.bit.IACKE = 1;
Cla1Regs.MIER all = 0x00FF;
PieVectTable.CLA1_1_INT =&claHal_donesr1;
PieVectTable.CLA1_2_INT =&claHal_donesr2;
PieVectTable.CLA1_3_INT =&claHal_donesr3;
PieVectTable.CLA1_4_INT =&claHal_donesr4;
PieVectTable.CLA1_5_INT =&claHal_donesr5;
PieVectTable.CLA1_6_INT =&claHal_donesr6;
PieVectTable.CLA1_7_INT =&claHal_donesr7;
PieVectTable.CLA1_8_INT =&claHal_donesr8;
PieCtrlRegs.PIEIER11.all = 0xFFFF;
IER |=(M_INT11);
GPIO_setMasterCore (28、GPIO_CORE_CPU1_CLA1);
EDIS;
}