主要内容

本页采用了机器翻译。点击此处可查看英文原文。

使用子系统的 C2000 处理器 CLA 配置概述

控制律加速器 (CLA) 是 TI C2000™ 处理器的一个协处理器,它支持并行处理。利用 CLA 处理时间紧迫的任务,可以释放主 CPU 以同时执行其他系统和通信功能。

以下各节将解释:

CLA 任务

这里使用 CLA Task 块来触发 CLA 任务。该模块在 CLA 上运行下游函数调用子系统。在 CLA Task 块的块掩码中,指定 CLA 任务编号和相关的中断触发源。请确保您使用的是配置参数中选择的硬件板对应的库中的 CLA Trigger 模块。CLA 任务触发源选项因处理器而异。当选定的中断触发时,使用选定的 CLA 任务执行下游函数调用子系统。有关详细信息,请参阅 C28x CLA Task

例如,使用 CLA Task1,并选择 Software 作为触发源,这意味着 CLA 任务将以采样时间参数中提供的采样率触发。

CLA task block

CLA 任务完成后的中断生成

CLA 任务完成后,可以生成 CLA 中断。CLA Task1 中断被用作 C28x Hardware Interrupt 模块的中断源。由 Hardware Interrupt 块触发的 CLA 任务中断(CPU = 11,PIE = 1-8)的功能调用子系统在 CLA 任务结束时执行,此时发生特定中断。

注意

CLA Tasksoftware 以外的中断触发时,请确保在 CLA 任务结束时清除中断。当您使用带有 CLA 任务结束中断或 CLA 源触发中断 Hardware Interrupt 块时,即可自动实现此功能。

CLA Subsystem

CLA Subsystem 模块包含模型或系统中的模块集。CLA 子系统是由 CLA Task 块触发的子系统。

CLA Subsystem 模块只能与 CLA Task 模块一起使用。有关详细信息,请参阅 CLA Subsystem

CLA subsystem task

CLA 子系统要求您在模型中加载 tic2000demospkg 软件包,并使用有效的基于 TI C2000 的硬件板。要将 tic2000demospkg 包加载到模型中,请按照以下步骤操作。

  • 从 Simulink 工具条,导航到 Apps,然后点击 Embedded Coder

    CLA-APPS

  • 转到 C Code > Code Interface,然后点击 Embedded Coder Dictionary (Model)

    Code-Interface

  • 在 Embedded Coder Dictionary 窗口中,转到 Storage Class,然后点击 Manage Packages。如果找不到 tic2000demospkg,点击 Refresh 并加载软件包。有关详细信息,请参阅CLA 和 C28x CPU 之间的数据交换

    Manage packages

方法一:CLA 子系统不可重用功能代码生成(推荐)

在 CLA Subsystem 块中,“代码生成”选项卡上的 Function packaging 参数默认设置为 Nonresuable。要打开模块参数,请右键点击 CLA 子系统,然后选择 Block Parameters(Subsystem)

注意

此方法需要将 tic2000demospkg 软件包加载到带有 TI C2000 硬件板的模型中。有关详细信息,请参阅CLA 和 C28x CPU 之间的数据交换

  • CLA Subsystem 模块会将 CLA 算法代码与数据一起生成为一个单独的.C file

    初始化/终止函数带有编译器指令前缀,因此它仅使用 C 编译器进行编译,执行函数带有前缀,以确保它由 CLA 编译器进行编译。

  • 常量、参数和内部数据会自动配置并存储在 Cla1DataRAM 中。

  • 仅将 CPU 到 CLA 的输入信号保存为信号,并使用代码映射编辑器将其存储在 CpuToCla1MsgRAM 存储类中。

  • 使用此方法 Monitor & Tune (External mode)

 兼容性注意事项

Nonreusable Function Code Generation for CLA Subsystem 从 R2021b 版本开始可用。

方法二 - CLA 子系统的内联代码生成

