CLA Module¶
The Control Law Accelerator (CLA) API provides a set of functions to configure the CLA. The CLA is an independent accelerator with its own buses, ALU and register set. It does share memory, both program and data, with the main processor; it comes out of a power reset with no memory assets and therefore the C28x must configure how the CLA runs, which memory spaces it uses, and when code must run.
The primary use of the CLA is to implement small, fast control loops that run periodically, responding to specific trigger sources like the PWM or an ADC conversion in a deterministic (fixed and low latency) fashion.
-
group
cla_api
This module is used for configurating CLA.
Defines
-
CLA_NUM_EOT_INTERRUPTS
(8U)¶
-
CLA_TASKFLAG_1
(0x01U)¶ CLA Task 1 Flag.
-
CLA_TASKFLAG_2
(0x02U)¶ CLA Task 2 Flag.
-
CLA_TASKFLAG_3
(0x04U)¶ CLA Task 3 Flag.
-
CLA_TASKFLAG_4
(0x08U)¶ CLA Task 4 Flag.
-
CLA_TASKFLAG_5
(0x10U)¶ CLA Task 5 Flag.
-
CLA_TASKFLAG_6
(0x20U)¶ CLA Task 6 Flag.
-
CLA_TASKFLAG_7
(0x40U)¶ CLA Task 7 Flag.
-
CLA_TASKFLAG_8
(0x80U)¶ CLA Task 8 Flag.
-
CLA_TASKFLAG_ALL
(0xFFU)¶ CLA All Task Flag.
Enums
-
enum
CLA_TaskNumber
¶ Values that can be passed to CLA_getPendingTaskFlag(), CLA_getTaskOverflowFlag(), CLA_getTaskRunStatus(), CLA_setTriggerSource(), CLA_registerEndOfTaskInterrupt(), and CLA_unregisterEndOfTaskInterrupt() as the taskNumber parameter.
Values:
-
enumerator
CLA_TASK_1
¶ CLA Task 1.
-
enumerator
CLA_TASK_2
¶ CLA Task 2.
-
enumerator
CLA_TASK_3
¶ CLA Task 3.
-
enumerator
CLA_TASK_4
¶ CLA Task 4.
-
enumerator
CLA_TASK_5
¶ CLA Task 5.
-
enumerator
CLA_TASK_6
¶ CLA Task 6.
-
enumerator
CLA_TASK_7
¶ CLA Task 7.
-
enumerator
CLA_TASK_8
¶ CLA Task 8.
-
enumerator
-
enum
CLA_MVECTNumber
¶ Values that can be passed to CLA_mapTaskVector() as the claIntVect parameter.
Values:
-
enumerator
CLA_MVECT_1
= 0x0U¶ Task Interrupt Vector 1.
-
enumerator
CLA_MVECT_2
= 0x1U¶ Task Interrupt Vector 2.
-
enumerator
CLA_MVECT_3
= 0x2U¶ Task Interrupt Vector 3.
-
enumerator
CLA_MVECT_4
= 0x3U¶ Task Interrupt Vector 4.
-
enumerator
CLA_MVECT_5
= 0x4U¶ Task Interrupt Vector 5.
-
enumerator
CLA_MVECT_6
= 0x5U¶ Task Interrupt Vector 6.
-
enumerator
CLA_MVECT_7
= 0x6U¶ Task Interrupt Vector 7.
-
enumerator
CLA_MVECT_8
= 0x7U¶ Task Interrupt Vector 8.
-
enumerator
-
enum
CLA_Trigger
¶ Values that can be passed to CLA_setTriggerSource() as the trigger parameter.
Values:
-
enumerator
CLA_TRIGGER_SOFTWARE
= 0U¶ CLA Task Trigger Source is Software.
-
enumerator
CLA_TRIGGER_ADCA1
= 1U¶ CLA Task Trigger Source is ADCA1.
-
enumerator
CLA_TRIGGER_ADCA2
= 2U¶ CLA Task Trigger Source is ADCA2.
-
enumerator
CLA_TRIGGER_ADCA3
= 3U¶ CLA Task Trigger Source is ADCA3.
-
enumerator
CLA_TRIGGER_ADCA4
= 4U¶ CLA Task Trigger Source is ADCA4.
-
enumerator
CLA_TRIGGER_ADCAEVT
= 5U¶ CLA Task Trigger Source is ADCAEVT.
-
enumerator
CLA_TRIGGER_ADCB1
= 6U¶ CLA Task Trigger Source is ADCB1.
-
enumerator
CLA_TRIGGER_ADCB2
= 7U¶ CLA Task Trigger Source is ADCB2.
-
enumerator
CLA_TRIGGER_ADCB3
= 8U¶ CLA Task Trigger Source is ADCB3.
-
enumerator
CLA_TRIGGER_ADCB4
= 9U¶ CLA Task Trigger Source is ADCB4.
-
enumerator
CLA_TRIGGER_ADCBEVT
= 10U¶ CLA Task Trigger Source is ADCBEVT.
-
enumerator
CLA_TRIGGER_ADCC1
= 11U¶ CLA Task Trigger Source is ADCC1.
-
enumerator
CLA_TRIGGER_ADCC2
= 12U¶ CLA Task Trigger Source is ADCC2.
-
enumerator
CLA_TRIGGER_ADCC3
= 13U¶ CLA Task Trigger Source is ADCC3.
-
enumerator
CLA_TRIGGER_ADCC4
= 14U¶ CLA Task Trigger Source is ADCC4.
-
enumerator
CLA_TRIGGER_ADCCEVT
= 15U¶ CLA Task Trigger Source is ADCCEVT.
-
enumerator
CLA_TRIGGER_ADCD1
= 16U¶ CLA Task Trigger Source is ADCD1.
-
enumerator
CLA_TRIGGER_ADCD2
= 17U¶ CLA Task Trigger Source is ADCD2.
-
enumerator
CLA_TRIGGER_ADCD3
= 18U¶ CLA Task Trigger Source is ADCD3.
-
enumerator
CLA_TRIGGER_ADCD4
= 19U¶ CLA Task Trigger Source is ADCD4.
-
enumerator
CLA_TRIGGER_ADCDEVT
= 20U¶ CLA Task Trigger Source is ADCDEVT.
-
enumerator
CLA_TRIGGER_XINT1
= 29U¶ CLA Task Trigger Source is XINT1.
-
enumerator
CLA_TRIGGER_XINT2
= 30U¶ CLA Task Trigger Source is XINT2.
-
enumerator
CLA_TRIGGER_XINT3
= 31U¶ CLA Task Trigger Source is XINT3.
-
enumerator
CLA_TRIGGER_XINT4
= 32U¶ CLA Task Trigger Source is XINT4.
-
enumerator
CLA_TRIGGER_XINT5
= 33U¶ CLA Task Trigger Source is XINT5.
-
enumerator
CLA_TRIGGER_EPWM1INT
= 36U¶ CLA Task Trigger Source is EPWM1INT.
-
enumerator
CLA_TRIGGER_EPWM2INT
= 37U¶ CLA Task Trigger Source is EPWM2INT.
-
enumerator
CLA_TRIGGER_EPWM3INT
= 38U¶ CLA Task Trigger Source is EPWM3INT.
-
enumerator
CLA_TRIGGER_EPWM4INT
= 39U¶ CLA Task Trigger Source is EPWM4INT.
-
enumerator
CLA_TRIGGER_EPWM5INT
= 40U¶ CLA Task Trigger Source is EPWM5INT.
-
enumerator
CLA_TRIGGER_EPWM6INT
= 41U¶ CLA Task Trigger Source is EPWM6INT.
-
enumerator
CLA_TRIGGER_EPWM7INT
= 42U¶ CLA Task Trigger Source is EPWM7INT.
-
enumerator
CLA_TRIGGER_EPWM8INT
= 43U¶ CLA Task Trigger Source is EPWM8INT.
-
enumerator
CLA_TRIGGER_EPWM9INT
= 44U¶ CLA Task Trigger Source is EPWM9INT.
-
enumerator
CLA_TRIGGER_EPWM10INT
= 45U¶ CLA Task Trigger Source is EPWM10INT.
-
enumerator
CLA_TRIGGER_EPWM11INT
= 46U¶ CLA Task Trigger Source is EPWM11INT.
-
enumerator
CLA_TRIGGER_EPWM12INT
= 47U¶ CLA Task Trigger Source is EPWM12INT.
-
enumerator
CLA_TRIGGER_TINT0
= 68U¶ CLA Task Trigger Source is TINT0.
-
enumerator
CLA_TRIGGER_TINT1
= 69U¶ CLA Task Trigger Source is TINT1.
-
enumerator
CLA_TRIGGER_TINT2
= 70U¶ CLA Task Trigger Source is TINT2.
-
enumerator
CLA_TRIGGER_MXINTA
= 71U¶ CLA Task Trigger Source is MXINTA.
-
enumerator
CLA_TRIGGER_MRINTA
= 72U¶ CLA Task Trigger Source is MRINTA.
-
enumerator
CLA_TRIGGER_MXINTB
= 73U¶ CLA Task Trigger Source is MXINTB.
-
enumerator
CLA_TRIGGER_MRINTB
= 74U¶ CLA Task Trigger Source is MRINTB.
-
enumerator
CLA_TRIGGER_ECAP1INT
= 75U¶ CLA Task Trigger Source is ECAP1INT.
-
enumerator
CLA_TRIGGER_ECAP2INT
= 76U¶ CLA Task Trigger Source is ECAP2INT.
-
enumerator
CLA_TRIGGER_ECAP3INT
= 77U¶ CLA Task Trigger Source is ECAP3INT.
-
enumerator
CLA_TRIGGER_ECAP4INT
= 78U¶ CLA Task Trigger Source is ECAP4INT.
-
enumerator
CLA_TRIGGER_ECAP5INT
= 79U¶ CLA Task Trigger Source is ECAP5INT.
-
enumerator
CLA_TRIGGER_ECAP6INT
= 80U¶ CLA Task Trigger Source is ECAP6INT.
-
enumerator
CLA_TRIGGER_EQEP1INT
= 83U¶ CLA Task Trigger Source is EQEP1INT.
-
enumerator
CLA_TRIGGER_EQEP2INT
= 84U¶ CLA Task Trigger Source is EQEP2INT.
-
enumerator
CLA_TRIGGER_EQEP3INT
= 85U¶ CLA Task Trigger Source is EQEP3INT.
-
enumerator
CLA_TRIGGER_SDFM1INT
= 95U¶ CLA Task Trigger Source is SDFM1INT.
-
enumerator
CLA_TRIGGER_SDFM2INT
= 96U¶ CLA Task Trigger Source is SDFM2INT.
-
enumerator
CLA_TRIGGER_UPP1INT
= 107U¶ CLA Task Trigger Source is UPP1INT.
-
enumerator
CLA_TRIGGER_SPITXAINT
= 109U¶ CLA Task Trigger Source is SPITXAINT.
-
enumerator
CLA_TRIGGER_SPIRXAINT
= 110U¶ CLA Task Trigger Source is SPIRXAINT.
-
enumerator
CLA_TRIGGER_SPITXBINT
= 111U¶ CLA Task Trigger Source is SPITXBINT.
-
enumerator
CLA_TRIGGER_SPIRXBINT
= 112U¶ CLA Task Trigger Source is SPIRXBINT.
-
enumerator
CLA_TRIGGER_SPITXCINT
= 113U¶ CLA Task Trigger Source is SPITXCINT.
-
enumerator
CLA_TRIGGER_SPIRXCINT
= 114U¶ CLA Task Trigger Source is SPIRXCINT.
-
enumerator
CLA_TRIGGER_CLB1INT
= 127¶ CLA Task Trigger Source is CLB1INT.
-
enumerator
CLA_TRIGGER_CLB2INT
= 128¶ CLA Task Trigger Source is CLB2INT.
-
enumerator
CLA_TRIGGER_CLB3INT
= 129¶ CLA Task Trigger Source is CLB3INT.
-
enumerator
CLA_TRIGGER_CLB4INT
= 130¶ CLA Task Trigger Source is CLB4INT.
-
enumerator
Functions
-
void
CLA_mapTaskVector
(uint32_t base, CLA_MVECTNumber claIntVect, uint16_t claTaskAddr)¶ Map CLA Task Interrupt Vector
Each CLA Task (1 to 8) has its own MVECTx register. When a task is triggered, the CLA loads the MVECTx register of the task in question to the MPC (CLA program counter) and begins execution from that point. The CLA has a 16-bit address bus, and can therefore, access the lower 64 KW space. The MVECTx registers take an address anywhere in this space.
- Parameters
base
: is the base address of the CLA controller.claIntVect
: is CLA interrupt vector (MVECT1 to MVECT8) the value of claIntVect can be any of the following:CLA_MVECT_1 - Task Interrupt Vector 1
CLA_MVECT_2 - Task Interrupt Vector 2
CLA_MVECT_3 - Task Interrupt Vector 3
CLA_MVECT_4 - Task Interrupt Vector 4
CLA_MVECT_5 - Task Interrupt Vector 5
CLA_MVECT_6 - Task Interrupt Vector 6
CLA_MVECT_7 - Task Interrupt Vector 7
CLA_MVECT_8 - Task Interrupt Vector 8
claTaskAddr
: is the start address of the code for task
- Return
None.
-
void
CLA_performHardReset
(uint32_t base)¶ Hard Reset
This function will cause a hard reset of the CLA and set all CLA registers to their default state.
- Parameters
base
: is the base address of the CLA controller.
- Return
None.
-
void
CLA_performSoftReset
(uint32_t base)¶ Soft Reset
This function will cause a soft reset of the CLA. This will stop the current task, clear the MIRUN flag and clear all bits in the MIER register.
- Parameters
base
: is the base address of the CLA controller.
- Return
None.
-
void
CLA_enableIACK
(uint32_t base)¶ IACK enable
This function enables the main CPU to use the IACK #16bit instruction to set MIFR bits in the same manner as writing to the MIFRC register.
- Parameters
base
: is the base address of the CLA controller.
- Return
None.
-
void
CLA_disableIACK
(uint32_t base)¶ IACK disable
This function disables the main CPU to use the IACK #16bit instruction to set MIFR bits in the same manner as writing to the MIFRC register.
- Parameters
base
: is the base address of the CLA controller.
- Return
None.
-
bool
CLA_getPendingTaskFlag
(uint32_t base, CLA_TaskNumber taskNumber)¶ Query task N to see if it is flagged and pending execution
This function gets the status of each bit in the interrupt flag register corresponds to a CLA task. The corresponding bit is automatically set when the task is triggered (either from a peripheral, through software, or through the MIFRC register). The bit gets cleared when the CLA starts to execute the flagged task.
- Parameters
base
: is the base address of the CLA controller.taskNumber
: is the number of the task CLA_TASK_N where N is a number from 1 to 8. Do not use CLA_TASKFLAG_ALL.
- Return
True if the queried task has been triggered but pending execution.
-
uint16_t
CLA_getAllPendingTaskFlags
(uint32_t base)¶ Get status of All Task Interrupt Flag
This function gets the value of the interrupt flag register (MIFR)
- Parameters
base
: is the base address of the CLA controller.
- Return
the value of Interrupt Flag Register (MIFR)
-
bool
CLA_getTaskOverflowFlag
(uint32_t base, CLA_TaskNumber taskNumber)¶ Get status of Task n Interrupt Overflow Flag
This function gets the status of each bit in the overflow flag register corresponds to a CLA task, This bit is set when an interrupt overflow event has occurred for the specific task.
- Parameters
base
: is the base address of the CLA controller.taskNumber
: is the number of the task CLA_TASK_N where N is a number from 1 to 8. Do not use CLA_TASKFLAG_ALL.
- Return
True if any of task interrupt overflow has occurred.
-
uint16_t
CLA_getAllTaskOverflowFlags
(uint32_t base)¶ Get status of All Task Interrupt Overflow Flag
This function gets the value of the Interrupt Overflow Flag Register
- Parameters
base
: is the base address of the CLA controller.
- Return
the value of Interrupt Overflow Flag Register(MIOVF)
-
void
CLA_clearTaskFlags
(uint32_t base, uint16_t taskFlags)¶ Clear the task interrupt flag
This function is used to manually clear bits in the interrupt flag (MIFR) register
- Parameters
base
: is the base address of the CLA controller.taskFlags
: is the bitwise OR of the tasks’ flags to be cleared CLA_TASKFLAG_N where N is the task number from 1 to 8, or CLA_TASKFLAG_ALL to clear all flags.
- Return
None.
-
void
CLA_forceTasks
(uint32_t base, uint16_t taskFlags)¶ Force a CLA Task
This function forces a task through software.
- Parameters
base
: is the base address of the CLA controller.taskFlags
: is the bitwise OR of the tasks’ flags to be forced CLA_TASKFLAG_N where N is the task number from 1 to 8, or CLA_TASKFLAG_ALL to force all tasks.
- Return
None.
-
void
CLA_enableTasks
(uint32_t base, uint16_t taskFlags)¶ Enable CLA task(s)
This function allows an incoming interrupt or main CPU software to start the corresponding CLA task.
- Parameters
base
: is the base address of the CLA controller.taskFlags
: is the bitwise OR of the tasks’ flags to be enabled CLA_TASKFLAG_N where N is the task number from 1 to 8, or CLA_TASKFLAG_ALL to enable all tasks
- Return
None.
-
void
CLA_disableTasks
(uint32_t base, uint16_t taskFlags)¶ Disable CLA task interrupt
This function disables CLA task interrupt by setting the MIER register bit to 0, while the corresponding task is executing this will have no effect on the task. The task will continue to run until it hits the MSTOP instruction.
- Parameters
base
: is the base address of the CLA controller.taskFlags
: is the bitwise OR of the tasks’ flags to be disabled CLA_TASKFLAG_N where N is the task number from 1 to 8, or CLA_TASKFLAG_ALL to disable all tasks
- Return
None.
-
bool
CLA_getTaskRunStatus
(uint32_t base, CLA_TaskNumber taskNumber)¶ Get the value of a task run status
This function gets the status of each bit in the Interrupt Run Status Register which indicates whether the task is currently executing
- Parameters
base
: is the base address of the CLA controller.taskNumber
: is the number of the task CLA_TASK_N where N is a number from 1 to 8. Do not use CLA_TASKFLAG_ALL.
- Return
True if the task is executing.
-
uint16_t
CLA_getAllTaskRunStatus
(uint32_t base)¶ Get the value of all task run status
This function indicates which task is currently executing.
- Parameters
base
: is the base address of the CLA controller.
- Return
the value of Interrupt Run Status Register (MIRUN)
-
void
CLA_enableSoftwareInterrupt
(uint32_t base, uint16_t taskFlags)¶ Enable the Software Interrupt for a given CLA Task
This function enables the Software Interrupt for a single, or set of, CLA task(s). It does this by writing a 1 to the task’s bit in the CLA1SOFTINTEN register. By setting a task’s SOFTINT bit, you disable its ability to generate an end-of-task interrupt For example, if we enable Task 2’s SOFTINT bit, we disable its ability to generate an end-of-task interrupt, but now any running CLA task has the ability to force task 2’s interrupt (through the CLA1INTFRC register) to the main CPU. This interrupt will be handled by the End-of-Task 2 interrupt handler even though the interrupt was not caused by Task 2 running to completion. This allows programmers to generate interrupts while a control task is running.
- Parameters
base
: is the base address of the CLA controller.taskFlags
: is the bitwise OR of the tasks for which software interrupts are to be enabled, CLA_TASKFLAG_N where N is the task number from 1 to 8, or CLA_TASKFLAG_ALL to enable software interrupts of all tasks
- Note
The CLA1SOFTINTEN and CLA1INTFRC are only writable from the CLA.
Enabling a given task’s software interrupt enable bit disables that task’s ability to generate an End-of-Task interrupt to the main CPU, however, should another task force its interrupt (through the CLA1INTFRC register), it will be handled by that task’s End-of-Task Interrupt Handler.
- Return
None.
-
void
CLA_disableSoftwareInterrupt
(uint32_t base, uint16_t taskFlags)¶ Disable the Software Interrupt for a given CLA Task
This function disables the Software Interrupt for a single, or set of, CLA task(s). It does this by writing a 0 to the task’s bit in the CLA1SOFTINTEN register.
- Parameters
base
: is the base address of the CLA controller.taskFlags
: is the bitwise OR of the tasks for which software interrupts are to be disabled, CLA_TASKFLAG_N where N is the task number from 1 to 8, or CLA_TASKFLAG_ALL to disable software interrupts of all tasks
- Note
The CLA1SOFTINTEN and CLA1INTFRC are only writable from the CLA.
Disabling a given task’s software interrupt ability allows that task to generate an End-of-Task interrupt to the main CPU.
- Return
None.
-
void
CLA_forceSoftwareInterrupt
(uint32_t base, uint16_t taskFlags)¶ Force a particular Task’s Software Interrupt
This function forces the Software Interrupt for a single, or set of, CLA task(s). It does this by writing a 1 to the task’s bit in the CLA1INTFRC register. For example, if we enable Task 2’s SOFTINT bit, we disable its ability to generate an end-of-task interrupt, but now any running CLA task has the ability to force task 2’s interrupt (through the CLA1INTFRC register) to the main CPU. This interrupt will be handled by the End-of-Task 2 interrupt handler even though the interrupt was not caused by Task 2 running to completion. This allows programmers to generate interrupts while a control task is running.
- Parameters
base
: is the base address of the CLA controller.taskFlags
: is the bitwise OR of the task’s whose software interrupts are to be forced, CLA_TASKFLAG_N where N is the task number from 1 to 8, or CLA_TASKFLAG_ALL to force software interrupts for all tasks
- Note
The CLA1SOFTINTEN and CLA1INTFRC are only writable from the CLA.
Enabling a given task’s software interrupt enable bit disables that task’s ability to generate an End-of-Task interrupt to the main CPU, however, should another task force its interrupt (through the CLA1INTFRC register), it will be handled by that task’s End-of-Task Interrupt Handler.
This function will set the INTFRC bit for a task, but does not check that its SOFTINT bit is set. It falls to the user to ensure that software interrupt for a given task is enabled before it can be forced.
- Return
None.
-
void
CLA_setTriggerSource
(CLA_TaskNumber taskNumber, CLA_Trigger trigger)¶ Configures CLA task triggers.
This function configures the trigger source of a CLA task. The
taskNumber parameter indicates which task is being configured, and the trigger parameter is the interrupt source from a specific peripheral interrupt (or software) that will trigger the task.- Parameters
taskNumber
: is the number of the task CLA_TASK_N where N is a number from 1 to 8.trigger
: is the trigger source to be assigned to the selected task.
- Return
None.
-
The next few paragraphs describe configuration options that are accessible via the main processor (the C28x).
The CLA code is broken up into a main background task and a set of 7 tasks, each of which requires a trigger source either from a hardware peripheral or software. Each task begins at an address that is given by its vector register. The vector for the background task can be configured using the CLA_mapBackgroundTaskVector(), and the task’s vector is set using CLA_mapTaskVector(). The trigger source for all the tasks can be set with CLA_setTriggerSource(). If using a software trigger, the user must first enable the feature with CLA_enableIACK(), and then trigger the task with the assembly instruction,
- align
center
__asm(” IACK #<Task>”); Task refers to the task to trigger; it is one less than the actual task. For example, if attempting to trigger task 1 you would issue,
- align
center
__asm(” IACK #0”);
A task will only start to execute if it is globally enabled. This is done through CLA_enableTasks(). Once enabled, a task will respond to a peripheral trigger (if configured to do so), a software force (with the IACK instruction), or through CLA_forceTasks().
In this type of CLA, a background task is always running. It is enabled using CLA_enableBackgroundTask() and subsequently kicked off by CLA_startBackgroundTask(), or through a peripheral trigger (it takes the same trigger as task 8 on older CLAs). The user may enable the background task peripheral trigger feature using CLA_enableHardwareTrigger().
The tasks (1 to 7) have a fixed priority, with 1 being the highest and 7 the lowest. They will interrupt the background task, when triggered, in priority order. The user may query the status of all tasks with CLA_getAllTaskRunStatus() or a particular task with CLA_getTaskRunStatus() to determine if its pending, running or idle.
Each task (1 through 7) can issue an interrupt to the main CPU after it completes execution. This is configured through the PIE module, and registering the handler (ISR) for each end-of-task interrupt with CLA_registerEndOfTaskInterrupt().
The CLA can undergo a soft reset with CLA_performSoftReset() or emulate a power cycle or hard reset with CLA_performHardReset().
The CLA can access and configure a few configuration registers (the C28x can read but not alter these registers). A task can force another’s end-of-task interrupt to the main CPU by enabling that task’s software interrupt using CLA_enableSoftwareInterrupt() and subsequently forcing it using CLA_forceSoftwareInterrupt(). Its important to keep in mind that enabling a software interrupt for a given task disables its ability to generate an interrupt to the main CPU once it completes execution.
The code for this module is contained in driverlib/cla.c, with driverlib/cla.h containing the API declarations for use by applications.