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:MSP430 + LEA - DSPLIB问题

Guru**** 2587365 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/619858/ccs-msp430-lea---issue-with-dsplib

工具/软件:Code Composer Studio

客户在使用DSPLIB_1_20_03_01的MSP_Bumped_Q15命令时遇到问题。

他们使用了几个LEA函数(FFT,IFFT,MAX等),但在乘法推荐(MSP_BULD_Q15)方面遇到了问题。 它们没有收到正确的结果(矢量填充0,有时是+-1)。

请您评论错误所在位置吗?

代码(添加命令正在工作)

#include "DSPLIB/include/DSPLIB.h"

 

#define vector_length  8.

//将数据加载到共享RAM中以使用LEA

DSPLIB_DATA (src1,4)

DSPLIB_DATA (src2,4)

DSPLIB_DATA (DST,4)

_Q15 src1[vector_length]={1,2,3,4,5,6,7,8};

_Q15 src2[vector_length]={1,5,3,4,5,6,7,8};

_Q15 DST[vector_length];

 

int main (void){

 

   MSP_STATUS状态;//命令状态

   //------------------

   mspump_q15_params mpyParams;//数据结构

   MpyParams.length =8;//矢量长度

   //运行LEA颠簸计算

   状态= MSP_Pumped_Q15(&MpyParams,src1,src2,dst);

   //------------------

 

 

   //------------------

   msp_add_q15_params addParams;//数据结构

   addParams.length =8;//引导程序的长度

   //运行LEA添加计算

   状态= MSP_ADD_Q15 (&addParams,src1,src2,dst);

   //------------------

}

 

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

    您好,Marco:

    该函数实际上运行正常,但您的客户正在使用它,就好像它是一个整数乘法例程一样。 但是,_Q15输入是浮点数的整数表示。 有关此数据类型的详细信息 ,请参阅《DSPLIB用户指南》的“定点数据类型”部分。

    在这种特殊情况下,整数值1,2,3,4等是 使用 f_Q15(x)= x *2^-15等式表示0.0.003万51758</xmt-block>5.1758万 ,0.00006103515625 等。 因此,当执行src1[1]*src2[1]时,实际结果是0.00006103515625  * 0.1.5258万7890625</xmt-block>789.0625万  = 0.0万93132257</xmt-block>9313.2257万。 然后,当该数字被除以2^-15转换回整数表示时,结果为0.0.0305万17578</xmt-block>1.7578万 ,该数字的整数值为0。  

    对功能的更好测试如下:

    #include "driverlib.h"
    #include "DSPLIB/include/DSPLIB.h"
    
    #define vector_length 8
    //将数据加载到共享RAM中使用LEA
    //_Q15(x)宏将浮点表示转换为整数表示DSPLIB_data(src1,4)_Q15_Q15={_vector_Q15_data_s15_Q15, 0.1 0.3
    
    
    
    
    ,0.6 0.1 ,0.4 ,0.7 ,0.2 0.4 0.5 0.7 0.8 0.2 0.3 0.5 0.6 0.8 0.01 0.04 0.09 0.16 0.25 0.36 0.49 0.64
    
    
    
    
    
    
    
    
    WDTCTL = WDTPW | WDTHOLD; //停止看门狗计时器
    
    MSP_STATUS状态;//命令状态
    
    P1OUT &=~BIT0;
    P1DIR || BIT0;
    
    //------------------
    mspump_q15_params mpyParams;//数据结构
    MpyParams.length =8;//矢量长度
    //运行LEA颠簸计算
    状态= MSP_Pumped_Q15(&MpyParams,src1,src2,dst);
    __no_operation();
    IF (status!= MSP_SUCCESS)
    {
    P1OUT || BIT0;//信号存在计算错误
    }
    //------------------
    
    UINT8_t i = 0;
    while (i <矢量长度)
    {
    IF (DST[I]!=预期结果[I])
    {
    P1OUT || BIT0;//信号存在计算错误
    }
    I++;
    }
    
    //------------------
    msp_add_q15_params addParams;//数据结构
    addParams.length =8;//引导程序的长度
    //运行LEA添加计算
    状态= MSP_ADD_Q15 (&addParams,src1,src2,dst);
    __no_operation();
    IF (status!= MSP_SUCCESS)
    {
    P1OUT || BIT0;//信号存在计算错误
    }
    //------------------
    
    

    如果您有任何疑问,请告诉我。  

    此致,  
    Caleb Overbay