C2837x入门指南(十四) — CLA模块
Loading the player...
将在30s后自动为您播放下一课程
这一章我们讲C2000最突出的部分 CLA 这章分为3部分 第一部分是CLA的设计目的 以及工作原理 第二部分 CLA的初始化过程 第三部分 CLA的寄存器 编程流程 调试流程 CLA是C2000非常特殊的一个协处理器 可以通过自定义的程序 和CPU并行处理程序 CLA是一个32位的浮点型内核 可以直接进行浮点数的运算 主要处理CPU中断时来不及处理的算法 分担CPU的负载率 CLA可以控制PWM HRPWM capture以及读取ADC的结果寄存器 及控制比较器等等 在F2837X产品中 CLA还可以控制 DAC SDFM SPI MCBSP GPIO以及UPP外设 让CLA控制更加灵活 还可以分担CPU通讯的负载 我们看看CLA的架构 由八个任务构成 任务1到8 任务1的优先级最高 任务8最低 CLA有自己的地址总线 和数据总线 分别和它数据和RAM通讯 还有一个和CPU交互的RAM空间 同时 CPU数据总线 还可以控制刚才提到的外设 任务方面 CPU任务结束后 还可以触发CPU的中断 以及CPU CLA任务的完成 我们看看CLA的组成结构 CLA的程序和数据空间 是LS0到4的RAM区域分配 可以设置6个量 [听不清]的RAM任务 给程序和数据 当然至少占用一个2K的RAM 分配个CLA的RAM区域 由CLA读写 CPU的控制权被降低 这是RAM分配 初始化 CPU的程序初始化的时候 进行处理 另外 还有128个word的交互区域 用于CPU和CLA的数据交互 同时 在DMA的章节提到了 PF外设必须有CLA或DMA单独控制 并且只能选择其一 当然 默认CLA控制 UDC寄存器和GPL数据 进行控制 CLA的8个任务相当于CPU的中断 每个任务都可以被多个软件或外设触发执行 但区别是 一个任务一旦执行 就不能被其他高优先级的任务打断 只能等到它执行完 才可进行新任务 这相当于CPU不支持中断嵌套的一个功能 CLA可以通过软件触发 有两种写法 第一种是通过MIFRC寄存器 写到对应位 比如CLA任务4 就是在MI FORCE.BIT.INT4-1 写上1 就被软件触发跑CLA task4的任务 还可以通过写IACK指令 也就是在汇编混合编程中 写IACk 后面写对应的数据 就可以触发相对应的任务 CLA有自己的优先级[听不清] 以及 MIFR MIER 在CLA中称为MIFR MIER 用于选择使能不同的任务 每次当一个触发源生效 就会选择相应的更高优先级的任务 载入MVECT 入口 也就是CLA的程序入口指针 到MPC 也就是程序指针地址 开始运行其中的程序 所有程序在program RAM中 读取 如果要读取数据 就需要到data memory中读取 而data RAM从MAR0MAR1读取数据 而MAR0和1是CLA的辅助寄存器 由于CLA本身是浮点内核 所以它的运算结果 都会存在MR0到3寄存器中 这张表我们简单看看CLA的寄存器 主要是 设置 状态 控制寄存器 首先是控制寄存器 主要是使能或禁止CLA的任务 以及软硬件的复位功能 CLA的RAM分配 前面提到了 这些寄存器在CPU中设置 可以把LS0到5 分配个CLA的数据和程序功能 也可以让某些区域不分配 所以这些RAM还可以还给CPU使用 也就是相对应 LS5可以分配给CPU 也可以分配给CLA CLA的8个任务 都可以选择触发源 下一页有一个触发源表 当然 可以选择软件触发 只要给每个寄存器的位写上0即可 这一页是CLA的任务触发源 可以是ADC的中断事件 PWM的中断事件 定时器 MCBSP ECAP EQEP SDLM UPP以及SPI的中断 或者事件来触发 CLA的每个任务都可以触发CPU的中断 所以 中断寄存器用于CPU中断的使能 CLA的初始化流程 比较简单 由6步组成 第一步在程序CMD中设置好CLA的下载地址 然后初始化时 把它拷贝到RAM 然后初始化CLA的RAM 接下来 初始化CLA的配置寄存器 包括使能CLA的时钟 写入函数地址 设置终端源 同时强制触发下一个CLA的 优先级任务来初始化CLA的RAM 第四步 是可选步骤 设置CLA任务来触发CLA中断 使能任务的MIER寄存器就可以 最后 设置触发任务的外设 这一页 重点提一下 如果要用CLA 就需要检查在项目的属性选项中 [听不清]是否使能了CLA 如图所示 如果是CLA0或者11 说明在编译器中使能了 CLA程序的特殊编译 CLA可以用C语言或者汇编语言编程 C语言用于对实时性要求没那么高的任务 C语言的优点就是可读性较高 编程比较方便 而汇编语言主要用于 高实时性控制的 当然对于编程方法 以及可读性会降低 CLA的数据定义和CPU不同 这里重点的是CLA不支持任何64位数据定义和运算 无论是long long或者long double型 在CLA的定义中 都会定义为32位 这一点和CPU非常不同 CLA的[听不清]定义也不一样 CLA不支持全局 或者静态变量的直接初始化 CLA的C语言文件 由.cla结尾 在.cla文件中 不能直接初始化全局变量 而是需要在.c文件中初始化好 然后在CLA中调用 或者直接使用宏定义定义好 当然可以用一个CLA任务 来运行 然后改变它的值来初始化 同时 这里重点提出的是 CLA静止函数的低轨应用 以及指针的使用 CLA不支持一些标准C的运算 比如除法去除运算 以及无符号32位整形的数据比较 但是 TI提供一整套CLA的数学库 在controlSUITE中可以找到 名字是CLA math 这个库里以适合CLA预算的方式 提供一套高效率的数学运算库 这张图我们看到 在controlSUITE中 我们提供非常多的CLA历程供用户测试 如图所示 CLA的应用 和CPU一样 它的预算会产生临时数据 所以CLA需要自己的堆栈 这里叫做sctratchpad 主要用于CLA存储临时数据 但这个区域需要在CMD中固定定义一个CLA的RAM给它 这边举例 我们把它定义在RAM L40中 当然 前提是RAM L40已经分给CLA 作为数据存储单元 这一页我们看看CAL的C语言程序举例 任务1触发为例 CLA的C语言程序 需要写在.cla的文件里 编译器才会识别 这个界面提到 对于程序 复制语句等等 都会存储于程序空间 临时变量 比如xdelay 等数组都会存储在数据空间 全局变量或者静态变量 也会存在数据空间 在程序中 使用的寄存器图文件 从LAB.H的库中调用 最后结尾的大括号[听不清] 会用mstop语句代替 表示任务的结束 CLA的初始化头文件 LAB.H主要是定义CLA的数据类型 以及调动外设的寄存器库 CLA的任务在程序中 被定义为中断类型函数 在.cla文件中 复制地址给对应CLA的寄存器 最后 我们看看最重要的CLA调试 它非常方便 简单 不需要额外的JTAG路 CPU功能一个JTAG的口 可以单步 全速运行调试 但是 CLA的单步是一个CLA的指令周期进行 不是常规和CPU一样 单个指令 单个语句的调试 有很大区别 主要分为6步 第一步 需要CLA任务在停下来的地方 加入medbugstop指令 可以用C语言或者汇编指令 第二步 在CCS调制中 连接你的CLA设备 第三步 运行CPU程序 这样 CLA会在CPU运行时 被触发 第四步 在CCS中 选择CLA 然后load code symbol 这样进入第五步 load symbol后 程序会停在刚刚设定的mdebugstop指令处 然后这个时候 我们就可以单步调试CLA程序了 但是如果有其他任务在等待 CLA会从其他任务的结尾处执行 最后 如果你不想调试CLA 那可以在连接的时候就disconnect CLA 这样CLA会在后台 自动全速运行它的程序
这一章我们讲C2000最突出的部分 CLA 这章分为3部分 第一部分是CLA的设计目的 以及工作原理 第二部分 CLA的初始化过程 第三部分 CLA的寄存器 编程流程 调试流程 CLA是C2000非常特殊的一个协处理器 可以通过自定义的程序 和CPU并行处理程序 CLA是一个32位的浮点型内核 可以直接进行浮点数的运算 主要处理CPU中断时来不及处理的算法 分担CPU的负载率 CLA可以控制PWM HRPWM capture以及读取ADC的结果寄存器 及控制比较器等等 在F2837X产品中 CLA还可以控制 DAC SDFM SPI MCBSP GPIO以及UPP外设 让CLA控制更加灵活 还可以分担CPU通讯的负载 我们看看CLA的架构 由八个任务构成 任务1到8 任务1的优先级最高 任务8最低 CLA有自己的地址总线 和数据总线 分别和它数据和RAM通讯 还有一个和CPU交互的RAM空间 同时 CPU数据总线 还可以控制刚才提到的外设 任务方面 CPU任务结束后 还可以触发CPU的中断 以及CPU CLA任务的完成 我们看看CLA的组成结构 CLA的程序和数据空间 是LS0到4的RAM区域分配 可以设置6个量 [听不清]的RAM任务 给程序和数据 当然至少占用一个2K的RAM 分配个CLA的RAM区域 由CLA读写 CPU的控制权被降低 这是RAM分配 初始化 CPU的程序初始化的时候 进行处理 另外 还有128个word的交互区域 用于CPU和CLA的数据交互 同时 在DMA的章节提到了 PF外设必须有CLA或DMA单独控制 并且只能选择其一 当然 默认CLA控制 UDC寄存器和GPL数据 进行控制 CLA的8个任务相当于CPU的中断 每个任务都可以被多个软件或外设触发执行 但区别是 一个任务一旦执行 就不能被其他高优先级的任务打断 只能等到它执行完 才可进行新任务 这相当于CPU不支持中断嵌套的一个功能 CLA可以通过软件触发 有两种写法 第一种是通过MIFRC寄存器 写到对应位 比如CLA任务4 就是在MI FORCE.BIT.INT4-1 写上1 就被软件触发跑CLA task4的任务 还可以通过写IACK指令 也就是在汇编混合编程中 写IACk 后面写对应的数据 就可以触发相对应的任务 CLA有自己的优先级[听不清] 以及 MIFR MIER 在CLA中称为MIFR MIER 用于选择使能不同的任务 每次当一个触发源生效 就会选择相应的更高优先级的任务 载入MVECT 入口 也就是CLA的程序入口指针 到MPC 也就是程序指针地址 开始运行其中的程序 所有程序在program RAM中 读取 如果要读取数据 就需要到data memory中读取 而data RAM从MAR0MAR1读取数据 而MAR0和1是CLA的辅助寄存器 由于CLA本身是浮点内核 所以它的运算结果 都会存在MR0到3寄存器中 这张表我们简单看看CLA的寄存器 主要是 设置 状态 控制寄存器 首先是控制寄存器 主要是使能或禁止CLA的任务 以及软硬件的复位功能 CLA的RAM分配 前面提到了 这些寄存器在CPU中设置 可以把LS0到5 分配个CLA的数据和程序功能 也可以让某些区域不分配 所以这些RAM还可以还给CPU使用 也就是相对应 LS5可以分配给CPU 也可以分配给CLA CLA的8个任务 都可以选择触发源 下一页有一个触发源表 当然 可以选择软件触发 只要给每个寄存器的位写上0即可 这一页是CLA的任务触发源 可以是ADC的中断事件 PWM的中断事件 定时器 MCBSP ECAP EQEP SDLM UPP以及SPI的中断 或者事件来触发 CLA的每个任务都可以触发CPU的中断 所以 中断寄存器用于CPU中断的使能 CLA的初始化流程 比较简单 由6步组成 第一步在程序CMD中设置好CLA的下载地址 然后初始化时 把它拷贝到RAM 然后初始化CLA的RAM 接下来 初始化CLA的配置寄存器 包括使能CLA的时钟 写入函数地址 设置终端源 同时强制触发下一个CLA的 优先级任务来初始化CLA的RAM 第四步 是可选步骤 设置CLA任务来触发CLA中断 使能任务的MIER寄存器就可以 最后 设置触发任务的外设 这一页 重点提一下 如果要用CLA 就需要检查在项目的属性选项中 [听不清]是否使能了CLA 如图所示 如果是CLA0或者11 说明在编译器中使能了 CLA程序的特殊编译 CLA可以用C语言或者汇编语言编程 C语言用于对实时性要求没那么高的任务 C语言的优点就是可读性较高 编程比较方便 而汇编语言主要用于 高实时性控制的 当然对于编程方法 以及可读性会降低 CLA的数据定义和CPU不同 这里重点的是CLA不支持任何64位数据定义和运算 无论是long long或者long double型 在CLA的定义中 都会定义为32位 这一点和CPU非常不同 CLA的[听不清]定义也不一样 CLA不支持全局 或者静态变量的直接初始化 CLA的C语言文件 由.cla结尾 在.cla文件中 不能直接初始化全局变量 而是需要在.c文件中初始化好 然后在CLA中调用 或者直接使用宏定义定义好 当然可以用一个CLA任务 来运行 然后改变它的值来初始化 同时 这里重点提出的是 CLA静止函数的低轨应用 以及指针的使用 CLA不支持一些标准C的运算 比如除法去除运算 以及无符号32位整形的数据比较 但是 TI提供一整套CLA的数学库 在controlSUITE中可以找到 名字是CLA math 这个库里以适合CLA预算的方式 提供一套高效率的数学运算库 这张图我们看到 在controlSUITE中 我们提供非常多的CLA历程供用户测试 如图所示 CLA的应用 和CPU一样 它的预算会产生临时数据 所以CLA需要自己的堆栈 这里叫做sctratchpad 主要用于CLA存储临时数据 但这个区域需要在CMD中固定定义一个CLA的RAM给它 这边举例 我们把它定义在RAM L40中 当然 前提是RAM L40已经分给CLA 作为数据存储单元 这一页我们看看CAL的C语言程序举例 任务1触发为例 CLA的C语言程序 需要写在.cla的文件里 编译器才会识别 这个界面提到 对于程序 复制语句等等 都会存储于程序空间 临时变量 比如xdelay 等数组都会存储在数据空间 全局变量或者静态变量 也会存在数据空间 在程序中 使用的寄存器图文件 从LAB.H的库中调用 最后结尾的大括号[听不清] 会用mstop语句代替 表示任务的结束 CLA的初始化头文件 LAB.H主要是定义CLA的数据类型 以及调动外设的寄存器库 CLA的任务在程序中 被定义为中断类型函数 在.cla文件中 复制地址给对应CLA的寄存器 最后 我们看看最重要的CLA调试 它非常方便 简单 不需要额外的JTAG路 CPU功能一个JTAG的口 可以单步 全速运行调试 但是 CLA的单步是一个CLA的指令周期进行 不是常规和CPU一样 单个指令 单个语句的调试 有很大区别 主要分为6步 第一步 需要CLA任务在停下来的地方 加入medbugstop指令 可以用C语言或者汇编指令 第二步 在CCS调制中 连接你的CLA设备 第三步 运行CPU程序 这样 CLA会在CPU运行时 被触发 第四步 在CCS中 选择CLA 然后load code symbol 这样进入第五步 load symbol后 程序会停在刚刚设定的mdebugstop指令处 然后这个时候 我们就可以单步调试CLA程序了 但是如果有其他任务在等待 CLA会从其他任务的结尾处执行 最后 如果你不想调试CLA 那可以在连接的时候就disconnect CLA 这样CLA会在后台 自动全速运行它的程序
这一章我们讲C2000最突出的部分
CLA
这章分为3部分 第一部分是CLA的设计目的
以及工作原理
第二部分 CLA的初始化过程
第三部分 CLA的寄存器 编程流程 调试流程
CLA是C2000非常特殊的一个协处理器
可以通过自定义的程序
和CPU并行处理程序 CLA是一个32位的浮点型内核
可以直接进行浮点数的运算
主要处理CPU中断时来不及处理的算法
分担CPU的负载率
CLA可以控制PWM
HRPWM capture以及读取ADC的结果寄存器
及控制比较器等等
在F2837X产品中 CLA还可以控制
DAC SDFM SPI MCBSP GPIO以及UPP外设
让CLA控制更加灵活
还可以分担CPU通讯的负载
我们看看CLA的架构 由八个任务构成
任务1到8 任务1的优先级最高 任务8最低
CLA有自己的地址总线 和数据总线
分别和它数据和RAM通讯
还有一个和CPU交互的RAM空间
同时 CPU数据总线 还可以控制刚才提到的外设
任务方面 CPU任务结束后 还可以触发CPU的中断
以及CPU CLA任务的完成
我们看看CLA的组成结构
CLA的程序和数据空间 是LS0到4的RAM区域分配
可以设置6个量 [听不清]的RAM任务
给程序和数据
当然至少占用一个2K的RAM
分配个CLA的RAM区域 由CLA读写
CPU的控制权被降低
这是RAM分配 初始化 CPU的程序初始化的时候
进行处理
另外 还有128个word的交互区域
用于CPU和CLA的数据交互
同时 在DMA的章节提到了
PF外设必须有CLA或DMA单独控制
并且只能选择其一
当然 默认CLA控制
UDC寄存器和GPL数据
进行控制
CLA的8个任务相当于CPU的中断
每个任务都可以被多个软件或外设触发执行
但区别是 一个任务一旦执行 就不能被其他高优先级的任务打断
只能等到它执行完
才可进行新任务 这相当于CPU不支持中断嵌套的一个功能
CLA可以通过软件触发
有两种写法 第一种是通过MIFRC寄存器
写到对应位 比如CLA任务4 就是在MI FORCE.BIT.INT4-1
写上1 就被软件触发跑CLA task4的任务
还可以通过写IACK指令
也就是在汇编混合编程中
写IACk 后面写对应的数据
就可以触发相对应的任务
CLA有自己的优先级[听不清]
以及 MIFR MIER
在CLA中称为MIFR MIER
用于选择使能不同的任务
每次当一个触发源生效
就会选择相应的更高优先级的任务 载入MVECT
入口 也就是CLA的程序入口指针
到MPC 也就是程序指针地址
开始运行其中的程序
所有程序在program RAM中
读取 如果要读取数据
就需要到data memory中读取
而data RAM从MAR0MAR1读取数据
而MAR0和1是CLA的辅助寄存器
由于CLA本身是浮点内核 所以它的运算结果
都会存在MR0到3寄存器中
这张表我们简单看看CLA的寄存器
主要是 设置 状态 控制寄存器
首先是控制寄存器
主要是使能或禁止CLA的任务
以及软硬件的复位功能
CLA的RAM分配 前面提到了
这些寄存器在CPU中设置 可以把LS0到5
分配个CLA的数据和程序功能
也可以让某些区域不分配
所以这些RAM还可以还给CPU使用
也就是相对应 LS5可以分配给CPU
也可以分配给CLA
CLA的8个任务 都可以选择触发源
下一页有一个触发源表
当然 可以选择软件触发
只要给每个寄存器的位写上0即可
这一页是CLA的任务触发源
可以是ADC的中断事件
PWM的中断事件 定时器 MCBSP
ECAP EQEP SDLM
UPP以及SPI的中断
或者事件来触发
CLA的每个任务都可以触发CPU的中断
所以 中断寄存器用于CPU中断的使能
CLA的初始化流程 比较简单
由6步组成 第一步在程序CMD中设置好CLA的下载地址
然后初始化时 把它拷贝到RAM
然后初始化CLA的RAM
接下来 初始化CLA的配置寄存器
包括使能CLA的时钟
写入函数地址 设置终端源 同时强制触发下一个CLA的
优先级任务来初始化CLA的RAM
第四步 是可选步骤
设置CLA任务来触发CLA中断
使能任务的MIER寄存器就可以
最后 设置触发任务的外设
这一页 重点提一下 如果要用CLA
就需要检查在项目的属性选项中
[听不清]是否使能了CLA
如图所示
如果是CLA0或者11 说明在编译器中使能了
CLA程序的特殊编译
CLA可以用C语言或者汇编语言编程
C语言用于对实时性要求没那么高的任务
C语言的优点就是可读性较高
编程比较方便 而汇编语言主要用于
高实时性控制的 当然对于编程方法
以及可读性会降低
CLA的数据定义和CPU不同
这里重点的是CLA不支持任何64位数据定义和运算
无论是long long或者long double型
在CLA的定义中
都会定义为32位 这一点和CPU非常不同
CLA的[听不清]定义也不一样
CLA不支持全局 或者静态变量的直接初始化
CLA的C语言文件 由.cla结尾
在.cla文件中 不能直接初始化全局变量
而是需要在.c文件中初始化好
然后在CLA中调用 或者直接使用宏定义定义好
当然可以用一个CLA任务 来运行
然后改变它的值来初始化
同时 这里重点提出的是 CLA静止函数的低轨应用
以及指针的使用
CLA不支持一些标准C的运算 比如除法去除运算
以及无符号32位整形的数据比较
但是 TI提供一整套CLA的数学库
在controlSUITE中可以找到 名字是CLA math
这个库里以适合CLA预算的方式 提供一套高效率的数学运算库
这张图我们看到 在controlSUITE中
我们提供非常多的CLA历程供用户测试
如图所示
CLA的应用 和CPU一样
它的预算会产生临时数据 所以CLA需要自己的堆栈
这里叫做sctratchpad
主要用于CLA存储临时数据
但这个区域需要在CMD中固定定义一个CLA的RAM给它
这边举例 我们把它定义在RAM L40中
当然 前提是RAM L40已经分给CLA
作为数据存储单元
这一页我们看看CAL的C语言程序举例
任务1触发为例
CLA的C语言程序 需要写在.cla的文件里
编译器才会识别
这个界面提到 对于程序 复制语句等等
都会存储于程序空间 临时变量 比如xdelay
等数组都会存储在数据空间
全局变量或者静态变量 也会存在数据空间
在程序中 使用的寄存器图文件
从LAB.H的库中调用
最后结尾的大括号[听不清]
会用mstop语句代替 表示任务的结束
CLA的初始化头文件 LAB.H主要是定义CLA的数据类型
以及调动外设的寄存器库
CLA的任务在程序中 被定义为中断类型函数
在.cla文件中 复制地址给对应CLA的寄存器
最后 我们看看最重要的CLA调试
它非常方便 简单
不需要额外的JTAG路
CPU功能一个JTAG的口
可以单步 全速运行调试
但是 CLA的单步是一个CLA的指令周期进行
不是常规和CPU一样 单个指令 单个语句的调试
有很大区别
主要分为6步
第一步 需要CLA任务在停下来的地方 加入medbugstop指令
可以用C语言或者汇编指令
第二步 在CCS调制中 连接你的CLA设备
第三步 运行CPU程序
这样 CLA会在CPU运行时
被触发
第四步 在CCS中 选择CLA 然后load code symbol
这样进入第五步
load symbol后 程序会停在刚刚设定的mdebugstop指令处
然后这个时候 我们就可以单步调试CLA程序了
但是如果有其他任务在等待
CLA会从其他任务的结尾处执行
最后 如果你不想调试CLA
那可以在连接的时候就disconnect CLA
这样CLA会在后台 自动全速运行它的程序
这一章我们讲C2000最突出的部分 CLA 这章分为3部分 第一部分是CLA的设计目的 以及工作原理 第二部分 CLA的初始化过程 第三部分 CLA的寄存器 编程流程 调试流程 CLA是C2000非常特殊的一个协处理器 可以通过自定义的程序 和CPU并行处理程序 CLA是一个32位的浮点型内核 可以直接进行浮点数的运算 主要处理CPU中断时来不及处理的算法 分担CPU的负载率 CLA可以控制PWM HRPWM capture以及读取ADC的结果寄存器 及控制比较器等等 在F2837X产品中 CLA还可以控制 DAC SDFM SPI MCBSP GPIO以及UPP外设 让CLA控制更加灵活 还可以分担CPU通讯的负载 我们看看CLA的架构 由八个任务构成 任务1到8 任务1的优先级最高 任务8最低 CLA有自己的地址总线 和数据总线 分别和它数据和RAM通讯 还有一个和CPU交互的RAM空间 同时 CPU数据总线 还可以控制刚才提到的外设 任务方面 CPU任务结束后 还可以触发CPU的中断 以及CPU CLA任务的完成 我们看看CLA的组成结构 CLA的程序和数据空间 是LS0到4的RAM区域分配 可以设置6个量 [听不清]的RAM任务 给程序和数据 当然至少占用一个2K的RAM 分配个CLA的RAM区域 由CLA读写 CPU的控制权被降低 这是RAM分配 初始化 CPU的程序初始化的时候 进行处理 另外 还有128个word的交互区域 用于CPU和CLA的数据交互 同时 在DMA的章节提到了 PF外设必须有CLA或DMA单独控制 并且只能选择其一 当然 默认CLA控制 UDC寄存器和GPL数据 进行控制 CLA的8个任务相当于CPU的中断 每个任务都可以被多个软件或外设触发执行 但区别是 一个任务一旦执行 就不能被其他高优先级的任务打断 只能等到它执行完 才可进行新任务 这相当于CPU不支持中断嵌套的一个功能 CLA可以通过软件触发 有两种写法 第一种是通过MIFRC寄存器 写到对应位 比如CLA任务4 就是在MI FORCE.BIT.INT4-1 写上1 就被软件触发跑CLA task4的任务 还可以通过写IACK指令 也就是在汇编混合编程中 写IACk 后面写对应的数据 就可以触发相对应的任务 CLA有自己的优先级[听不清] 以及 MIFR MIER 在CLA中称为MIFR MIER 用于选择使能不同的任务 每次当一个触发源生效 就会选择相应的更高优先级的任务 载入MVECT 入口 也就是CLA的程序入口指针 到MPC 也就是程序指针地址 开始运行其中的程序 所有程序在program RAM中 读取 如果要读取数据 就需要到data memory中读取 而data RAM从MAR0MAR1读取数据 而MAR0和1是CLA的辅助寄存器 由于CLA本身是浮点内核 所以它的运算结果 都会存在MR0到3寄存器中 这张表我们简单看看CLA的寄存器 主要是 设置 状态 控制寄存器 首先是控制寄存器 主要是使能或禁止CLA的任务 以及软硬件的复位功能 CLA的RAM分配 前面提到了 这些寄存器在CPU中设置 可以把LS0到5 分配个CLA的数据和程序功能 也可以让某些区域不分配 所以这些RAM还可以还给CPU使用 也就是相对应 LS5可以分配给CPU 也可以分配给CLA CLA的8个任务 都可以选择触发源 下一页有一个触发源表 当然 可以选择软件触发 只要给每个寄存器的位写上0即可 这一页是CLA的任务触发源 可以是ADC的中断事件 PWM的中断事件 定时器 MCBSP ECAP EQEP SDLM UPP以及SPI的中断 或者事件来触发 CLA的每个任务都可以触发CPU的中断 所以 中断寄存器用于CPU中断的使能 CLA的初始化流程 比较简单 由6步组成 第一步在程序CMD中设置好CLA的下载地址 然后初始化时 把它拷贝到RAM 然后初始化CLA的RAM 接下来 初始化CLA的配置寄存器 包括使能CLA的时钟 写入函数地址 设置终端源 同时强制触发下一个CLA的 优先级任务来初始化CLA的RAM 第四步 是可选步骤 设置CLA任务来触发CLA中断 使能任务的MIER寄存器就可以 最后 设置触发任务的外设 这一页 重点提一下 如果要用CLA 就需要检查在项目的属性选项中 [听不清]是否使能了CLA 如图所示 如果是CLA0或者11 说明在编译器中使能了 CLA程序的特殊编译 CLA可以用C语言或者汇编语言编程 C语言用于对实时性要求没那么高的任务 C语言的优点就是可读性较高 编程比较方便 而汇编语言主要用于 高实时性控制的 当然对于编程方法 以及可读性会降低 CLA的数据定义和CPU不同 这里重点的是CLA不支持任何64位数据定义和运算 无论是long long或者long double型 在CLA的定义中 都会定义为32位 这一点和CPU非常不同 CLA的[听不清]定义也不一样 CLA不支持全局 或者静态变量的直接初始化 CLA的C语言文件 由.cla结尾 在.cla文件中 不能直接初始化全局变量 而是需要在.c文件中初始化好 然后在CLA中调用 或者直接使用宏定义定义好 当然可以用一个CLA任务 来运行 然后改变它的值来初始化 同时 这里重点提出的是 CLA静止函数的低轨应用 以及指针的使用 CLA不支持一些标准C的运算 比如除法去除运算 以及无符号32位整形的数据比较 但是 TI提供一整套CLA的数学库 在controlSUITE中可以找到 名字是CLA math 这个库里以适合CLA预算的方式 提供一套高效率的数学运算库 这张图我们看到 在controlSUITE中 我们提供非常多的CLA历程供用户测试 如图所示 CLA的应用 和CPU一样 它的预算会产生临时数据 所以CLA需要自己的堆栈 这里叫做sctratchpad 主要用于CLA存储临时数据 但这个区域需要在CMD中固定定义一个CLA的RAM给它 这边举例 我们把它定义在RAM L40中 当然 前提是RAM L40已经分给CLA 作为数据存储单元 这一页我们看看CAL的C语言程序举例 任务1触发为例 CLA的C语言程序 需要写在.cla的文件里 编译器才会识别 这个界面提到 对于程序 复制语句等等 都会存储于程序空间 临时变量 比如xdelay 等数组都会存储在数据空间 全局变量或者静态变量 也会存在数据空间 在程序中 使用的寄存器图文件 从LAB.H的库中调用 最后结尾的大括号[听不清] 会用mstop语句代替 表示任务的结束 CLA的初始化头文件 LAB.H主要是定义CLA的数据类型 以及调动外设的寄存器库 CLA的任务在程序中 被定义为中断类型函数 在.cla文件中 复制地址给对应CLA的寄存器 最后 我们看看最重要的CLA调试 它非常方便 简单 不需要额外的JTAG路 CPU功能一个JTAG的口 可以单步 全速运行调试 但是 CLA的单步是一个CLA的指令周期进行 不是常规和CPU一样 单个指令 单个语句的调试 有很大区别 主要分为6步 第一步 需要CLA任务在停下来的地方 加入medbugstop指令 可以用C语言或者汇编指令 第二步 在CCS调制中 连接你的CLA设备 第三步 运行CPU程序 这样 CLA会在CPU运行时 被触发 第四步 在CCS中 选择CLA 然后load code symbol 这样进入第五步 load symbol后 程序会停在刚刚设定的mdebugstop指令处 然后这个时候 我们就可以单步调试CLA程序了 但是如果有其他任务在等待 CLA会从其他任务的结尾处执行 最后 如果你不想调试CLA 那可以在连接的时候就disconnect CLA 这样CLA会在后台 自动全速运行它的程序
这一章我们讲C2000最突出的部分
CLA
这章分为3部分 第一部分是CLA的设计目的
以及工作原理
第二部分 CLA的初始化过程
第三部分 CLA的寄存器 编程流程 调试流程
CLA是C2000非常特殊的一个协处理器
可以通过自定义的程序
和CPU并行处理程序 CLA是一个32位的浮点型内核
可以直接进行浮点数的运算
主要处理CPU中断时来不及处理的算法
分担CPU的负载率
CLA可以控制PWM
HRPWM capture以及读取ADC的结果寄存器
及控制比较器等等
在F2837X产品中 CLA还可以控制
DAC SDFM SPI MCBSP GPIO以及UPP外设
让CLA控制更加灵活
还可以分担CPU通讯的负载
我们看看CLA的架构 由八个任务构成
任务1到8 任务1的优先级最高 任务8最低
CLA有自己的地址总线 和数据总线
分别和它数据和RAM通讯
还有一个和CPU交互的RAM空间
同时 CPU数据总线 还可以控制刚才提到的外设
任务方面 CPU任务结束后 还可以触发CPU的中断
以及CPU CLA任务的完成
我们看看CLA的组成结构
CLA的程序和数据空间 是LS0到4的RAM区域分配
可以设置6个量 [听不清]的RAM任务
给程序和数据
当然至少占用一个2K的RAM
分配个CLA的RAM区域 由CLA读写
CPU的控制权被降低
这是RAM分配 初始化 CPU的程序初始化的时候
进行处理
另外 还有128个word的交互区域
用于CPU和CLA的数据交互
同时 在DMA的章节提到了
PF外设必须有CLA或DMA单独控制
并且只能选择其一
当然 默认CLA控制
UDC寄存器和GPL数据
进行控制
CLA的8个任务相当于CPU的中断
每个任务都可以被多个软件或外设触发执行
但区别是 一个任务一旦执行 就不能被其他高优先级的任务打断
只能等到它执行完
才可进行新任务 这相当于CPU不支持中断嵌套的一个功能
CLA可以通过软件触发
有两种写法 第一种是通过MIFRC寄存器
写到对应位 比如CLA任务4 就是在MI FORCE.BIT.INT4-1
写上1 就被软件触发跑CLA task4的任务
还可以通过写IACK指令
也就是在汇编混合编程中
写IACk 后面写对应的数据
就可以触发相对应的任务
CLA有自己的优先级[听不清]
以及 MIFR MIER
在CLA中称为MIFR MIER
用于选择使能不同的任务
每次当一个触发源生效
就会选择相应的更高优先级的任务 载入MVECT
入口 也就是CLA的程序入口指针
到MPC 也就是程序指针地址
开始运行其中的程序
所有程序在program RAM中
读取 如果要读取数据
就需要到data memory中读取
而data RAM从MAR0MAR1读取数据
而MAR0和1是CLA的辅助寄存器
由于CLA本身是浮点内核 所以它的运算结果
都会存在MR0到3寄存器中
这张表我们简单看看CLA的寄存器
主要是 设置 状态 控制寄存器
首先是控制寄存器
主要是使能或禁止CLA的任务
以及软硬件的复位功能
CLA的RAM分配 前面提到了
这些寄存器在CPU中设置 可以把LS0到5
分配个CLA的数据和程序功能
也可以让某些区域不分配
所以这些RAM还可以还给CPU使用
也就是相对应 LS5可以分配给CPU
也可以分配给CLA
CLA的8个任务 都可以选择触发源
下一页有一个触发源表
当然 可以选择软件触发
只要给每个寄存器的位写上0即可
这一页是CLA的任务触发源
可以是ADC的中断事件
PWM的中断事件 定时器 MCBSP
ECAP EQEP SDLM
UPP以及SPI的中断
或者事件来触发
CLA的每个任务都可以触发CPU的中断
所以 中断寄存器用于CPU中断的使能
CLA的初始化流程 比较简单
由6步组成 第一步在程序CMD中设置好CLA的下载地址
然后初始化时 把它拷贝到RAM
然后初始化CLA的RAM
接下来 初始化CLA的配置寄存器
包括使能CLA的时钟
写入函数地址 设置终端源 同时强制触发下一个CLA的
优先级任务来初始化CLA的RAM
第四步 是可选步骤
设置CLA任务来触发CLA中断
使能任务的MIER寄存器就可以
最后 设置触发任务的外设
这一页 重点提一下 如果要用CLA
就需要检查在项目的属性选项中
[听不清]是否使能了CLA
如图所示
如果是CLA0或者11 说明在编译器中使能了
CLA程序的特殊编译
CLA可以用C语言或者汇编语言编程
C语言用于对实时性要求没那么高的任务
C语言的优点就是可读性较高
编程比较方便 而汇编语言主要用于
高实时性控制的 当然对于编程方法
以及可读性会降低
CLA的数据定义和CPU不同
这里重点的是CLA不支持任何64位数据定义和运算
无论是long long或者long double型
在CLA的定义中
都会定义为32位 这一点和CPU非常不同
CLA的[听不清]定义也不一样
CLA不支持全局 或者静态变量的直接初始化
CLA的C语言文件 由.cla结尾
在.cla文件中 不能直接初始化全局变量
而是需要在.c文件中初始化好
然后在CLA中调用 或者直接使用宏定义定义好
当然可以用一个CLA任务 来运行
然后改变它的值来初始化
同时 这里重点提出的是 CLA静止函数的低轨应用
以及指针的使用
CLA不支持一些标准C的运算 比如除法去除运算
以及无符号32位整形的数据比较
但是 TI提供一整套CLA的数学库
在controlSUITE中可以找到 名字是CLA math
这个库里以适合CLA预算的方式 提供一套高效率的数学运算库
这张图我们看到 在controlSUITE中
我们提供非常多的CLA历程供用户测试
如图所示
CLA的应用 和CPU一样
它的预算会产生临时数据 所以CLA需要自己的堆栈
这里叫做sctratchpad
主要用于CLA存储临时数据
但这个区域需要在CMD中固定定义一个CLA的RAM给它
这边举例 我们把它定义在RAM L40中
当然 前提是RAM L40已经分给CLA
作为数据存储单元
这一页我们看看CAL的C语言程序举例
任务1触发为例
CLA的C语言程序 需要写在.cla的文件里
编译器才会识别
这个界面提到 对于程序 复制语句等等
都会存储于程序空间 临时变量 比如xdelay
等数组都会存储在数据空间
全局变量或者静态变量 也会存在数据空间
在程序中 使用的寄存器图文件
从LAB.H的库中调用
最后结尾的大括号[听不清]
会用mstop语句代替 表示任务的结束
CLA的初始化头文件 LAB.H主要是定义CLA的数据类型
以及调动外设的寄存器库
CLA的任务在程序中 被定义为中断类型函数
在.cla文件中 复制地址给对应CLA的寄存器
最后 我们看看最重要的CLA调试
它非常方便 简单
不需要额外的JTAG路
CPU功能一个JTAG的口
可以单步 全速运行调试
但是 CLA的单步是一个CLA的指令周期进行
不是常规和CPU一样 单个指令 单个语句的调试
有很大区别
主要分为6步
第一步 需要CLA任务在停下来的地方 加入medbugstop指令
可以用C语言或者汇编指令
第二步 在CCS调制中 连接你的CLA设备
第三步 运行CPU程序
这样 CLA会在CPU运行时
被触发
第四步 在CCS中 选择CLA 然后load code symbol
这样进入第五步
load symbol后 程序会停在刚刚设定的mdebugstop指令处
然后这个时候 我们就可以单步调试CLA程序了
但是如果有其他任务在等待
CLA会从其他任务的结尾处执行
最后 如果你不想调试CLA
那可以在连接的时候就disconnect CLA
这样CLA会在后台 自动全速运行它的程序
视频报错
手机看
扫码用手机观看
收藏本课程
视频简介
C2837x入门指南(十四) — CLA模块
所属课程:C2837x入门指南
发布时间:2016.06.06
视频集数:28
本节视频时长:00:12:47
C2837x概述;芯片架构; 开发环境;外设寄存器操作;复位和中断;系统初始化;模拟子系统 ADC DAC CMP SDFM;控制类外设PWM CAP QEP。
//=$v1;?>
//=$v['id']?>//=$v['down_category']?>//=$v['link']?>//=$v['is_dl']?>//=$v['link']?>//=$v['name']?>//=$v['name']?>
//=$v['id']?>//=$v['down_category']?>//=$v['path']?>//=$v['is_dl']?>//=$v['path']?>//=$v['name']?>//=$v['name']?>
////=count($lesson['bbsinfo'])?>
//=$elink?>//=$elink?>//=$tags[0]?>//=$tags[0]?>//=$elink?>//= $elink?>//=$tags[1]?>//=$tags[1]?>
//=$lesson['bbs'];?>
//=count($lesson['bbsinfo'])?>