基于TMS32F28035的CLA学习
部分内容参考: DSP28035 CLA配置与调试步骤_lijialin_bit的博客-CSDN博客_cla调试
控制律加速器通过添加并行处理来扩展 C28x CPU 的功能。 CLA 处理的时间关键控制环路可实现低 ADC采样输出延迟。 因此, CLA 支持更快速的系统响应和可高频率的控制环路。 将 CLA 用于时间关键任务可将CPU 解放出来去同时执行其它系统和通信功能。
以下是 CLA 主要特性列表:
• 时钟速率与主 CPU 一致 (SYSCLKOUT)。
• 一个独立的架构使得 CLA 能够独立于主 C28x CPU 之外进行算法执行。
– 完整的总线架构:
• 程序地址总线和程序数据总线
• 数据地址总线、 数据读取总线、 和数据写入总线
– 独立的 8 级管道。
– 12 位程序计数器 (MPC)
– 4 个 32 位结果寄存器 (MR0-MR3)
– 2 个 16 位辅助寄存器 (MAR0, MAR1)
– 状态寄存器 (MSTF)
• 指令集包括:
– IEEE 单精度(32 位) 浮点数学运算
– 带有并行载入或者存储的浮点数学
– 带有并行加法或者减法的浮点乘
– 1/X 和 1/sqrt(X) 估值
– 数据类型转换。
– 条件分支指令和调用
– 数据载入/存储操作
• CLA 程序代码能够包含多达 8 个任务或者中断处理例程。
– 每一个任务的开始地址由 MVECT 寄存器指定。
– 只要任务符合 CLA 内的程序内存空间, 对任务大小就没有限制。
– 每次处理并完成一个任务。 无任务嵌套。
– 任务完成时, 在 PIE 内标志一个任务专用中断。
– 当一个任务结束时, 下一个具有最高优先级的等待任务自动开始。
• 任务触发机制:
– 借助于 IACK 指令的 C28x CPU
– 任务 1 至 任务 7: 相应的 ADC 或 ePWM 模块中断。 例如:
• 任务 1: ADCINT1 或者 EPWM1_INT
• 任务 2: ADCINT2 或者 EPWM2_INT
• 任务 7: ADCINT7 或者 EPWM7_INT
– 任务 8: ADCINT8 或者由 CPU 定时器 0 发出的任务。
• 内存和共用外设:
– 两个专用消息 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,接下来可以进行单步调试了
基于TMS32F28035的CLA学习相关推荐
- 语义分割:基于openCV和深度学习(二)
语义分割:基于openCV和深度学习(二) Semantic segmentation in images with OpenCV 开始吧-打开segment.py归档并插入以下代码: Semanti ...
- 语义分割:基于openCV和深度学习(一)
语义分割:基于openCV和深度学习(一) Semantic segmentation with OpenCV and deep learning 介绍如何使用OpenCV.深度学习和ENet架构执行 ...
- 基于caffe的度量学习实现(Siamese network Triplet network)
基于caffe的度量学习实现,主要是孪生网络和三元组网络(Siamese network & Triplet network)实现图像的分类和度量. 包含数据集制作脚本,训练测试脚本和pyth ...
- 基于模型的强化学习比无模型的强化学习更好?错!
作者 | Carles Gelada and Jacob Buckman 编辑 | DeepRL 来源 | 深度强化学习实验室(ID:Deep-RL) [导读]许多研究人员认为,基于模型的强化学习(M ...
- 《中国人工智能学会通讯》——11.52 基于直推式学习的异质人脸图像 合成
11.52 基于直推式学习的异质人脸图像 合成 前面介绍的方法都是基于归纳式学习(InductiveLearning) 的,这些方法取得了不错的效果,但是它们也使得测试样本风险误差增加,进而可能影响合 ...
- 基于 Android NDK 的学习之旅-----资源释放
基于 Android NDK 的学习之旅-----资源释放 做上一个项目的时候因为与C引擎交互频繁,有时候会突然莫名其妙的的整个应用程序直接挂掉.因为我是学Java 开始的,所以对主动释放内存没多大概 ...
- Keras快速上手:基于Python的深度学习
Keras快速上手:基于Python的深度学习 谢梁,鲁颖,劳虹岚 著 ISBN:9787121318726 包装:平装 开本:16开 正文语种:中文 出版社: 电子工业出版社 出版时间:2017-0 ...
- 上交张伟楠副教授:基于模型的强化学习算法,基本原理以及前沿进展(附视频)
2020 北京智源大会 本文属于2020北京智源大会嘉宾演讲的整理报道系列.北京智源大会是北京智源人工智能研究院主办的年度国际性人工智能高端学术交流活动,以国际性.权威性.专业性和前瞻性的" ...
- 基于 Android NDK 的学习之旅----- C调用Java
2019独角兽企业重金招聘Python工程师标准>>> 基于 Android NDK 的学习之旅----- C调用Java 许多成熟的C引擎要移植到Android 平台上使用 , 一 ...
最新文章
- 厉害了,用Python实现自动扫雷!
- Xilinx FFT IP core V9.0的介绍和使用
- 开发日记-20190616 关键词 读书笔记《鸟哥的Linux私房菜-基础学习篇》
- *44.程序的链接方式
- 机器学习中梯度下降算法的实际应用和技巧
- c++11 call_once 使用方法
- LeetCode 6033. 转换数字的最少位翻转次数(位运算)
- 进位和借位问题的研究
- 用Python写一个批量生成账号的函数(用户控制数据长度、数据条数)
- 公共技术点之 Android 动画基础
- 【bat命令-在for循环中赋值给局部变量后再输出变量时提示“ECHO 处于关闭状态。”或者“ECHO 处于打开状态。”】
- 使用360优化修复系统后导致无法上网 维护笔记
- XP连接网络计算机未启动服务,网络不存在或尚未启动/以及局域网互访的解决办法...
- Simulink仿真入门到精通(二) Simulink模块
- PNP : Work Cound Frequence
- php发卡v6_GitHub - Cghang/vfkphp: V发卡 完全开源免费的个人自动发卡解决方案
- 计算机病毒 笑话,轻松一刻:因为男生的电脑容易中病毒
- FBI 打击全球 DDoS 出租市场
- 20-40-60法则
- 怎么理解数据网格(Data Mesh)