This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CCS/TMS320F280049C:TMS320F280049C:使用库执行数学运算的时间"C28x 浮点单元 fastRTS 库"

Guru**** 2042920 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/764246/ccs-tms320f280049c-tms320f280049c-time-of-performing-math-operations-with-the-library-c28x-floating-point-unit-fastrts-library

器件型号:TMS320F280049C

工具/软件:Code Composer Studio

您好!
我将库"C28x 浮点单元 fastRTS 库"连接到了我的项目。 但是、除法和平方根运算的实现所需的周期比库文档中所述的多。 该库表示除法运算在24个周期内执行、平方根在28个周期内执行。  在我的项目中、这些运算需要29个时钟周期(除法)和33个时钟周期(平方根)。

告诉我问题可能是什么?

以下是我的代码。 红线、我检查的执行时间。 此外、以防万一、我将存档与我的项目附加在一起。

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

#include "main.h"
#include

uint16_t ADC_DATA_0[5]={0、0、0、0};
float ADC_DATA_0_Mean = 0;
float ADC_DATA_0_REAL = 0;
float ADC_DATA_0_reall = 0;
int i = 0;

浮点 x1 = 0.5f;
float x2 = 0.9f;
浮点 x3 = 0.0f;
float x4 = 5.2f;

void adcA1ISR (void);

void main (void)

InitStartMCU();
InitPWM();
InitADC();
InitADCSOC();

EALLOW;
PieVectTable.ADCA1_INT =&adcA1ISR;// ADCA 中断1的函数
EDIS;

IER |= M_INT1;//启用组1中断

EINT;//启用全局中断 INTM
ERTM;//启用全局实时中断 DBGM

//启用 PIE 中断
//
PieCtrlRegs.PIEIER1.bit.INTx1 = 1;

/ /
EALLOW;

GpioCtrlRegs.GPAMUX1.bit.GPIO2 = 0;// GPIO2 = GPIO2


GpioCtrlRegs.GPAPUD.bit.GPIO2 = 1;//禁用 GPIO2上的上拉


GpioCtrlRegs.GPADIR.bit.GPIO2 = 1;//加载输出锁存器


EDIS;
/ /
while (1)



_interrupt void adcA1ISR (void)

如果(i>=4){
I = 0;

否则{
i++;

ADC_DATA_0[i]= AdcaResultRegs.ADCRESULT0;
ADC_DATA_0_Mean =(ADC_DATA_0[0]+ ADC_DATA_0[1]+ ADC_DATA_0[2]+ ADC_DATA_0[3]+ ADC_DATA_0[4])/5;
ADC_DATA_0_REALL = ADC_DATA_0_Mean * 3.3;
ADC_DATA_0_REAL = ADC_DATA_0_REALL / 4096;

GpioDataRegs.GPASET.bit.GPIO2 = 1;
X3 = x2/x1;
X3 = sqrt (x1);
GpioDataRegs.GPACLEAR.bit.GPIO2 = 1;
X3 = x2 * x4 + x1;
//
//清除中断标志并发出 ACK
//
AdcaRegs.ADCINTFLGCLR.bit.ADCINT1 = 1;
PieCtrlRegs.PIEACX.ALL = PIEACK_Group1;

e2e.ti.com/.../Project_5F00_1.rar

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的安德烈:

    使用 FPU FastRTS 的除法和平方根的实际计算分别需要24个周期和28个周期。 但是、由于这些例程不是内在函数、而是涉及对库的这些汇编例程的函数调用。 这就是正常函数调用情况下5个周期的开销的原因。  

    此致

    Himanshu