TI中文支持网
TI专业的中文技术问题搜集分享网站

再次发问:280049 CLA运行速度比主CPU慢很多

测试280049的CLA功能,将正常运行在CPU的ISR()函数由的 CLATASK1()调用。

CPU工程:EPWM1 ZERO产生周期10us的中断调用ISR()函数。ISR()内部开始和结束位置利用GPIO做测试信号,利用示波器检测GPIO信号。主CPU下运行ISR()只需要6us。

CLA工程:EPWM1 ZERO产生周期10us的中断调用CLATASK1(),CLATASK1内部调用ISR(),ISR()内部开始和结束位置利用GPIO做测试信号,利用示波器检测GPIO信号。发现10us不能完成ISR()。

测试:减少ISR()内代码至如下:只有两行读取AD采样值

#pragma FUNC_ALWAYS_INLINE(CLALoopCtrlISR)
inline void CLALoopCtrlISR()
{ TEST3_SET();//GPIO TEST
stClaToCpuPara.iVoutADSample = AdccResultRegs.ADCRESULT0; stClaToCpuPara.iPriCurADSample = AdcbResultRegs.ADCRESULT0;
TEST3_CLR();//GPIO TEST
// Clear INT Flag
EPwm1Regs.ETCLR.bit.INT = 1;
}

示波器检测GPIO信号,CPU执行时间为72ns,CLA执行时间为122ns。

请问我的CLA是不是什么地方没有配置正确,导致执行速度慢。本人英语水平很菜,所以只能在中国平台发问,大师们海涵,我也相信中国的大师能解决我的疑惑。

盼回复,谢谢!我也会积极的做测试。如需要其他信息,请告知。

Green Deng:我认为通过测试GPIO口来测试CLA运行时间不太严谨。可以这样操作:
可以采用一个timer,然后使用软件触发CLA工作,触发CLA开始工作后,timer开始计时,并且在CLA工作完毕后,置起一个标志位,而主函数通过循环检测此标志位来判断何时停止timer从而得到当前计数值后计算CLA运算时间
此外,CCS也提供clock功能,但是本人没有太多使用过,不确定能否用来做此项测试。

测试280049的CLA功能,将正常运行在CPU的ISR()函数由的 CLATASK1()调用。

CPU工程:EPWM1 ZERO产生周期10us的中断调用ISR()函数。ISR()内部开始和结束位置利用GPIO做测试信号,利用示波器检测GPIO信号。主CPU下运行ISR()只需要6us。

CLA工程:EPWM1 ZERO产生周期10us的中断调用CLATASK1(),CLATASK1内部调用ISR(),ISR()内部开始和结束位置利用GPIO做测试信号,利用示波器检测GPIO信号。发现10us不能完成ISR()。

测试:减少ISR()内代码至如下:只有两行读取AD采样值

#pragma FUNC_ALWAYS_INLINE(CLALoopCtrlISR)
inline void CLALoopCtrlISR()
{ TEST3_SET();//GPIO TEST
stClaToCpuPara.iVoutADSample = AdccResultRegs.ADCRESULT0; stClaToCpuPara.iPriCurADSample = AdcbResultRegs.ADCRESULT0;
TEST3_CLR();//GPIO TEST
// Clear INT Flag
EPwm1Regs.ETCLR.bit.INT = 1;
}

示波器检测GPIO信号,CPU执行时间为72ns,CLA执行时间为122ns。

请问我的CLA是不是什么地方没有配置正确,导致执行速度慢。本人英语水平很菜,所以只能在中国平台发问,大师们海涵,我也相信中国的大师能解决我的疑惑。

盼回复,谢谢!我也会积极的做测试。如需要其他信息,请告知。

Aiden:

回复 Green Deng:

