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/TMS320F28377S:对 CLA 有疑问

Guru**** 2589280 points
Other Parts Discussed in Thread: C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/664811/ccs-tms320f28377s-doubt-regarding-cla

器件型号:TMS320F28377S
主题中讨论的其他器件:C2000WARE

工具/软件:Code Composer Studio

我正在尝试使用 C2000ware 中的 pi_cla 示例来实现 F28377的一切正常、但代码会卡住  

Cla1ForceTask3andWait();

我应该如何解决这个问题

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

    如果没有更多信息、就无法说。 我建议仔细查看原始 F28069代码、以确保您的操作方式相同。 例如、在函数调用之前是否处理 EALLOW 保护? 另外,请检查您是否按照《用户指南》第5.4.3节中的步骤操作。

    此致、

    Richard
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我浏览了代码和部分、但仍然无法获取

    这是我正在使用的代码

    /* example_f28069_pi.c
    *
    *版权所有(C) 2017 Texas Instruments Incorporated - http://www.ti.com/
    *保留所有权利
    *
    *

    //头文件

    #include "DCL.h"
    #include "cla_adc_fir32_shared.h"
    #include "F28x_Project.h"
    #include "stdio.h"
    //函数原型
    中断 void CONTRAL_ISR (void);

    //全局变量
    长 IdleLoopCount = 0;
    长 IsrCount = 0;
    浮点占空比= 0;

    //共享变量
    #pragma DATA_SECTION (rk、"CpuToCla1MsgRAM")
    #pragma DATA_SECTION (YK、"CpuToCla1MsgRAM")
    #pragma DATA_SECTION (UK、"Cla1ToCpuMsgRAM")
    #pragma DATA_SECTION (pi1、"Cla1DataRam1")
    float rk = 0.25f;
    float YK=0.05f;
    float UK = 0.00f;


    DCL_PI pi1 = PI_DEFAULTS;
    const 结构 PIE_VECT_TABLE PieVectTableInit ={
    PIE_RESERVE_ISR、//保留
    PIE_RESERVE_ISR、//保留
    PIE_RESERVE_ISR、//保留
    PIE_RESERVE_ISR、//保留
    PIE_RESERVE_ISR、//保留
    PIE_RESERVE_ISR、//保留
    PIE_RESERVE_ISR、//保留
    PIE_RESERVE_ISR、//保留
    PIE_RESERVE_ISR、//保留
    PIE_RESERVE_ISR、//保留
    PIE_RESERVE_ISR、//保留
    PIE_RESERVE_ISR、//保留
    PIE_RESERVE_ISR、//保留
    Timer1_ISR、// CPU 定时器1中断
    TIMER2_ISR、// CPU 定时器2中断
    DATALOG_ISR、//数据记录中断
    RTOS_ISR、// RTOS 中断
    EMU_ISR、//仿真中断
    NMI_ISR、//不可屏蔽中断
    ILLEGAL_ISR、//非法操作陷阱
    User1_ISR、//用户定义的陷阱1
    User2_ISR、//用户定义的陷阱2.
    User3_ISR、//用户定义的陷阱3.
    User4_ISR、//用户定义的陷阱4.
    USER5_ISR、//用户定义的陷阱5
    USER6_ISR、//用户定义的陷阱6.
    USER7_ISR、//用户定义的陷阱7
    USER8_ISR、//用户定义的陷阱8
    USER9_ISR、//用户定义的陷阱9.
    USER10_ISR、//用户定义的陷阱10
    USER11_ISR、//用户定义的陷阱11
    USER12_ISR、//用户定义的陷阱12.
    ADCA1_ISR、// 1.1 - ADCA 中断1
    ADCB1_ISR、// 1.2 - ADCB 中断1
    ADCC1_ISR、// 1.3 - ADCC 中断1
    XINT1_ISR、// 1.4 - XINT1中断
    XINT2_ISR、// 1.5 - XINT2中断
    ADCD1_ISR、// 1.6 - ADCD 中断1
    TIMER0_ISR、// 1.7 -定时器0中断
    WAKE_ISR、// 1.8 -待机和停止唤醒中断
    EPWM1_TZ_ISR、// 2.1 - ePWM1触发区中断
    EPWM2_TZ_ISR、// 2.2 - ePWM2触发区中断
    EPWM3_TZ_ISR、// 2.3 - ePWM3触发区中断
    EPWM4_TZ_ISR、// 2.4 - ePWM4触发区中断
    EPWM5_TZ_ISR、// 2.5 - ePWM5触发区中断
    EPWM6_TZ_ISR、// 2.6 - ePWM6触发区中断
    EPWM7_TZ_ISR、// 2.7 - ePWM7触发区中断
    EPWM8_TZ_ISR、// 2.8 - ePWM8触发区中断
    EPWM1_ISR、// 3.1 - ePWM1中断
    EPWM2_ISR、// 3.2 - ePWM2中断
    EPWM3_ISR、// 3.3 - ePWM3中断
    EPWM4_ISR、// 3.4 - ePWM4中断
    EPWM5_ISR、// 3.5 - ePWM5中断
    EPWM6_ISR、// 3.6 - ePWM6中断
    EPWM7_ISR、// 3.7 - ePWM7中断
    EPWM8_ISR、// 3.8 - ePWM8中断
    eCAP1_ISR、// 4.1 - eCAP1中断
    ECAP2_ISR、// 4.2 - eCAP2中断
    ECAP3_ISR、// 4.3 - eCAP3中断
    ECAP4_ISR、// 4.4 - eCAP4中断
    ECAP5_ISR、// 4.5 - eCAP5中断
    ECAP6_ISR、// 4.6 - eCAP6中断
    PIE_RESERVE_ISR、// 4.7 -保留
    PIE_RESERVE_ISR、// 4.8 -保留
    EQEP1_ISR、// 5.1 - eQEP1中断
    EQEP2_ISR、// 5.2 - eQEP2中断
    EQEP3_ISR、// 5.3 - eQEP3中断
    PIE_RESERVE_ISR、// 5.4 -保留
    PIE_RESERVE_ISR、// 5.5 -保留
    PIE_RESERVE_ISR、// 5.6 -保留
    PIE_RESERVE_ISR、// 5.7 -保留
    PIE_RESERVE_ISR、// 5.8 -保留
    SPIA_RX_ISR、// 6.1 - SPIA 接收中断
    SPIA_TX_ISR、// 6.2 - SPIA 发送中断
    SPIB_RX_ISR、// 6.3 - SPIB 接收中断
    SPIB_TX_ISR、// 6.4 - SPIB 发送中断
    MCBSPA_RX_ISR、// 6.5 - McBSPA 接收中断
    MCBSPA_TX_ISR、// 6.6 - McBSPA 发送中断
    MCBSPB_RX_ISR、// 6.7 - McBSPB 接收中断
    MCBSPB_TX_ISR、// 6.8 - McBSPB 发送中断
    DMA_CH1_ISR、// 7.1 - DMA 通道1中断
    DMA_CH2_ISR、// 7.2 - DMA 通道2中断
    DMA_CH3_ISR、// 7.3 - DMA 通道3中断
    DMA_CH4_ISR、// 7.4 - DMA 通道4中断
    DMA_CH5_ISR、// 7.5 - DMA 通道5中断
    DMA_CH6_ISR、// 7.6 - DMA 通道6中断
    PIE_RESERVE_ISR、// 7.7 -保留
    PIE_RESERVE_ISR、// 7.8 -保留
    I2CA_ISR、// 8.1 - I2CA 中断1
    I2CA_FIFO_ISR、// 8.2 - I2CA 中断2
    I2CB_ISR、// 8.3 - I2CB 中断1
    I2CB_FIFO_ISR、// 8.4 - I2CB 中断2.
    SCIC_RX_ISR、// 8.5 - SCIC 接收中断
    SCIC_TX_ISR、// 8.6 - SCIC 发送中断
    SCID_RX_ISR、// 8.7 - SCID 接收中断
    SCID_TX_ISR、// 8.8 - SCID 发送中断
    SCIA_RX_ISR、// 9.1 - SCIA 接收中断
    SCIA_TX_ISR、// 9.2 - SCIA 发送中断
    SCIB_RX_ISR、// 9.3 - SCIB 接收中断
    SCIB_TX_ISR、// 9.4 - SCIB 发送中断
    CANA0_ISR、// 9.5 - CANA 中断0
    CANA1_ISR、// 9.6 - CANA 中断1
    CANB0_ISR、// 9.7 - CANB 中断0
    CANB1_ISR、// 9.8 - CANB 中断1
    ADCA_EVT_ISR、// 10.1 - ADCA 事件中断
    ADCA2_ISR、// 10.2 - ADCA 中断2
    ADCA3_ISR、// 10.3 - ADCA 中断3
    ADCA4_ISR、// 10.4 - ADCA 中断4
    ADCB_EVT_ISR、// 10.5 - ADCB 事件中断
    ADCB2_ISR、// 10.6 - ADCB 中断2
    ADCB3_ISR、// 10.7 - ADCB 中断3
    ADCB4_ISR、// 10.8 - ADCB 中断4
    CLA1_ISR、// 11.1 - CLA1中断1
    CLA1_2_ISR、// 11.2 - CLA1中断2
    CLA1_3_ISR、// 11.3 - CLA1中断3
    CLA1_4_ISR、// 11.4 - CLA1中断4
    CLA1_5_ISR、// 11.5 - CLA1中断5
    CLA1_6_ISR、// 11.6 - CLA1中断6
    CLA1_7_ISR、// 11.7 - CLA1中断7
    CLA1_8_ISR、// 11.8 - CLA1中断8
    XINT3_ISR、// 12.1 - XINT3中断
    XINT4_ISR、// 12.2 - XINT4中断
    XINT5_ISR、// 12.3 - XINT5中断
    PIE_RESERVE_ISR、// 12.4 -保留
    PIE_RESERVE_ISR、// 12.5 -保留
    VCU_ISR、// 12.6 - VCU 中断
    FPU_Overflow_ISR、// 12.7 - FPU 溢出中断
    FPU_Underflow_ISR、// 12.8 - FPU 下溢中断
    PIE_RESERVE_ISR、// 1.9 -保留
    PIE_RESERVE_ISR、// 1.10 -保留
    PIE_RESERVE_ISR、// 1.11 -保留
    PIE_RESERVE_ISR、// 1.12 -保留
    IPC0_ISR、// 1.13 - IPC 中断0
    IPC1_ISR、// 1.14 - IPC 中断1
    IPC2_ISR、// 1.15 - IPC 中断2
    IPC3_ISR、// 1.16 - IPC 中断3
    EPWM9_TZ_ISR、// 2.9 - ePWM9触发区中断
    EPWM10_TZ_ISR、// 2.10 - ePWM10触发区中断
    EPWM11_TZ_ISR、// 2.11 - ePWM11触发区中断
    EPWM12_TZ_ISR、// 2.12 - ePWM12触发区中断
    PIE_RESERVE_ISR、// 2.13 -保留
    PIE_RESERVE_ISR、// 2.14 -保留
    PI_RESERVE_ISR、// 2.15 -保留
    PI_RESERVE_ISR、// 2.16 -保留
    EPWM9_ISR、// 3.9 - ePWM9中断
    EPWM10_ISR、// 3.10 - ePWM10中断
    EPWM11_ISR、// 3.11 - ePWM11中断
    EPWM12_ISR、// 3.12 - ePWM12中断
    PIE_RESERVE_ISR、// 3.13 -保留
    PI_RESERVE_ISR、// 3.14 -保留
    PIE_RESERVE_ISR、// 3.15 -保留
    PIE_RESERVE_ISR、// 3.16 -保留
    PIE_RESERVE_ISR、// 4.9 -保留
    PIE_RESERVE_ISR、// 4.10 -保留
    PIE_RESERVE_ISR、// 4.11 -保留
    PIE_RESERVE_ISR、// 4.12 -保留
    PIE_RESERVE_ISR、// 4.13 -保留
    PIE_RESERVE_ISR、// 4.14 -保留
    PIE_RESERVE_ISR、// 4.15 -保留
    PIE_RESERVE_ISR、// 4.16 -保留
    SD1_ISR、// 5.9 - SD1中断
    SD2_ISR、// 5.10 - SD2中断
    PIE_RESERVE_ISR、// 5.11 -保留
    PIE_RESERVE_ISR、// 5.12 -保留
    PIE_RESERVE_ISR、// 5.13 -保留
    PIE_RESERVE_ISR、// 5.14 -保留
    PIE_RESERVE_ISR、// 5.15 -保留
    PIE_RESERVE_ISR、// 5.16 -保留
    spic_RX_ISR、// 6.9 -***接收中断
    spic_TX_ISR、// 6.10 -***发送中断
    PIE_RESERVE_ISR、// 6.11 -保留
    PIE_RESERVE_ISR、// 6.12 -保留
    PIE_RESERVE_ISR、// 6.13 -保留
    PIE_RESERVE_ISR、// 6.14 -保留
    PIE_RESERVE_ISR、// 6.15 -保留
    PIE_RESERVE_ISR、// 6.16 -保留
    PIE_RESERVE_ISR、// 7.9 -保留
    PIE_RESERVE_ISR、// 7.10 -保留
    PIE_RESERVE_ISR、// 7.11 -保留
    PIE_RESERVE_ISR、// 7.12 -保留
    PIE_RESERVE_ISR、// 7.13 -保留
    PIE_RESERVE_ISR、// 7.14 -保留
    PIE_RESERVE_ISR、// 7.15 -保留
    PIE_RESERVE_ISR、// 7.16 -保留
    PIE_RESERVE_ISR、// 8.9 -保留
    PIE_RESERVE_ISR、// 8.10 -保留
    PI_RESERVE_ISR、// 8.11 -保留
    PIE_RESERVE_ISR、// 8.12 -保留
    PIE_RESERVE_ISR、// 8.13 -保留
    PIE_RESERVE_ISR、// 8.14 -保留
    CPU1
    UPPA_ISR、// 8.15 - UPPA 中断
    PIE_RESERVE_ISR、// 8.16 -保留
    #Elif Defined (CPU2)
    PIE_RESERVE_ISR、// 8.15 -保留
    PIE_RESERVE_ISR、// 8.16 -保留
    #endif
    PIE_RESERVE_ISR、// 9.9 -保留
    PIE_RESERVE_ISR、// 9.10 -保留
    PIE_RESERVE_ISR、// 9.11 -保留
    PIE_RESERVE_ISR、// 9.12 -保留
    PIE_RESERVE_ISR、// 9.13 -保留
    PIE_RESERVE_ISR、// 9.14 -保留
    CPU1
    USBA_ISR、// 9.15 - USBA 中断
    #Elif Defined (CPU2)
    PIE_RESERVE_ISR、// 9.15 -保留
    #endif
    PIE_RESERVE_ISR、// 9.16 -保留
    ADCC_EVT_ISR、// 10.9 - ADCC 事件中断
    ADCC2_ISR、// 10.10 - ADCC 中断2
    ADCC3_ISR、// 10.11 - ADCC 中断3
    ADCC4_ISR、// 10.12 - ADCC 中断4
    ADCD_EVT_ISR、// 10.13 - ADCD 事件中断
    ADCD2_ISR、// 10.14 - ADCD 中断2
    ADCD3_ISR、// 10.15 - ADCD 中断3
    ADCD4_ISR、// 10.16 - ADCD 中断4
    PI_RESERVE_ISR、// 11.9 -保留
    PIE_RESERVE_ISR、// 11.10 -保留
    PIE_RESERVE_ISR、// 11.11 -保留
    PIE_RESERVE_ISR、// 11.12 -保留
    PIE_RESERVE_ISR、// 11.13 -保留
    PIE_RESERVE_ISR、// 11.14 -保留
    PIE_RESERVE_ISR、// 11.15 -保留
    PIE_RESERVE_ISR、// 11.16 -保留
    EMIF_ERROR_ISR、// 12.9 - EMIF 错误中断
    RAM_corrected_error_ISR、// 12.10 - RAM 可纠正的错误中断
    FLASH_corrected_error_ISR、// 12.11 -闪存可纠正的错误中断
    RAM_ACCESS_violation_ISR、// 12.12 - RAM 访问冲突中断
    SYS_PLL_SLIT_ISR、// 12.13 -系统 PLL 跳周中断
    AUX_PLL_SLIT_ISR、// 12.14 -辅助 PLL 跳周中断
    CLA_overflow_ISR、// 12.15 - CLA 溢出中断
    CLA_underflow_ISR // 12.16 - CLA 下溢中断
    };


    //
    // InitPieVectTable -此函数将 PIE 矢量表初始化为
    //已知状态,必须在引导后执行。
    //
    空 InitPieVectTable (空)

    uint16 i;
    uint32 *源=(void *)&PieVectTableInit;
    uint32 * dest =(void *) PieVectTable (PieVectTable);

    //
    //请勿在前3个32位位置上进行写操作(这些位置是
    //由具有引导变量的引导 ROM 初始化)
    //
    Source = Source + 3;
    DEST = Dest + 3;

    EALLOW;
    对于(I = 0;I < 221;I++)

    *目的地++=*来源++;

    EDIS;

    //
    //启用 PIE 矢量表
    //
    PieCtrlRegs.PIECTRL.bit.ENPIE = 1;

    void ePWM_initEpwm (void)

    EALLOW;
    CpuSysRegs.PCLKCR0.bit.TBCLKSYNC=0;//关闭 ePWM 时钟
    EPwm1Regs.ETSEL.bit.SOCAEN = 0;//禁用组上的 SOC
    EPwm1Regs.ETSEL.bit.SOCASEL = 4;//在递增计数时选择 SOC
    EPwm1Regs.ETPS.bit.SOCAPRD = 1;//在发生第一个事件时生成脉冲
    EPwm1Regs.CMPA.bit.CMPA = 2000;//将比较 A 值设置为2000
    //计数
    EPwm1Regs.TBPRD = 4000;//将周期设置为4000个计数
    EPwm1Regs.TBCTL.bit.CTRMODE = 0;//冻结计数器
    EPwm1Regs.ETSEL.bit.SOCAEN = 1;//启用 SOCA
    EPwm1Regs.TBCTL.bit.HSPCLKDIV = 0;

    EPwm2Regs.ETSEL.bit.SOCAEN = 0;//禁用组上的 SOC
    EPwm2Regs.CMPA.bit.CMPA = 2048;//将比较值设置为10000
    //计数
    EPwm2Regs.TBPRD = 4096;//将周期设置为20000个计数
    EPwm2Regs.TBCTL.bit.CTRMODE = 0;//冻结计数器
    EPwm2Regs.TBCTL.bit.HSPCLKDIV = 0;

    EPwm1Regs.AQCTLA.bit.CAU = AQ_SET;//清零 PWM1A
    EPwm1Regs.AQCTLA.bit.PRD = AQ_CLEAR;

    EPwm2Regs.AQCTLA.bit.CAU = AQ_SET;//清零 PWM2A
    EPwm2Regs.AQCTLA.bit.PRD = AQ_CLEAR;
    GpioCtrlRegs.GPAMUX1.bit.GPIO2=1;
    EDIS;


    void adc_initAdcA (void)

    uint16_t i;

    EALLOW;

    //
    //写入配置
    //
    AdcaRegs.ADCCTL2.bit.prescale = 6;//将 ADCCLK 分频器设置为/4
    AdcSetMode (ADC_ADCA、ADC_resolution_12位、ADC_SIGNALMODE_SINGLE);

    //
    //将脉冲位置设置为晚期
    //
    AdcaRegs.ADCCTL1.bit.INTPULSEPOS=1;

    //
    //为 ADC 加电
    //
    AdcaRegs.ADCCTL1.bit.ADCPWDNZ = 1;

    //
    //延迟大于1ms 以允许 ADC 加电时间
    //
    对于(i = 0;i < 1000;i++)

    asm (" RPT#255 || NOP");


    //
    //选择要转换的通道和转换结束标志 ADCA
    //
    AdcaRegs.ADCSOC0CTL.bit.CHSEL = 0;//SOC0将转换引脚 A0
    AdcaRegs.ADCSOC0CTL.bit.ACQPS = 99;//采样窗口为100个 SYSCLK 周期
    AdcaRegs.ADCSOC0CTL.bit.TRIGSEL = 5;// ePWM1 SOCA/C 上的触发
    AdcaRegs.ADCINTSEL1N2.bit.INT1SEL = 0;// SOC0结束将设置 INT1标志
    AdcaRegs.ADCINTSEL1N2.bit.INT1E = 1;//启用 INT1标志
    AdcaRegs.ADCINTFLGCLR.bit.ADCINT1 = 1;//确保 INT1标志被清除
    EDIS;


    空 CLA_configClaMemory (空)

    //extern uint32_t Cla1funcsRunStart、Cla1funcsLoadStart、Cla1funcsLoadSize;

    EALLOW;
    #ifdef _flash
    //
    //将代码从闪存复制到 RAM
    //
    memcpy (((uint32_t *)&Cla1funcsRunStart、(uint32_t *)&Cla1funcsLoadStart、
    (uint32_t)和 Cla1funcsLoadSize);
    #endif //_FLASH

    //
    //初始化并等待 CLA1ToCPUMsgRAM
    //
    MemCfgRegs.MSGxINIT.bit.init_CLA1TOCPU = 1;
    while (MemCfgRegs.MSGxINITDONE.bit.INITDONE_CLA1TOCPU!= 1){};

    //
    //初始化并等待 CPUToCLA1MsgRAM
    //
    MemCfgRegs.MSGxINIT.bit.init_CPUTOCLA1 = 1;
    while (MemCfgRegs.MSGxINITDONE.bit.INITDONE_CPUTOCLA1!= 1){};

    //
    //选择 LS5RAM 作为 CLA 的编程空间
    //首先将 CLA 配置为 LS5的主器件,然后再配置
    //将空间设置为程序块
    //
    MemCfgRegs.LSxMSEL.bit.MSEL_LS5 = 1;
    MemCfgRegs.LSxMSEL.bit.MSEL_LS4=1;
    MemCfgRegs.LSxCLAPGM.bit.CLAPGM_LS5 = 1;
    //MemCfgRegs.LSxCLAPGM.bit.CLAPGM_LS4 = 1;

    EDIS;



    void main()
    {printf ("他");
    /*初始化系统*/
    InitSysCtrl();//[F2806x_SYSCTRL.c]
    DINT;//禁用中断
    IER = 0x0000;
    IFR = 0x0000;
    InitPieCtrl();//初始化 PIE 控制寄存器[F2806X_PIECTRL.c]
    InitPieVectTable ();//初始化 PIE 矢量表[F2806x_PieVect.c]
    EALLOW;
    PieVectTable.ADCA1_INT =&CONTRAL_ISR;

    EDIS;

    /*初始化 PI 控制器*/
    PI1.KP = 5.5f;
    PI1.Ki = 0.015f;
    PI1.I10 = 0.0f;
    PI1.i6 = 1.0f;
    PI1.Umax = 10.2f;
    PI1.Umin =-10.2f;
    CLA_configClaMemory();
    /*计算 CLA 任务矢量*/
    EALLOW;
    Cla1Regs.MVECT1 =(uint16)((uint32)&Cla1Task1);
    Cla1Regs.MVECT2 =(uint16)((uint32)&Cla1Task2);
    //Cla1Regs.MVECT3 =(uint16)((uint32)&Cla1Task3);
    Cla1Regs.MVECT4 =(uint16)((uint32)&Cla1Task4);
    Cla1Regs.MVECT5 =(uint16)((uint32)&Cla1Task5);
    Cla1Regs.MVECT6 =(uint16)((uint32)&Cla1Task6);
    Cla1Regs.MVECT7 =(uint16)((uint32)&Cla1Task7);
    Cla1Regs.MVECT8 =(uint16)((uint32)&Cla1Task8);
    Cla1Regs.MVECT3 =(uint16)(((uint32)&Cla1Task3 -(uint32)&Cla1Prog_Start);

    /* CLA 任务触发器*/
    /* Cla1Regs.MPISRCSEL1.bit.PERINT1SEL = CLA_INT1_NONE;
    Cla1Regs.MPISRCSEL1.bit.PERINT2SEL = CLA_INT2_NONE;
    Cla1Regs.MPISRCSEL1.bit.PERINT3SEL = CLA_INT3_NONE;
    Cla1Regs.MPISRCSEL1.bit.PERINT4SEL = CLA_INT4_NONE;
    Cla1Regs.MPISRCSEL1.bit.PERINTSEL = CLA_INT5_NONE;
    Cla1Regs.MPISRCSEL1.bit.PERINT6SEL = CLA_INT6_NONE;
    Cla1Regs.MPISRCSEL1.bit.PERINT7SEL = CLA_INT7_NONE;
    Cla1Regs.MPISRCSEL1.bit.PERINT8SEL = CLA_INT8_NONE;*
    Cla1Regs.MIER all = 0x00FF;

    /*将 CLA 程序空间切换到 CLA 并启用软件强制
    *也切换 CLA 数据 RAM 0、1和2
    *注意:RAMxCPUE 位只能通过写寄存器来启用
    *而不是单个位字段。 此外、这些位字段的状态
    *不会反映在监视视图或寄存器视图中-它们始终如所示
    *零。 这是一个已知的错误、建议用户测试 CPU 访问情况
    *在继续之前
    *
    // Cla1Regs.MMEMCFG.ALL = CLA_PROG_ENABLE|CLARAM0_ENABLE|CLARAM1_ENABLE|CLARAM2_ENABLE|CLARAM2_ENABLE|CLA_RAM1CPUE;
    Cla1Regs.MCTL.bit.IACKE = 1;
    EDIS;

    /*配置 ePWM1 */
    EALLOW;
    CpuSysRegs.PCLKCR0.bit.TBCLKSYNC=1;
    EDIS;

    ePWM_initEpwm();
    adc_initAdcA();

    EALLOW;
    CpuSysRegs.PCLKCR0.bit.TBCLKSYNC=1;
    EDIS;

    /*配置 ADC */
    //[F2806x_ADC.c]

    /*配置 GPIO */
    //InitGpio ();//[F2806x_GPIO.c]

    EALLOW;
    /* CLA 设置*/
    Cla1Regs.MIER 位 INT3 = 1;

    // Cla1Regs.MIER 位.INT8 = 1;
    //Cla1ForceTask8andWait();

    /*启用中断*/
    PieCtrlRegs.PIEIER1.bit.INTx1 = 1;//启用 PIE INT 1.1 (ADCINT1)-[adcisr]
    IER |= M_INT1;//启用 CPU 中断1 (TINT0)
    EINT;//启用全局中断屏蔽

    EDIS;
    printf ("%d"、rk);
    /*空闲循环*/
    while (1)

    IdleLoopCount++;





    /*控制 ISR:由 ADC EOC 触发*/
    中断空 CONTRAL_ISR (空)

    PieCtrlRegs.PIEACX.ALL = PIEACK_Group1;
    AdcaRegs.ADCINTFLGCLR.bit.ADCINT1 = 1;

    //读取 ADC 通道
    YK=((浮点) AdcaResultRegs.ADCRESULT0 - 2048.0f)/2047.0f;

    //在 CLA 上触发 PI 控制器
    EALLOW;
    Cla1ForceTask3andWait();
    //将 u (k)写入 PWM

    占空比=(UK / 2.0f + 0.5f)*(float) EPwm1Regs.TBPRD;
    EPwm2Regs.CMPA.bit.CMPA =(UINT16)占空比;
    if (英国=5.0f)
    {EALLOW;
    GpioCtrlRegs.GPAMUX1.All=0;
    GpioCtrlRegs.GPADIR.bit.GPIO13=1;
    EDIS;

    GpioDataRegs.GPACLEAR.bit.GPIO13=1;

    IsrCount++;



    /*文件结束*/

    这是我要使用的 cmd 文件

    //如果使用、用户必须在项目链接器设置中定义 CLA_C
    // CLA C 编译器
    //项目属性-> C2000链接器->高级选项->命令文件
    //预处理->--define
    #ifdef CLA_C
    //为将要使用的 CLA 暂存区定义大小
    //由 CLA 编译器生成局部符号和 temps
    //还强制引用标记的特殊符号
    //暂存区是。
    CLA_ScratchPad_size = 0x100;
    --undef_sym=__cla_scratchpad_end
    --undef_sym=__cla_scratchpad_start
    #endif //cla_C
    _Cla1Prog_Start =_Cla1funcsRunStart;
    存储器

    第0页:
    /* begin 用于"引导至 SARAM"引导加载程序模式*/

    开始:origin = 0x000000,length = 0x000002
    RAMM0:origin = 0x000122、length = 0x0002DE
    RAMD0:origin = 0x00B000、length = 0x000800
    RAMD1:origin = 0x00B800,length = 0x000800
    /*RAMLS4:origin = 0x00A000,length = 0x000800*/
    /*RAMLS5:origin = 0x00A800,length = 0x000800*/
    RAMLS4_LS5:origin = 0x00A000、length = 0x001000
    复位:origin = 0x3FFFC0,length = 0x000002

    第1页:

    BOOT_RSVD:origin = 0x000002,length = 0x000120 // M0的一部分,引导 ROM 将此用于栈*/
    RAMM1:origin = 0x000400、length = 0x000400 //片上 RAM 块 M1 *

    RAMLS0:origin = 0x008000、length = 0x000800
    RAMLS1:origin = 0x008800,length = 0x000800
    RAMLS2:origin = 0x009000,length = 0x000800
    RAMLS3:origin = 0x009800,length = 0x000800

    RAMGS0:origin = 0x00C000、length = 0x001000
    RAMGS1:origin = 0x00D000、length = 0x001000
    RAMGS2:origin = 0x00E000、length = 0x001000
    RAMGS3:origin = 0x00F000、length = 0x001000
    RAMGS4:origin = 0x010000,length = 0x001000
    RAMGS5:origin = 0x011000,length = 0x001000
    RAMGS6:origin = 0x012000,length = 0x001000
    RAMGS7:origin = 0x013000,length = 0x001000
    RAMGS8:origin = 0x014000,length = 0x001000
    RAMGS9:origin = 0x015000,length = 0x001000
    RAMGS10:origin = 0x016000,length = 0x001000
    RAMGS11:origin = 0x017000,length = 0x001000
    RAMGS12:origin = 0x018000,length = 0x001000 //*仅在 F28377S、F28375S 器件上可用。 移除其他设备上的线路。 *
    RAMGS13:origin = 0x019000,length = 0x001000 //*仅在 F28377S、F28375S 器件上可用。 移除其他设备上的线路。 *
    RAMGS14:origin = 0x01A000,length = 0x001000 //*仅在 F28377S、F28375S 器件上可用。 移除其他设备上的线路。 *
    RAMGS15:origin = 0x01B000,length = 0x001000 //*仅在 F28377S、F28375S 器件上可用。 移除其他设备上的线路。 *

    CANA_MSG_RAM:origin = 0x049000、length = 0x000800
    CANB_MSG_RAM:origin = 0x04B000、length = 0x000800

    CLA1_MSGRAMLOW:origin = 0x001480,length = 0x000080
    CLA1_MSGRAMHIGH:origin = 0x001500,length = 0x000080


    部分

    codestart:> begin,page = 0
    .text:>> RAMD0|RAMD1|RAMLS4_LS5,page = 0
    .cinit:> RAMM0,page = 0
    .pinit:> RAMM0,page = 0
    switch:>RAMM0,page = 0
    .reset:> reset,page = 0,type = DSECT //未使用,*/
    RAMS0:>RAMGS0,PAGE = 1
    ramgs1:>RAMGS1,page = 1.
    .stack:>RAMM1,PAGE = 1.
    .ebss:> RAMLS2,PAGE = 1
    econst:>RAMLS3,page = 1.
    .esysmem:>RAMLS3,page = 1.
    filter_RegsFile:> RAMGS0,PAGE = 1

    /* CLA 特定部分*/
    Cla1Prog:> RAMLS4_LS5,
    load_start (_Cla1funcsLoadStart)、
    load_end (_Cla1funcsLoadEnd)、
    load_size (_Cla1funcsLoadSize)、
    run_start (_Cla1funcsRunStart)、
    PAGE = 0
    CLADataLS0:>RAMLS0,PAGE=1
    Cla1DataRam1:> RAMLS1,page=1

    Cla1ToCpuMsgRAM:> CLA1_MSGRAMLOW,page = 1.
    CpuToCla1MsgRAM:>CLA1_MSGRAMHIGH,PAGE = 1.

    /*以下部分定义适用于 SDFM 示例*/
    filter1_RegsFile:> RAMGS1,PAGE = 1,fill=0x1111
    Filter2_RegsFile:> RAMGS2,PAGE = 1,fill=0x2222
    Filter3_RegsFile:> RAMGS3,PAGE = 1,fill=0x3333
    Filter4_RegsFile:> RAMGS4,PAGE = 1,fill=0x4444

    #ifdef __TI_Compiler_version__
    #if __TI_Compiler_version__>=15009000
    .TI.ramfunc:{}> RAMM0,PAGE = 0
    其他
    ramfuncs:>RAMM0 page = 0
    #endif
    #endif

    #ifdef CLA_C
    /* CLA C 编译器段*/
    //
    //必须被分配给 CLA 具有写入访问权限的内存
    //
    CLAscratch:
    {*。obj (CLAscratch)
    。 += CLA_ScratchPad_size;
    *。obj (CLAscratch_end)}> RAMLS1、PAGE = 1

    暂存区:>RAMLS1,页=1
    .bss_cla:> RAMLS1,page = 1.
    .const_cla:> RAMLS1,PAGE = 1.
    #endif //cla_C


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

    好的、F2837x 上的 CLA 矢量初始化不同。 我忘记了这一点。 MVECT 寄存器保存的是绝对任务地址、而不是 F28069上的偏移量。

    取消注释设置 MVECT3的原始行:
    Cla1Regs.MVECT3 =(uint16)((uint32)&Cla1Task3);

    然后注释掉您添加的行:
    // Cla1Regs.MVECT3 =(uint16)(((uint32)&Cla1Task3 -(uint32)&Cla1Prog_Start);

    然后、在 while (1)循环中放置一个断点、构建并运行代码、然后查看 MVECT3的内容。 它应该在你已经分配给 CLA 程序的 LS5 RAM 的区域内:
    MemCfgRegs.LSxCLAPGM.bit.CLAPGM_LS5 = 1;

    即0xA800 - 0xAFF。 可以麻烦你检查一下吗?

    此致、

    Richard
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是的、它在它等于0xA82A 的范围内
    但当我使用 MemCfgRegs.LSxCLAPGM.bit.CLAPGM_LS5 = 1指令时、代码会运行到该段中
    中断空 ILLEGAL_ISR (空)

    //
    //在此处插入 ISR 代码
    //

    //
    //接下来的两行仅用于调试,以在此处停止处理器
    //插入 ISR 代码后删除
    //
    ASM (" ESTOP0");
    for (;;);

    当我注释掉指令时、不会触发非法 ISR、并且仍然 MVECT3=0xA82A、但在任一种情况下、任务3都不会被执行
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Deepak、

    好的、矢量现在正在正确加载。  我认为这个问题现在已经在您的另一篇文章中介绍、网址是 :e2e.ti.com/.../664842

    请仔细查看您如何分配程序内存。  在您的另一篇文章中、我可以看到您的.text 段也使用 LS5。  您有足够的可用内存、因此我建议将.text 移动到单独的段、使 LS5仅用于 CLA 代码。  我认为这可能是您的问题。  

    由于这是在另一个帖子中处理的、因此请关闭此线程以避免重复。

    此致、

    Richard

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    非常感谢我的代码现在起作用