在 CLA Subsystem 模块中,在模块参数的 Code Generation 选项卡下,选择 Function packagingInline。要打开模块参数,请右键点击 CLA 子系统,然后选择 Block Parameters(Subsystem)

  • 在这种方法中,CLA 内部的整个算法被 inlined,并成为 CLA 任务文件 (cla_task.cla) 的一部分。

  • CLA 的所有输入信号必须手动配置为存储 CpuToCla1MsgRAM 存储类。

  • CLA 到 CPU 的所有输出信号均已手动配置为存储 Cla1ToCpuMsgRAM 存储类。

  • CLA 函数调用子系统内部使用的所有离散状态变量均手动配置为存储 Cla1DataRam。例如,必须将延迟模块和积分器设置为使用 Cla1DataRam 存储类来存储状态变量。请参阅 c28035blink_cla.slx 示例中 cla_subsystem 内 Delay 模块的 State Attributes

  • 使用这种方法,您无法对 CLA 子系统之外的信号执行 Monitor & Tune (External mode)

CLA 和 C28x CPU 之间的数据交换

CLA 存储类可以加载到模型中(Embedded Coder >代码接口> Embedded Coder 字典>管理包),如图所示。

代码映射编辑器是配置用于代码生成的模型数据元素的主要位置。有关详细信息,请参阅 代码映射编辑器 - C (Simulink Coder)

CLA 和 CPU 之间的所有接口都需要放置在特定的内存区域内。要访问这些部分,请选择 Embedded Coder > “代码映射” > “数据存储信号/状态”,然后选择“CpuToCla1MsgRAM”和“Cla1ToCpuMsgRAM”。有关详细信息,请参阅 代码映射编辑器 - C (Simulink Coder)

内存段数据

模型中的数据存储在各个内存区域,这些区域具有以下访问规则。

存储器类

内存段

CPU

CLA

CpuToCla1MsgRAM读写仅读取
Cla1ToCpuMsgRAM仅读取读写
Cla1DataRAM读写读写

注意

  • 具有 Cla1ToCpuMsgRAM 存储类的信号或状态将在 CPU 编译的函数(模型初始化函数)中添加初始化,但 CPU 没有对上述内存部分的写入权限。如果需要对特定变量进行初始化,并且该变量也需要由 CLA 编辑,建议使用 Cla1DataRAM

  • 对于 F2803x 处理器,Cla1DataRAM 行为与 Cla1ToCpuMsgRam 类似,即 CPU 除了 CpuToCla1MsgRAM 之外,对上述任何存储类都没有写入访问权限。

存储器段代码

具有以下内存部分的函数都带有编译器指令前缀,用于控制代码的编译。

  • C28xFunctionC28x compiler 编译。

  • ClaFunctionCLA compiler 编译。

下图显示了模型中 CPU 和 CLA 之间特定内存部分的配置。

Code Mapping

使用 CLA 时所需的模型配置

模型配置参数>代码生成>优化中“默认参数行为”参数必须设置为 Inlined。这样就避免了创建模型结构全局变量,因为 CLA 无法访问全局数据。

更改标准链接器命令文件

对于 F28035 和 F28069 处理器,必须选择特定的链接器命令文件来分配 CLA 内存段。在模型配置参数中,选择 Hardware Implementation > Target hardware resources > Build options,然后选择 Use custom linker command file。使用预配置的 c28069_cla.cmd 作为链接器命令文件。此文件添加了 CLA 内存段描述,可以在 blockset 安装根目录下的 src 目录中找到。

使用 XCP 外部模式探查

当使用 XCP 外部模式对包含 CLA 子系统的模型进行探查时,请确保禁用 Configuration Parameters > Code Generation > Interface > Advanced parameters ”下 Terminate function required 参数。

注意

对于包含 CLA 的模型,使用 XCP External 模式运行探查将不会分析在 CLA 中执行的任务。

CLA LSRAM 存储器配置

在模型配置参数中,您可以将本地共享 RAM (LSRAM) 配置为 CLA 程序和数据存储器。

