基于TMS32F28035的CLA学习

  部分内容参考:    DSP28035 CLA配置与调试步骤_lijialin_bit的博客-CSDN博客_cla调试  

        控制律加速器通过添加并行处理来扩展 C28x CPU 的功能。 CLA 处理的时间关键控制环路可实现低 ADC采样输出延迟。 因此, CLA 支持更快速的系统响应和可高频率的控制环路。 将 CLA 用于时间关键任务可将CPU 解放出来去同时执行其它系统和通信功能。

以下是 CLA 主要特性列表
• 时钟速率与主 CPU 一致 (SYSCLKOUT)
• 一个独立的架构使得 CLA 能够独立于主 C28x CPU 之外进行算法执行。
– 完整的总线架构:
• 程序地址总线和程序数据总线
• 数据地址总线、 数据读取总线、 和数据写入总线
– 独立的 级管道。
– 12 位程序计数器 (MPC)
– 4 个 32 位结果寄存器 (MR0-MR3)
– 2 个 16 位辅助寄存器 (MAR0, MAR1)
– 状态寄存器 (MSTF)
• 指令集包括:
– IEEE 单精度(32 位) 浮点数学运算
– 带有并行载入或者存储的浮点数学
– 带有并行加法或者减法的浮点乘
– 1/X 和 1/sqrt(X) 估值
– 数据类型转换。
– 条件分支指令和调用
– 数据载入/存储操作
• CLA 程序代码能够包含多达 个任务或者中断处理例程。
– 每一个任务的开始地址由 MVECT 寄存器指定。
– 只要任务符合 CLA 内的程序内存空间, 对任务大小就没有限制。
– 每次处理并完成一个任务。 无任务嵌套。
– 任务完成时, 在 PIE 内标志一个任务专用中断。
– 当一个任务结束时, 下一个具有最高优先级的等待任务自动开始。
• 任务触发机制:
– 借助于 IACK 指令的 C28x CPU
– 任务 至 任务 7: 相应的 ADC 或 ePWM 模块中断。 例如:
• 任务 1: ADCINT1 或者 EPWM1_INT
• 任务 2: ADCINT2 或者 EPWM2_INT
• 任务 7: ADCINT7 或者 EPWM7_INT
– 任务 8: ADCINT8 或者由 CPU 定时器 发出的任务。
• 内存和共用外设:
– 两个专用消息 RAM 用于 CLA 和主 CPU 间的通信。
– C28x CPU 能够将 CLA 程序和数据内存映射到主 CPU 空间或者 CLA 空间。
– CLA 可直接访问 ADC 结果寄存器、 比较器寄存器、 和 ePWM+HRPWM 寄存器。

CLA 被设计成减轻 CPU 的控制任务负担, 从而在主 CPU (C28x) 内核上释放带宽。 它对诸如 PWM 和ADC 等与主 CPU 共用的控制外设具有访问权限。 如下图中所示, CLA 有其自身的程序和数据总线, 并且独立执行主内核。 CLA 使用消息 RAM 与主内核进行交互, 并且与主 CPU 同时具有对控制外设的访问权限。 

CLA 不具有支持全标准 C 语言编译程序所需的硬件支持, 例如, CLA 没有堆栈。 此外, CLA 的指令集被精简了, 并且不能支持标准 C 语言编译程序的所有函数。 因此, 可提供编辑 CLA 的“CLA-C 编译程序”, 此编译程序支持大多数, 但不是全部 C 语言编译程序函数。 例如, CLA 只支持函数调用的一级嵌套以避免函数调用中的系统开销。

程序调试说明: 

程序参考文件目录如下(Ti官网库函数):

  

CLA程序代码可包含多大8个任务或中断服务程
序,每个任务有两种触发机制:主CPU触发和外设中断信号触发:
1. CPU触发:C28x CPU通过IACK指令来触发任务执行,可以通过主CPU软件控制。
2. 外设中断触发:Task1-7可以通过ADC或者ePWM来触发控制; 

为了使用CLA,需要配置两块RAM区域,用于CLA与主CPU通讯使用,分别为CPUtoCLARAM以及CLAtoCPURAM,其中CPUtoCLARAM区域数据CPU可读可写,CLA只能读不能写,CLAtoCPURAM区域数据CLA可读可写,CPU只能读不能写。CLA可以直接访问ePWM、HRPWM、比较器和ADC结果寄存器 

CLA配置过程:

CMD文件配置

与没有CLA的工程相比,带有CLA的工程需要为CLA配置一个RAM区域存放代码和数据。 作为CLA与主CPU进行数据通讯的RAM空间,用于存放交互数据。

        SECTION块为CLA部分相关的块分配地址,对应空间为PAGE中分配的CLA空间

主程序配置

在主程序中,需要对CLA进行初始化工作。首先设备初始化函数DeviceInit()中使能CLA的时钟

此例程需要运行任务Task1,Task1由ADC1的中断触发,当ADC1采样完成后,执行Task1程序进行数据处理,所以设置Task1的中断源为ADCINT1,并使能中断响应。

CLA初始化

CLA的函数需要在程序启动后主动运行一次,比如数据的初始化工作,因此在配置CLA时,使能CLA应答IACK,并且强行执行一次CLA任务。这里将Task8指定响应M_INT8中断,并使用CLA1ForceTask8()函数执行一次Task8任务,完成CLA数据的初始化。 

CLA程序的编写

CLA是可以直接操控PWM、ADC寄存器,操控PWM输出及读取ADC的采样结果;

CLA中进行操作的数据在声明时,需要注意这部分数据存放在CLA映射的RAM区域中。

对于CLA需要与CPU进行通讯的变量,指定存储在CPUtoCLA的RAM区域,这部分区域的数据,CPU可读可写,CLA只能读不能写。(同样如CLA程序需传递给CPU数据,在CPU中定义数据变量在RAM的CLA_CPU_MSGRAM区域,CLA可读可写,CPU只能读不能写

CLA程序的调试

CLA程序是不能通过仿真器打断点形式进行调试,必须通过在程序中插入debug语句才能调试。插入__medebugstop(),则程序会停止在此处。CLA可支持单步运行。

添加完debug后,在开发环境中进行设置,右键点击工程选择Properties->Built->C2000 Compiler->Processor Options,Specify CLA support 必须设置为cla0。

调试步骤:

(1)编译程序,点击甲壳虫按钮进入调试界面

(2)调试界面选择XDS100V3 USB Emulator_0/CLA然后右键点击Connect Target

(3)连接成功后下载.out文件,Run->Load->Load Symbols、

(4)下载成功后,断点直接跳到cla程序的debug,接下来可以进行单步调试了

  • 15
    点赞
  • 74
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值