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:
-
CLA Program Loading: I have verified the linker file (
.cmd) placesCla1ProginFLASHD(LOAD) andLS0RAM(RUN), and I usememcpyinmain()to copy the code from Flash to LS0RAM. -
Memory Configuration: LS0RAM is configured for CLA Program and LS1RAM for CLA Data.
-
CLA Task: Task 1 is software-triggered and attempts to set a shared flag (
cla_led_flag = 1) on completion. -
Interrupt Handling: PIE Group 11 (INT_CLA1_1) is enabled and registered to the
CLA_HaltTask1ISR.
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;}
}} 

