28035 CLA 学习

CLA特征:

1、与主CPU采用相同的系统时钟

2、单独的架构,具备独立的数据和程序总线;

3、支持最多8个任务或中断,其中任务1优先级最高;

4、可以直接访问PWM、ADC等寄存器,注意28035 CLA0 无法访问 GPIO

故无法通过控制GPIO翻转来通过示波器读取运行时间,但是可以通过配置PWM来输出来查看程序运行时间;

CLA 三代

CLA0 28035  无法访问GPIO 无法直接断点调试,需要通过软件来调试

CLA1 280379 可实现GPIO的直接访问

CLA2 280049 可以直接断点调试

CLA结构图:

从结构介图可以看到,035外围中断ADC1~8、PWM1~7 、定时器0中断都可以作为激发CLA任务的中断源,同时CLA产生的中断1~8又能激发对应中断INT1~2反馈到主中断;

CPU在实际运行过程中是无法直接访问CLA的数据内存的,调试模式下可以访问。所以这里安排了一段通讯数据内存:

CLA to CPU CLA可对该片内存区域可读可写,CPU只能进行读取

CPU to CLA CPU可对该片内存区域可读可写,CLA只能进行读取

所以实际运用中,比如采样完成后,可能要计算一些变量的有效值什么的,就可以在主CPU中进行和累加,将和变量定义到CPU to CLA区域,CLA就可以读取该变量进行开根号的运算(sqrt);

CLA的专门的RAM区,在进行映射后,CPU是无法进行访问修改的。

这里有三个功能位:

    Cla1Regs.MMEMCFG.bit.PROGE = 1;   // 程序空间映射
    asm(" RPT #3 || NOP");

    Cla1Regs.MMEMCFG.bit.RAM0E = 1;   // 数据1空间映射
    asm(" RPT #3 || NOP");

    Cla1Regs.MMEMCFG.bit.RAM1E = 1;   // 数据2空间映射
    asm(" RPT #3 || NOP");
 

一旦执行这样的配置后,不管是CLA的程序空间,还是数据空间,CPU都无法进行访问设置了。可以理解为这片区域为CLA独有,这部分数据在CLA中进行使用,然后需要传到主cpu的数据通过通讯变量(定义在cpu to cla ,cla to cpu中的变量)来传递数据。

因此开启CLA功能后,定义变量时,我们单独设定一个 cla_shared_data.c  和 对应cla_shared_data.h 文件来 定义相关变量。比如说:

cla_shared_data.c 变量定义内容:

#pragma DATA_SECTION(fVal,"Cla1DataRam0");  // Cla1DataRam1

//Task 1 (C) Variables 通讯区间

// CPU to CLA cpu可读可写
#pragma DATA_SECTION(test_paras,"CpuToCla1MsgRAM");   //
float test_paras[10] = {0};

// CLA to CPU cla可读可写
#pragma DATA_SECTION(test_paras1,"Cla1ToCpuMsgRAM");
float test_paras1[10] = {0};  //Estimated result

cla_shared_data.h 中则对这些变量进行外部声明;

注意:

如果直接在.cla 文件中定义  全局变量,这里实际编译后发现,变量倍分配到cla的数据空间,所以该变量是无法被主cpu利用的,只能被cla调用。
 

CLA配置中有这么一个位:MSTF寄存器的RND32,这个位配置CLA浮点计算的舍入模式;

当配置为0时,就会在一些运算时直接截断到零,导致截断误差;

当配置为1时,将四舍五入到最接近的偶数值。

网上推荐将该位配置为1进行实验;我实际进行了测试,实际更改bit位发现截断效果几乎没差别。截断误差差不多可以忽略不计。担心截断的话,多项式复合计算时,就分步计算吧。

CLA支持软件强制任务触发,这里有个寄存器配置位:

    //使能软件强制
    Cla1Regs.MCTL.bit.IACKE = 1;

该位使能后可以直接通过 下列的宏定义函数直接强制开启一次任务;

#define Cla1ForceTask1()        __asm("  IACK  #0x0001")
#define Cla1ForceTask2()        __asm("  IACK  #0x0002")
#define Cla1ForceTask3()        __asm("  IACK  #0x0004")
#define Cla1ForceTask4()        __asm("  IACK  #0x0008")
#define Cla1ForceTask5()        __asm("  IACK  #0x0010")
#define Cla1ForceTask6()        __asm("  IACK  #0x0020")
#define Cla1ForceTask7()        __asm("  IACK  #0x0040")
#define Cla1ForceTask8()        __asm("  IACK  #0x0080")

这样子编程的话,灵活性就很强了。

CLA的库使用

