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 Task 1 Not Executing - Code Loading and Interrupt Mode Issues

Part Number: TMS320F28379D
Other Parts Discussed in Thread: C2000WARE

I am attempting to run a basic CLA Task 1 (software-triggered) on the F28379D to toggle an LED (GPIO 31). The CPU-controlled LED (GPIO 34) toggles correctly, confirming the main loop is running, but the CLA-controlled LED does not, indicating the CLA task is not executing successfully.

I am using CCS and C2000Ware (version 5.02.00 or similar).

My current code setup includes all standard fixes for CLA execution:

  1. CLA Program Loading: I have verified the linker file (.cmd) places Cla1Prog in FLASHD (LOAD) and LS0RAM (RUN), and I use memcpy in main() to copy the code from Flash to LS0RAM.

  2. Memory Configuration: LS0RAM is configured for CLA Program and LS1RAM for CLA Data.

  3. CLA Task: Task 1 is software-triggered and attempts to set a shared flag (cla_led_flag = 1) on completion.

  4. Interrupt Handling: PIE Group 11 (INT_CLA1_1) is enabled and registered to the CLA_HaltTask1 ISR.

attached my code and screenshot  so please provide correct solution,

 , #include "driverlib.h" 
#include "device.h" 

// Global flag for LED toggle from CLA
#pragma DATA_SECTION(Cla1Result, "CLADataLS1")
float Cla1Result;

#pragma DATA_SECTION(cla_led_flag, "CLADataLS1")
volatile uint32_t cla_led_flag = 0;

__interrupt void Cla1Task1(void);
__interrupt void CLA_HaltTask1(void);
// Place task in CLA program memory
#pragma CODE_SECTION(Cla1Task1, "Cla1Prog")


__interrupt void Cla1Task1(void)
{
    // Set LED flag
        cla_led_flag = 1;
        Cla1Result = 1.234f;  // just to confirm CLA writes data
        // Clear CLA interrupt flag
    CLA_clearTaskFlags(CLA1_BASE, CLA_TASKFLAG_1);
}
__interrupt void CLA_HaltTask1(void)
{

    Interrupt_clearACKGroup(INTERRUPT_ACK_GROUP11);
}


void initCLA(void)
  {
    EALLOW;

    // Enable CLA1 clock
    SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_CLA1);

    // Optionally reset the CLA (if desired)
   // SysCtl_resetPeripheral(SYSCTL_PERIPH_RES_CPU1CLA1);

    // Optionally clear interrupt flags
  //  Interrupt_clearACKGroup(INTERRUPT_ACK_GROUP11);

 

    MemCfg_setLSRAMControllerSel(MEMCFG_SECT_LS0, MEMCFG_LSRAMCONTROLLER_CPU_CLA1);
       MemCfg_setCLAMemType(MEMCFG_SECT_LS0, MEMCFG_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 Task 1 Interrupt Handler
       initCLA();
       Interrupt_enable(INT_CLA1_1); // CLA Task 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

  • dear sir , my code corrected loop,  while(1){    CLA_forceTasks(CLA1_BASE, CLA_TASKFLAG_1); 

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

                }

    }