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.

[参考译文] CCS/TMS320F2.8377万S:当CLA完成任务1时,如何使CLA进入claISr?

Guru**** 2487425 points
Other Parts Discussed in Thread: CONTROLSUITE

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/615614/ccs-tms320f28377s-when-the-cla-complete-task1-how-to-make-the-cla-run-into-the-claisr

部件号:TMS320F2.8377万S
主题:controlSUITE中讨论的其他部件

工具/软件:Code Composer Studio

我使用controlSUITE示例“CLA_SQrt_cpu01”。 调试CLA时,它可以运行到Task1并运行"fResult =__sqrt(fVal);"。 但当我调试整个Task1时,它将停止在Task1代码的底部。 并且“控制台”显示“CPU1 _CLA1:CAN"单步目标程序:(错误-2060 @ 0x0)请求的操作无法在设备运行时完成。 启用设备,然后重试操作。(仿真软件包5.1 .641.0)”。  

 我想知道如何使CLA运行到ISR中?  非常感谢!

#include "F28x_Project.h"
#include "CLA_SQrt_shared.h"

#define WAITSTEP ASM (" RPT #255 || NOP")

#ifdef __cplusplus
#pragma data_section("CpuToCla1MsgRAM");
浮点fVal;//输入
#pragma data_section("Cla1ToCpuMsgRAM");
浮点fResult;//估计结果
#否则
#pragma data_section(fVal,"CpuToCla1MsgRAM");
浮点fVal;//输入
#pragma data_section(fResult,"Cla1ToCpuMsgRAM";
浮点fResult;//估计结果
#endif //__cplusplus

void CLA_RunTest(void);
void CLA_configClaMemory (void);
void CLA_initCpu1Cla1 (void);
__interrupt void cla1Isr1();
__interrupt void cla1Isr2();
__interrupt void cla1Isr3();
__interrupt void cla1Isr4();
__interrupt void cla1Isr5();
__interrupt void cla1Isr6();
__interrupt void cla1Isr7();
__interrupt void cla1Isr8();

Void主(void)

InitSysCtrl();

色调;

InitPieCtrl();

IER = 0x0000;
IFR = 0x0000;

InitPieVectorTable();

CLA_configClaMemory();
CLA_initCpu1Cla1();

EINT;//启用全局中断INTM
ERTM;//启用全局实时中断DBGM

CLA_RunTest();
}

void CLA_RunTest (void)

fVal =9;
Cla1ForceTask1();
}

void CLA_configClaMemory (void)

extern UINT32_t Cla1funcsRunStart,Cla1funcsLoadStart,Cla1funcsLoadSize;
EALLOW;

#ifdef _flash
//
//将代码从闪存复制到RAM
//
memcpy(UINT32_t *)&Cla1funcsRunStart,(UINT32_t *)&Cla1funcsLoadStart,
(UINT32_t)&Cla1funcsLoadSize);
#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.LSxMSEL.bit.MSEL_LS5 = 1;
MemCfgRegs.LSxCLAPGM.bit.CLAPGM_LS5 = 1;

MemCfgRegs.LSxMSEL.bit.MSEL_LS0 = 1;
MemCfgRegs.LSxCLAPGM.bit.CLAPGM_LS0 = 0;
MemCfgRegs.LSxMSEL.bit.MSEL_LS1 = 1;
MemCfgRegs.LSxCLAPGM.bit.CLAPGM_LS1 = 0;

EDIS;
}

void CLA_initCpu1Cla1 (void)

EALLOW;
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);

Cla1Regs.MCTL.Bit.IACKE = 1;
Cla1Regs.MIER.ALL = 0x00FF;

PieVectorTable.CLA1_INT =&cla1Isr1;
PieVectorTable.CLA1_2_INT =&cla1Isr2;
PieVectorTable.CLA1_3_INT =&cla1Isr3;
PieVectorTable.CLA1_4_INT =&cla1Isr4;
PieVectorTable.CLA1_5_INT =&cla1Isr5;
PieVectorTable.CLA1_6_INT =&cla1Isr6;
PieVectorTable.CLA1_7_INT =&cla1Isr7;
PieVectorTable.CLA1_8_INT =&cla1Isr8;

PieCtrlRegs.PIEIER11.ALL = 0xFFFF;
IER ||(M_INT11);
}

__interrupt void cla1Isr1 ()

浮点R=0;
r=fResult;
PieCtrlRegs.PIEACG.ALL = M_INT11;

}

__interrupt void cla1Isr2 ()

ASM (" ESTOP0");
}

__interrupt void cla1Isr3 ()

ASM (" ESTOP0");
}

__interrupt void cla1Isr4 ()

ASM (" ESTOP0");
}

__interrupt void cla1Isr5 ()

ASM (" ESTOP0");
}

__interrupt void cla1Isr6 ()

ASM (" ESTOP0");
}

__interrupt void cla1Isr7 ()

ASM (" ESTOP0");
}

__interrupt void cla1Isr8 ()

PieCtrlRegs.PIEACG.ALL = M_INT11;

ASM (" ESTOP0");
}

#include "CLA_SQrt_shared.h"

__interrupt void Cla1Task1 (void)

fResult =__sqrt(fVal);
}

__interrupt void Cla1Task2 ( void )

}

__interrupt void Cla1Task3 (void)

}

__interrupt void Cla1Task4 ( void )

}

__interrupt void Cla1Task5 (void)

}

__interrupt void Cla1Task6 (void)

}

__interrupt void Cla1Task7 (void)

}

__interrupt void Cla1Task8 (void)

}

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,
    我写这封信是为了告诉您,一位C2000小组成员已被指派担任此职位,应该很快就会回答。

    此致
    Baskaran
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    请勿发布大量代码。

    CLA是否正在执行任务? 我对这个问题感到困惑。

    您是在谈论CLA任务还是C28x ISR?

    SAL
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    如果在CLA中进行调试,单步执行,则CLA代码中有__mdebugstop()语句,并且已将调试器连接到CLA内核。 如果未将调试器连接到CLA,则可以在.ca源文件中注释掉__mdebugstop语句,而是在C28x上执行的CLA任务完成ISR的开头设置断点。 如果启用了CLA任务完成中断,您将在CLA任务完成时到达此断点。

    我也不得不把这一点总结起来。 在前台调试C28x代码时,CLA可以独立执行任务(在后台)。 执行CLA任务以完成ISR就是这一事实的证明。 我希望这能有所帮助。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Tom,

    感谢您的澄清和解释。

    SAL
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    很抱歉,我的密码太长。
    我确信CLA任务已经执行。 我使用“LAUNCHTXL-F2.8377万S”。 我要说的是C28x ISR,它不起作用。
    长代码是controlSUITE示例"CLA_SQrt_cpu01"。 我对代码没有任何更改。 但任务完成后,它无法进入ISR。
    感谢您的回复。 我需要你的帮助。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我使用controlSUITE示例“CLA_SQrt_cpu01”。 我对代码没有任何更改。 在调试过程中,我在任务开始时使用了__mdebugstop(),我可以逐步调试和查看CLA任务工作。 但当任务完成时,它将停止在Task1代码的底部。 并且“控制台”显示“CPU1 _CLA1:CAN"单步目标程序:(错误-2060 @ 0x0)请求的操作无法在设备运行时完成。 启用设备,然后重试此操作。(仿真软件包5.1 .641.0)"
    感谢您的解释。 非常感谢。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    谢谢!!! 我解决问题。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    谢谢!!! 我解决问题
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    很好。

    SAL