2056|1

1万

帖子

33

资源

裸片初长成(高级)

【C2000的使用经验】CLA与C28各用其长。

C2000 CPU,部分器件具有控制率加速器,它实际上相当于一个浮点CPU,运算能力超强。而C28是定点(或有浮点运算)处理器。



C28 CPU作主器件,CLA作从器件。CPU启动CLA时,不象CPU执行中断指令那样,需要十多个时钟周期后才可以执行中断功能的操作,C28 CPU执行中断时还需要作相应的入栈出栈操作。而CPU启动CLA时,是立即执行的,没有延时问题。



对于运算中经常遇到处理浮点数的运算,交给CLA去做是最恰当的事了。



过去,曾在网上下载了PID运算的程序段,是这样的:



double PIDCalc( PID *pp, double NextPoint )
{
Error = pp->SetPoint - NextPoint; // 偏差
pp->SumError += Error; // 积分
dError = pp->LastError - pp->PrevError; // 当前微分
pp->PrevError = pp->LastError; pp->LastError = Error;
return (pp->Proportion * Error // 比例项
+ pp->Integral * pp->SumError // 积分项
+ pp->Derivative * dError // 微分项
}






当然了,开始时是将它交给CPU在中断中处理的。调试程序中发现,在执行它时,竟然达千把个时钟周期,后来分析,主要存在两个方面的问题:



一是C28处理了浮点数;二是语句写法(如return中过于繁杂使用编译后的程序反复调用其它过程)不恰当。



后来改为CLA来处理,并使用CLA的并行运算指令,使用程序仅用11个时钟:



PID .macro
    MI16TOF32  MR1, SetValue
    MI16TOF32  MR0, AdcReg              
    MSUBF32    MR0, MR1, MR0     
    ||MMOV32   MR1,Error1   
    MSUBF32       MR3, MR0, MR1
    ||MMOV32   MR2,Error2
    MSUBF32       MR2, MR1, MR2
    ||MMOV32   Error2,MR1
    MSUBF32       MR2, MR3, MR2
    ||MMOV32   MR1,Kd
    MMPYF32       MR2, MR1, MR2
    ||MMOV32   MR1,Ki
    MMPYF32       MR1, MR1, MR0
    ||MMOV32   Error1,MR0
    MADDF32       MR0, MR1, MR2
    ||MMOV32   MR1,Kp
    MMPYF32       MR3, MR1, MR3
    MADDF32       MR0, MR3, MR0
    .endm












回复

61

帖子

0

资源

一粒金砂(中级)

坐下沙发,学习

回复
您需要登录后才可以回帖 登录 | 注册

关闭
站长推荐上一条 1/7 下一条

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区知春路23号集成电路设计园量子银座1305 电话:(010)82350740 邮编:100191

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2020 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表