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.

[参考译文] TMS320F28379D:F28379D CLA 任务 1 未执行 — 代码加载和中断模式问题

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

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1577098/tms320f28379d-f28379d-cla-task-1-not-executing---code-loading-and-interrupt-mode-issues

部件号:TMS320F28379D
主题:C2000WARE 中讨论的其他器件

我尝试在 F28379D 上运行基本的 CLA 任务 1(软件触发)以切换 LED (GPIO 31)。 CPU 控制的 LED (GPIO 34) 正确切换、确认主循环正在运行、但 CLA 控制的 LED 不会、表明 CLA 任务未成功执行。

我正在使用 CCS 和 C2000Ware(版本 5.02.00 或者类似版本)。

我当前的代码设置包含用于 CLA 执行的所有标准修复:

  1. CLA 程序加载:我已经验证了链接器文件 (.cmd) 放置Cla1ProgFLASHD(加载)和LS0RAM(运行)memcpymain()、并用在中将代码从闪存复制到 LS0RAM。

  2. 内存配置:LS0RAM 配置用于 CLA 程序、LS1RAM 配置用于 CLA 数据。

  3. CLA 任务:任务 1 是软件触发的、并尝试cla_led_flag = 1在完成时设置共享标志 ()。

  4. 中断处理:PIE 组 11 (INT_CLA1_1) 启用并注册到CLA_HaltTask1 ISR 中。

附加了我的代码和屏幕截图 、因此请提供正确的解决方案、

 、#include “driverlib.h"</s>“  
#include “device.h"</s>“  

//从 CLA 切换 LED 的全局标志
#pragma DATA_SECTION (Cla1Result、“CLADataLS1")“)
浮动 Cla1Result;

pragma DATA_SECTION (CLA_led_flag、“CLADataLS1")“)
易失性 uint32_t cla_led_flag = 0;

__ interrupt void Cla1Task1 (void);
__ interrupt void CLA_HaltTask1 (void);
//将任务放置在 CLA 程序存储器中
pragma CODE_SECTION (Cla1Task1、“Cla1Prog")“)


__interrupt void Cla1Task1 (void)

  //设置 LED 标志
    cla_led_flag = 1;
    Cla1Result = 1.234f; //只是为了确认 CLA 写入数据
    //清除 CLA 中断标志
  CLA_clearTaskFlags (CLA1_BASE、CLA_TASKFLAG_1);
}
__ interrupt void CLA_HaltTask1 (void)

  INTERRUPT_CLEARACKGROUP (INTERRUPT_ACK_group11);
}


void initCLA (void)
 {
  EALLOW;

  //启用 CLA1 时钟
  SysCtl_enablePeripheral (SYSCTL_PERIPH_CLK_CLA1);

  //可选择复位 CLA(如果需要)
  // SysCtl_resetPeripheral (SYSCTL_PERIPH_RES_CPU1CLA1);

  //可选择清除中断标志
 // Interrupt_clearACKGroup (INTERRUPT_ACK_group11);

 

  MemCfg_setLSRAMControllerSel (MEMCFG_sect_LS0、MEMCFG_LSRAMCONTROLLER_CPU_CLA1);
    MemCfg_setCLAMemType (MEMCG_sect_LS0、MEMCG_CLA_MEM_PROGRAM);


    MemCfg_setLSRAMControllerSel (MEMCFG_sect_LS1、MEMCFG_LSRAMCONTROLLER_CPU_CLA1);
      MemCfg_setCLAMemType (MEMCFG_sect_LS1、MEMCFG_CLA_MEM_DATA);


      cla_mapTaskVector (CLA1_BASE、CLA_MVECT_1、(uint16_t)&Cla1Task1);


      CLA_setTriggerSource (CLA_TASK_1、CLA_TRIGGER_SOFTWARE);


    CLA_enableTasks (CLA1_BASE、CLA_TASKFLAG_1);


    CLA_setTaskInterruptMode (CLA1_BASE、CLA_TASKFLAG_1、CLA_INTERRUPT_ENABLED);
    INTERRUPT_CLEARACKGROUP (INTERRUPT_ACK_group11);
EDIS;
}  void main{  Interrupt_register (INT_CLA1_1、&CLA_HaltTask1);// CLA 任务 1 中断处理程序
    initcla();
    INTERRUPT_ENABLE (INT_CLA1_1);// CLA 任务 1                                              while (1){if (cla_led_flag)
       { CLA_forceTasks (CLA1_BASE、CLA_TASKFLAG_1);
     GPIO_togglePin (DEVICE_GPIO_PIN_LED1);
         cla_led_flag = 0;}
       }}   image.pngimage.pngimage.png

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

    尊敬的先生,我的代码更正了循环, 而 (1){  cla_fforceTasks(CLA1_base, cla_TASKFLAG_1 );  

         if (cla_led_flag)
           {  
            GPIO_togglePin (DEVICE_GPIO_PIN_LED1);
             cla_led_flag = 0;

          }

    }