谢谢你的回复。为什么GPIO测试不严谨呢?我只是觉得这样测试既简单又直观,或许你指的不严谨是指GPIO的响应回有细微延迟,但是同样的代码量(仅仅两句)在CPU和CLA下运行不应该差别这么大啊。我相信TI的片子不会是这个特性,但是就没有一个TI的员工做过这样的测试吗。应该有一个人能解答我这个问题啊,谢谢TI的大师们啦。

测试280049的CLA功能,将正常运行在CPU的ISR()函数由的 CLATASK1()调用。

CPU工程:EPWM1 ZERO产生周期10us的中断调用ISR()函数。ISR()内部开始和结束位置利用GPIO做测试信号,利用示波器检测GPIO信号。主CPU下运行ISR()只需要6us。

CLA工程:EPWM1 ZERO产生周期10us的中断调用CLATASK1(),CLATASK1内部调用ISR(),ISR()内部开始和结束位置利用GPIO做测试信号,利用示波器检测GPIO信号。发现10us不能完成ISR()。

测试:减少ISR()内代码至如下:只有两行读取AD采样值

#pragma FUNC_ALWAYS_INLINE(CLALoopCtrlISR)
inline void CLALoopCtrlISR()
{ TEST3_SET();//GPIO TEST
stClaToCpuPara.iVoutADSample = AdccResultRegs.ADCRESULT0; stClaToCpuPara.iPriCurADSample = AdcbResultRegs.ADCRESULT0;
TEST3_CLR();//GPIO TEST
// Clear INT Flag
EPwm1Regs.ETCLR.bit.INT = 1;
}

示波器检测GPIO信号,CPU执行时间为72ns,CLA执行时间为122ns。

请问我的CLA是不是什么地方没有配置正确,导致执行速度慢。本人英语水平很菜,所以只能在中国平台发问,大师们海涵,我也相信中国的大师能解决我的疑惑。

盼回复,谢谢!我也会积极的做测试。如需要其他信息,请告知。

Green Deng:

回复 Aiden:

不知道其他工程师是否有做过这样的测试。但是根据E2E上的工程师的说明,CLA仅是擅长浮点运算,其他非浮点运算的操作并没有CPU快。另外还有其他一些列举的原因你可以看一下:e2e.ti.com/…/797405

测试280049的CLA功能,将正常运行在CPU的ISR()函数由的 CLATASK1()调用。

CPU工程:EPWM1 ZERO产生周期10us的中断调用ISR()函数。ISR()内部开始和结束位置利用GPIO做测试信号,利用示波器检测GPIO信号。主CPU下运行ISR()只需要6us。

CLA工程:EPWM1 ZERO产生周期10us的中断调用CLATASK1(),CLATASK1内部调用ISR(),ISR()内部开始和结束位置利用GPIO做测试信号,利用示波器检测GPIO信号。发现10us不能完成ISR()。

测试:减少ISR()内代码至如下:只有两行读取AD采样值

#pragma FUNC_ALWAYS_INLINE(CLALoopCtrlISR)
inline void CLALoopCtrlISR()
{ TEST3_SET();//GPIO TEST
stClaToCpuPara.iVoutADSample = AdccResultRegs.ADCRESULT0; stClaToCpuPara.iPriCurADSample = AdcbResultRegs.ADCRESULT0;
TEST3_CLR();//GPIO TEST
// Clear INT Flag
EPwm1Regs.ETCLR.bit.INT = 1;
}

示波器检测GPIO信号,CPU执行时间为72ns,CLA执行时间为122ns。

请问我的CLA是不是什么地方没有配置正确,导致执行速度慢。本人英语水平很菜,所以只能在中国平台发问,大师们海涵,我也相信中国的大师能解决我的疑惑。

盼回复,谢谢!我也会积极的做测试。如需要其他信息,请告知。

Susan Yang:

回复 Aiden:

赞!谢谢详细分享!

赞(0)
未经允许不得转载:TI中文支持网 » 再次发问:280049 CLA运行速度比主CPU慢很多
分享到: 更多 (0)