TI论坛
直播中

李允麒

7年用户 258经验值
私信 关注
[问答]

请问CCSV5里面的clock是不是不够精确?程序执行时间误差应该怎么办?

CCSV5里面的 clock是不是不够精确?我编了一个程序:
for(frequency=1000;frequency<100000;frequency++)   .................1
[   Calculate_Control_Word(frequency);                          ...................2
if(frequency==99999)                                      ..................3
[frequency=1000;]
]
我编译完下载到28335的RAM中去后,enable 了clock。发现 :
从程序1到程序2,要12个机器周期;
从程序2到程序3,要279个机器周期;
从程序3到程序1,要7个机器周期。
后来在这段程序没有变的情况下,又把.out文件重新下载到RAM中,发现
从程序1到程序2,要20个机器周期;
从程序2到程序3,要282个机器周期;
从程序3到程序1,要1200个机器周期。
请问这是怎么回事?这也相差太大了。每次重新加载后,有时正常,有时不正常。
个人觉得受到计算机内存指令调用方面的影响,运用timer,CCS程序里的CLOCK方式都不准确吧?
唯独GPIO口输出切换程序是在DSP
内部执行,不牵涉到计算机内存环境改变的问题,应该最准确,但是不是很方便。
因为我观察EPWM的couter计数时也发现
同样一个程序,每次执行完后,EPwm1Regs.TBCTR中变化的值是不一样的。

用程序把timer里的值或EPWM里面couter的值显示出来,和用CCS里View的方式显示出来都应该一样。只要经过计算机读出来
显示在CCS里面,就可能会不准确。最起码会出现不能保证每次加载后查看的机器数不尽相同。

希望指正!

回帖(5)

朱虹博

2018-10-31 15:33:08
如这里谈到,估计是在此期间发生了中断,程序中断跳转了。
“从程序3到程序1,要1200个机器周期。
www.deyisupport.com/.../10782.aspx
举报

李允麒

2018-10-31 15:46:12
引用: Emily1225 发表于 2018-10-31 16:33
如这里谈到,估计是在此期间发生了中断,程序中断跳转了。
“从程序3到程序1,要1200个机器周期。
www.deyisupport.com/.../10782.aspx

没有用中断,这个我可以肯定,且我做过EPWM里面的TBCTR的观察,确实也是不太准确的。
同样的out文件有时加载后运行的时间是准确的,有时是不准确的,像我帖子中说的情况。上次
我发过一个帖子说过TBCTR执行时间不一样的问题。里面回帖说,是RAM中运行时间的问题。
举报

朱虹博

2018-10-31 15:58:49
引用: Lindalwj 发表于 2018-10-31 16:46
没有用中断,这个我可以肯定,且我做过EPWM里面的TBCTR的观察,确实也是不太准确的。
同样的out文件有时加载后运行的时间是准确的,有时是不准确的,像我帖子中说的情况。上次
我发过一个帖子说过TBCTR执行时间不一样的问题。里面回帖说,是RAM中运行时间的问题。 ...

当epwm的时钟信号=system clock的时候EPWM的TBCTR和cputimer都是一个系统时钟周期变化一下,是最准确的,不准确的可能是实验本身。
程序在RAM中运行和在FLASH中运行不一样。
bbs.eeworld.com.cn/thread-319913-1-1.html
还是就事论事吧,楼主把下面这个程序project发上来看看,我看看做出来是否也有问题。
for(frequency=1000;frequency<100000;frequency++)   .................1
[   Calculate_Control_Word(frequency);                          ...................2
if(frequency==99999)                                      ..................3
[frequency=1000;]
]
举报

朱虹博

2018-10-31 16:10:38
引用: Emily1225 发表于 2018-10-31 16:59
当epwm的时钟信号=system clock的时候EPWM的TBCTR和cputimer都是一个系统时钟周期变化一下,是最准确的,不准确的可能是实验本身。
程序在RAM中运行和在FLASH中运行不一样。
bbs.eeworld.com.cn/thread-319913-1-1.html

我估计是楼主,做实验的方法错了。楼主测试前先关闭总中断,把相关变量都初始化,用cputimer测试看看:
 DINT;
 CpuTimer0Regs.TCR.bit.TSS = 0;
.....
.....
....
   CpuTimer0Regs.TCR.bit.TSS = 1;
举报

更多回帖

发帖
×
20
完善资料,
赚取积分