如果你下载了TI的controlsuit  那么你可去里面 math/lib库里面找到CLAmath的库文件和头文件。

CLAmath.h

CLAmath.lib

添加两个文件后,就可以直接使用库了支持,除法,开根号,三角运算等。

 在网上看到,可能CLA不支持浮点除法的,具体c语言除法是可以运行的,可能就是像定点核上进行浮点运算一样,特别慢,具体时间我没去测试,所以你干脆就直接调用这个CLA的math库吧。当然你调用库的时候,需要将对应库里面的查询table要映射到对应ram区域

    MemCopy(&Cla1mathTablesLoadStart, &Cla1mathTablesLoadEnd, &Cla1mathTablesRunStart);
    asm(" RPT #3 || NOP");

这个TI里面有对应例程的,可以参考下他的CMD配置。

官方的CMD配置内存分配有点乱,你可以按照自己的需求进行CMD配置。

CLA初始化是很简单的,这里提供下代码以供参考:

大概就是,先配置好任务或中断指针,然后就是选择中断源,然后做程序空间映射数据空间映射和拷贝,最后使能任务,一般使能软件强制任务发生功能(有中断源就不不需要开启了)。

void cla_init(void) // CLA的初始化函数
{
    EALLOW;  // 寄存器受保护需要使用EALLOW

    //中断向量表设置,需要使用多少个TASK就要填入多少个,1-8都写完也没问题
    Cla1Regs.MVECT1 = (Uint16)((Uint32)&Cla1Task1 - (Uint32)&Cla1Prog_Start);
    Cla1Regs.MVECT2 = (Uint16)((Uint32)&Cla1Task2 - (Uint32)&Cla1Prog_Start);
    Cla1Regs.MVECT3 = (Uint16)((Uint32)&Cla1Task3 - (Uint32)&Cla1Prog_Start);
    Cla1Regs.MVECT4 = (Uint16)((Uint32)&Cla1Task4 - (Uint32)&Cla1Prog_Start);
    Cla1Regs.MVECT5 = (Uint16)((Uint32)&Cla1Task5 - (Uint32)&Cla1Prog_Start);
    Cla1Regs.MVECT6 = (Uint16)((Uint32)&Cla1Task6 - (Uint32)&Cla1Prog_Start);
    Cla1Regs.MVECT7 = (Uint16)((Uint32)&Cla1Task7 - (Uint32)&Cla1Prog_Start);
    Cla1Regs.MVECT8 = (Uint16)((Uint32)&Cla1Task8 - (Uint32)&Cla1Prog_Start);

    //中断源设置,这里未配置中断源,通过软件进行触发进入
    Cla1Regs.MPISRCSEL1.bit.PERINT1SEL = CLA_INT1_NONE;
    Cla1Regs.MPISRCSEL1.bit.PERINT2SEL = CLA_INT2_NONE;
    Cla1Regs.MPISRCSEL1.bit.PERINT3SEL = CLA_INT3_NONE;
    Cla1Regs.MPISRCSEL1.bit.PERINT4SEL = CLA_INT4_NONE;
    Cla1Regs.MPISRCSEL1.bit.PERINT5SEL = CLA_INT5_NONE;
    Cla1Regs.MPISRCSEL1.bit.PERINT6SEL = CLA_INT6_NONE;
    Cla1Regs.MPISRCSEL1.bit.PERINT7SEL = CLA_INT7_NONE;
    Cla1Regs.MPISRCSEL1.bit.PERINT8SEL = CLA_INT8_NONE;

    Cla1Regs._MSTF.bit.RNDF32 = 0;    // 舍入方式配置
    //拷贝CLA程序
    //Copy over the CLA code and Tables
    MemCopy(&Cla1funcsLoadStart, &Cla1funcsLoadEnd, &Cla1funcsRunStart);
    asm(" RPT #3 || NOP");

    MemCopy(&Cla1mathTablesLoadStart, &Cla1mathTablesLoadEnd, &Cla1mathTablesRunStart);
    asm(" RPT #3 || NOP");

    Cla1Regs.MMEMCFG.bit.PROGE = 1;   // 程序空间映射
    asm(" RPT #3 || NOP");

    Cla1Regs.MMEMCFG.bit.RAM0E = 1;   // 数据1空间映射
    asm(" RPT #3 || NOP");

    Cla1Regs.MMEMCFG.bit.RAM1E = 1;   // 数据2空间映射
    asm(" RPT #3 || NOP");

    //使能6个TASK
    Cla1Regs.MIER.bit.INT1 = 1;       // 使能任务1
    Cla1Regs.MIER.bit.INT2 = 1;       // 使能任务2
    Cla1Regs.MIER.bit.INT3 = 0;
    Cla1Regs.MIER.bit.INT4 = 0;
    Cla1Regs.MIER.bit.INT5 = 0;
    Cla1Regs.MIER.bit.INT6 = 0;
    Cla1Regs.MIER.bit.INT7 = 0;
    Cla1Regs.MIER.bit.INT8 = 0;

    //使能软件中断
    Cla1Regs.MCTL.bit.IACKE = 1;

    EDIS;

}