在模型配置参数中,导航至 Hardware Implementation > Target hardware resources > Build options,然后选择 Configure CLA program and data memory。有关详细信息,请参阅C28x-Build Options

下表描述了处理器可用的 LSRAM 总内存。

CLA LSRAM 内存分配

处理器可用 LSRAM 总内存量(单位:千字 (KW))
F2837x/F2807x 12
F28004x/F2838x16

CLA 调试

生成的 cla_task.cla 文件中,CLA 任务 (__interrupt void Cla1Task1 ( void )) 的开头存在调试函数/*__mdebugstop()*/

  1. 移除__mdebugstop() 周围的注释注释,即可启用调试函数。

  2. 编译源代码或构建 CCS 工程。

CLA 中的代码替换库

如果在由 CLA 任务触发的子系统中使用,则 Simulink® 中的以下三角函数模块将被相应的 CLA 数学库函数替换。

注意

对于 CLA 内部的 CRL 替换,会向由 CLA 任务触发的函数调用子系统添加一个标签。请勿将此标签用于任何其他子系统。

  • 正弦函数 approximation 设为 none

  • 余弦函数 approximation 设为 none

  • asin、acos、atan、atan2、以 10 为底的对数、以 e 为底的对数、指数函数和平方根函数。

CLA 限制和故障排除

限制

由于 CLA(控制律加速器)与 C28x CPU 之间的交互作用,以及 CLA C 编译器的限制,必须遵循某些建模实践。

  • 只有 C28x 事件才能触发 CLA 应用程序代码。C28x CPU 可以通过软件或使用外设中断来启动 CLA 任务。

  • CLA 和 CPU 之间的接口必须放置在特定的内存区域内。使用 CpuToCla1MsgRAM 内存部分将数据从 C28x 交换到 CLA,使用 Cla1ToCpuMsgRAM 部分将数据从 CLA 交换到 C28x。

  • 采样时间为 inf 的常量,映射到 CpuToCla1MsgRAM 或 Cla1ToCpuMsgRAM,始终初始化为 0。确保此类常量的采样时间设置为 -1 或正整数。

  • 对于使用外部模式下 CLA 子系统的模型,数据无法在 CLA 子系统内记录。要监控数据,请将其移出 CLA 子系统。

  • CLA 应用程序代码无法访问全局变量。

  • CLA C 编译器不支持递归函数调用。

  • CLA C 编译器不支持整数除法或无符号整数比较。使用 MATLAB® 函数访问 TI 提供的 CLA 数学库函数以进行这些操作。

  • 当 CLA 中使用一个实例时,不能在同一个模组中使用多个 DAC 模块实例。

  • CLA 不支持 CAN、IPC、SPI 或 SCI 模块。

  • 创建复位函数的模块不能在 CLA 内部使用。Simulink 不控制 CLA 内核复位函数的定义和编译。例如,不支持 PID 积分器和重置状态的模块。

  • MATLAB 函数中使用的常量存储在 C28x 的常量部分,CLA 无法访问该部分。为了解决这个问题,可以在 Simulink 中使用具有适当存储类的常量,并将它们作为输入传递给 MATLAB 函数。

在 Simulink 中创建模型时,请考虑这些限制。

使用 CLA 时需要考虑的其他准则

避免在 CLA 函数调用子系统中使用原子子系统创建子函数,因为这会生成 CLA 无法编译的嵌套函数。这些函数没有添加必要的 CLA 编译器标签前缀。

某些 CLA 配置可能需要对模型进行额外的操作,或者限制 Simulink 功能的使用。有关限制列表,请参阅 CLA C 编译器文档。为确保兼容性,请使用 Embedded Coder® 功能将生成的代码限制为 CLA C 编译器支持的语法。

故障排除

  • 请确保您使用的代码生成工具版本支持 CLA C 编译器。

  • 请确保您的系统已安装支持 CLA 的最新 C/C++ 头文件。

另请参阅

|

主题