这里建议,在执行Memcopy后,还是延时几个机械周期。

CLA的仿真调试

仿真调试,这里步骤:

1、debug将程序下载进去,先不要直接点运行;

2、下载后,切换到view  -  debug 界面 ,选择  CLA0 核 右击鼠标进行链接操作

3、链接后,点击 load -  load symbol     (不是  load program) 选择对应。out文件下载

4、先别点击运行,你需要在  debug界面,先鼠标左键点击 切换到 主核,然后再点击仿真执行按钮

5、执行后将会在  _mdebugstop(); 语句处停下,这样子你就可以单步执行程序了。

这里要注意的是,CLA调试下,代码的单步执行时间,是无法进行观察的。所以你仍然需要配置pwm来观察程序运行时间。

CLA调试下,只能执行单步调试,无法直接跳过函数执行,就是遇到函数的时候,必然会跳进去函数内部执行单条语句,如果你使用了CLAmath库,这个时候,你的软件配置里面必须包含对应库函数的源函数文件,否则将会报错,找不到对应文件。这个源文件在controlsuit 里面有提供,直接添加对应路径即可。

CLA大概使用流程就是这样。有什么错误的地方欢迎指正。

  • 7
    点赞
  • 54
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
该版为中文,看起来非常方便。与英文版对比着研究,效果更好!lEXAS INSTRUMENTS 微控制器 增强型捕捉模块 特性 高分辨率捕捉 模块 说明 增强型正交编码器脉冲 开始使用 端口 简介 引脚分配 器件支持 信号说明 器件和开发支持工具命名规则 功能概述 相关文档 方框图 社区资源 内存映射 电气规范 简要说明 最大绝对额定值 寄存器映射 建议的运行条件 器件仿真寄存器 电气特性 中断 流耗 散热设计考虑 系统控制 针对的无信号缓冲的仿真器连接 低功耗模式块 时序参数符号 外设 时钟要求和特性 控制律加速器概述 电源排序 模拟时钟 通用输入输出 串行外设接口 模块 增强型控制外设 串行通信接口模块 详细说明 本地互连网终 闪存定时 增强型控制器局域网络 模块 至修订历史记录 内部集成电路 至修订历史记录 增强型 模块 热性能机械数据 高分辨率 版权 内容 EXAS INSTRUMENTS 简介 表列出了 器件的特性。 简介 权 TEXAS INSTRUMENTS 表硬件特性 功能 类型 引脚引脚引脚号脚引脚引脚引脚引 引脚引脚引脚引脚 封装类型 指令周期 控制律加速器 否 否 不支持 支持 不支持 支持 片载闪存(位字) 片载 位字 片载闪存 块的代码安全 支持 支持 支持 又持 支持 引导 支持 叉持 支持 次性可編程 (位字) 输出 模块 全装置定时器 支持 支持 又持 支持 秒百万次采样 转换时间 温度传感器 支持 支持 支持 支持 叉持 支持 双采样保持 支持 支持 支持 又持 支持 定时器 高分辨率 通道 高分辨率捕获 模块 有集成数模转换器 的比较器 内部集成电路 增强型控制器局域网络 本北互连网络 串行外设接口 串行通信接口 引脚(共 电源电压(标称值) 个类型变化代表一个外设模块中的主要功能特性差异。在一个外设类型内,器件之间会有绀徼差异,而这些差异不会影响模块的基本功能性。这些特定器件差异显示在 外设参考手册》(文献编号 )列表中和外设参考指南中。 简介 TEXAS INSTRUMENTS 表硬件特性 功能 类型 引脚引脚引脚引脚引脚引脚 引脚 引脚引脚引脚 引脚 引脚引脚引脚引脚引脚引脚引脚 封装类型 支持 支持 又持 支持 温度选项 支持 支持 主 支持 不支持 支持 不支持 支持 不支持 支持 不支持 支持 不支持 支持 不支持 产品状态 是指针对汽车应用的 认证技术规范。 器件级说明,请见节,器件和开发支持工具命名规则。 产品状态表示一个完全合格的生产器件 产品状态表示一个试验器件,此试验器件并不一定代表最终器件的电气规 范 简介 版权 lEXAS INSTRUMENTS 引脚分配 图显示了引脚小型四方扁半(无引线)封装 引脚分配。图显示了引却薄 型四方扁平封装 引脚分配。图显示引脚薄型四方肩平封装 引脚分配。 引脚封装上的信息数据为 产品状态表示一个试验器件,此试验器件并 不一定代表最终器件的电气规范。器件级说明,请见节,器件和开发支持工具命名规则。 版权 简介 EXAS INSTRUMENTS <Ou× z>0 OO× NN-<O Q 吕5§3安活5吕吾 寸导8将8$习 TTTTT廿 GPIO36/TMS 43 28 GPIO28/SCIRXDA/SDAA/TZ2 GPIOS/EPWM3B/SPISIMOAECAP144 27 TEST2 GPIO4/EPWM3A 45 26V GPIO3/EPWM2B/SPISOMIA/COMP2OUT 46 GPIO2/EPWM2A 47 24 GPIO29/SCITXDA/SCLA/TZ3 GPIO1/EPWM1B/COMPlOUT 48 23 GPIO3O/CANRXA G PIOO/EPWM1A 49 22 GPIO31/CANTXA DDIo 50 21 ADCINB7 20 ADCINB6/COMP3B/AIO14 DD 52 19 ADCINB4/COMP2B/AIO12 VREGENZ 53 18 ADCInB3 GP1O34/COMP2OUT/COMP3OUT 54 17 ADCINB2/COMP1 B/AIO10 GPIO20/EQEP 1A/COMP1OUT 55 16 ADCINB1 GPIO21/EQEP1B/COMP2OUT 56 15 SA REFLO auu?Oa 这个图表显示了引脚封装的顶视图。阴影表示端子实际上在封装的底部。引脚机械制图,请 见 ,热机械薮据。 引脚 共用引脚器件上的同一引脚并且它们不可同时使用。 引脚 被一直连接至引脚器件上的 图 引脚 (顶视图) 简介 权 lEXAS INSTRUMENTS dcud×2 oO202u=Oz0 o<o0o≤<s2u oO 5555§当558585 守令寸守乎守导98内8 GPIOIT/EPWM6B/LINRXA/FRCAP2 GPIO28SCIRXDA/SDAA/IZ2 GPIOS/EPWM3B/SPSIMOA/ECAP1 GPIO9/EPWM5B/LINTXA/HRCAP1 GPIO4EPWM3A TEST2 GPIOlUEPWM6A/AUCSOCBO G PIO3/EPWM2B'SPISOMIA/COMP2OUT GPIO2/EPWM2A 27 F GPIO29/ SCITXDA/SCLA/TZ3 GPIOTEPNM1B/COMP1QU GPIOSOICANRX GPO0 EPWM1A□56 GPIO31CANTXA VEDIO 24 ADCINB7 VSS DI58 23 ADCINB6/COMP3BAIO14 ) CINBAICOMP2BIA1012 BREGENZ G PIO34/COMP2OUTICOMP3OUT D 20F ADCINB2/COMP1B: AIO10 GPIO2O/EOEP 1A/COMP1OUT 19 ADCINB1 GP1O21/EQEP 1BCOMP2QUT DCINBO GPIO24/ECAP1DI64 O VSSA/VREFLO P:N99 Noc 凵囗囗 O 2CSszcc 引脚 和 共用引脚器件上的同一引脚并且它们不可同时使用。 引脚 被一自连接至引脚器件上的 图 引即 (顶视图) 版权 简介 EXAS INSTRUMENTS 883 GPIO11/EPWM6B/LINRXA/HRCAP2 GPIO5JEPWM3B/SPISIMOA/ECAP1 GPIO9/EPWM5B/INTXA/HRCAP1 GPIO4/EPWM3A GPIO4EPWM7A GP1026/HRCAP1 SPICLKB GPIO10/EPWMEAIADCSOCBO G PIO3/EPWM2B SPIS GPIO2/EPWM2A GPIO29SCITXDA/SCLATZ3 GPIO1/EPWM1BCOMP1OUT 33 G PIOO/EPWM1A VDDID GPI027/HRCAP2ISPISTFR SS ADCINB7 VDD ADCINB6/CCMP3BIAIO14 G PIO34/COMP2OUTCOMP3OUT ADCINB4/COMP2BIA1O12 GPIO15/TZ1/LINRXA/SPISTEB ADCINB3 GPIO 13/TZ2/SPISOMIB ADCINB2/CCMP1B/AIO 10 GPIO 14/TZ3/INTXA/SPICLKB GPIOZO/FOEP 1AICOMP1OUT GPIC24/ECAF 1/SPISINOB VSSA FNP*perpeR 引脚 (顶视图) 简介 权

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yd19910830

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值