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/TMS320F28377S:构建正弦波生成程序时出现问题

Guru**** 2539500 points
Other Parts Discussed in Thread: CONTROLSUITE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/598535/ccs-tms320f28377s-problem-in-build-the-sine-wave-generation-program

器件型号:TMS320F28377S
Thread 中讨论的其他器件:controlSUITE

工具/软件:Code Composer Studio

先生

        我是320f28377的使用 CCS 7.1.0的新用户。 我正在尝试运行 controlSUITE 示例中提供的 Sinewave 生成程序。 但是、当我初始化程序时、它会显示一些错误、如下所示:我无法找到错误的原因。 请帮助我解决问题

 

 说明在链接期间遇到资源路径类型#10010错误;"buffdac_square_cpu01.out"未构建 buffdac_square_cpu01 c/c++问题#10234-d 未解析的符号仍为 buffdac_square_cpu01 c/c++ problem gmake:***[all]错误2 buffdac_square_c_c_pulc01_c+ problempude01]:buffdctransc_sc_cpu01 c+ probluidc+ probluidc_doc_sc_cepoidc01_c+ problem_c+ problem_sc_sc_sc_c1: 首先在./f2837xs_sysctrl.obj 中引用 buffdac_square_cpu01 c/c++问题未解决符号_clkcpregs、首先在./f2837xs_sysctrl.obj 中引用不可解决的符号_buffdac_cpu01 c/c++未解决的问题符号_clkcpuregtimer、第一个引用的是./f2837x_c+ ctrabdcru0_c+ ctrab_dec_dec_dec_dec_decurtid_buffer01+ ctrab_buffer01+ ctrabdcpu0_ctrab_ctrab_buffercpu0_ctrab_ctrab_ctrab_buffer01+ ctrabdcpu0_ctrab_buffercpu0_ctrab_ctrab_ctrab_ctrabsolid_ctrab_ 首次在./cbuffdac_square_cpu01.obj 中引用 buffdac_square_cpu01 c/c++问题未解析符号_cputimer1regs、首次在./buffdac_square_cpu01.obj 中引用 bbuffdac_square_cpu01 c/cpu01 c/c++未解析符号_cputtimer2regs、首次在.c.obj 中引用 首先在./buffdac_square_cpu01.obj 中引用 buffdac_square_cpu01 c/c++问题未解决符号_dcsmz1regs、首先在./f2837xs_sysctrl.obj 中引用 fbuffdac_square01 c/c++问题未解决符号_dcsmz2regs、第一个 buffdcru+c28c.obj 中引用的 ctrl。

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

    您是否在示例中排除了 F2837xS_GlobalVariableDefs.c? 按原样运行示例、我不会看到您的错误、除非我排除了该源文件。

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

    e2e.ti.com/.../Query-on-DSPboard.docxThank先生,请你作答。 这对我很有帮助。 我按照您的说明应用了这些更改、它减少了编号 但我的代码在程序构建期间仍然显示错误。 我在包含 F2837xS_GlobalVariableDefs.c 之后发送错误状态 我要在我的代码中附加附加和包含的文件的快照。

     误差如下所示:

    说明        资源            路径      位置              类型

    #10010链接期间遇到错误;"sin.out"未构建     sin         C/C++问题

    "="">processors.wiki.ti.com/.../10234"> 未解析的符号仍然               是 Sin                                       C/C++问题

    gmake:***[All]错误2正是                                                     C/C++问题

    gmake[1]:***[sin.out] Error 1 Sin                                       C/C++ Problem

    未解析的符号_SGENTI_1_calc、首先在./main.obj         sin                                       C/C++ problem 中引用

    由于我仍处于学习阶段、我无法找出这些错误的原因。 希望您能帮我解决这些问题。

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

    您应该定义_SGENT_1_calc。。 并尝试添加包含选项 F2837xS_Headers_nonBIOS.cmd 文件夹.....

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

    尊敬的先生

          

           感谢 您提供宝贵的建议,Christopher Chiarella 和 eedii iiiiii 。 我在我的代码中进行了两次更改、但仍然遇到相同的错误。 我已包含 F2837xS_Headers_nonBIOS.cmd 文件夹并定义了_SGENT_1_calc。  

    我附上错误消息的状态。  

     

    我的整个代码如下所示:

    //######################################################################################################################

     

    //

    //包含的文件

    //

    #include "F28x_Project.h"

    #include "sgen.h"        //信号生成头文件

     

    //

    //定义

    //

    #define DLOG_SIZE            1024

    #define reference_VDAC       0

    #define reference_VREF       1

    #define LOW_THD_Sine         0

    #define HIGH_PRECISE_Sine  1

    #define DACA                 1.

    #define DACB                 2.

    #define DACC                 3.

    #define sinewave_type        low_THD_Sine

    #define reference            reference_VDAC

    define cpufreq_MHz          200

    #define DAC_NUM              DACA

     

    //

    //全局

    //

    uint16 datalog[DLOG_SIZE];

    #pragma DATA_SECTION (数据记录、"DLOG");

    volatile struct dac_regs* dac_ptr[4]={0x0、DacaRegs、DacbRegs、DaccRegs};

    uint32 samplingFreq_Hz = 200000;

    uint32 outputFreq_Hz = 1000;

    uint32 maxOutputFreq_Hz = 5000;

    浮动波形 Gain = 0.8003;//范围0.0 -> 1.0

    浮动波形偏移= 0;   //范围-1.0 -> 1.0

     

    #if sinewave_type=low_THD_Sine //初始化正弦波类型

    SGENTI_1 sgen = SGENTI_1_DEFAULTS;

    #elif sinewave_type=high_precision_sine

    SGENHP_1 sgen = SGENHP_1_DEFAULTS;

    #endif

     

    uint16 sgen_out = 0;

    uint16 ndx=0;

    float freqResolution_Hz = 0;

    float cpuPeriod_us = 0;

    uint32 interruptCycles = 0;

    float interruptDuration_us = 0;

    浮点采样 Period_us = 0;

    uint16 maxOutput_lsb = 0;

    uint16 minOutput_lsb = 0;

    uint16 pk_TO_pk_lsb = 0;

     

    //

    //函数原型

    //

    静态内联 void dlog (uint16值);

    静态内联 void setFreq (void);

    静态内联 void setGain (void);

    静态内联 void setOffset (void);

    静态内联 UINT16 getMax (void);

    静态内联 UINT16 getMin (void);

    void configureDAC (uint16 DAC_num);

    void configureWaveform (void);

    中断空 CPU_timer0_ISR (空);

     

    //

    //主函

    //

    void main (void)

    //

    //初始化系统控制:

    // PLL、安全装置、启用外设时钟

    //此示例函数位于 F2837xS_SYSCTRL.c 文件中。

    //

       InitSysCtrl();

     

    //

    //禁用 CPU 中断

    //

       Dint;

     

    //

    //将 PIE 控制寄存器初始化为默认状态。

    //默认状态是禁用所有 PIE 中断并清除标志。

    //此函数位于 F2837xS_PIECTRL.c 文件中。

    //

       InitPieCtrl();

     

    //

    //清除所有中断并初始化 PIE 矢量表:

    //

       IER = 0x0000;

       IFR = 0x0000;

       InitPieVectTable();

     

    //

    //将 CPU Timer0中断函数映射到 PIE 矢量表

    //

       EALLOW;

       PieVectTable.TIMER0_INT =&CPU_timer0_ISR;

       EDIS;

     

    //

    //初始化变量

    //

       cpuPeriod_us =(1.0/cpufreq_MHz);

       samplingPeriod_us =(1000000.0/samplingFreq_Hz);

     

    //

    //初始化数据记录

    //

       for (ndx=0;ndx <DLOG_SIZE; ndx++)

       {

           dataalog[ndx]= 0;

       }

       NDX = 0;

     

    //

    //配置 DAC

    //

       configureDAC (DAC_NUM);

     

    //

    //配置波形

    //

       configureWave();

     

    //

    //初始化 CPU 计时器

    //

       InitCpuTimer();

     

    //

    //将 CPU Timer0配置为以指定的采样频率中断

    //

       ConfigCpuTimer (&CpuTimer0、cpufreq_MHz、1000000.0/samplingFreq_Hz);

     

    //

    //启动 CPU 定时器0

    //

       CpuTimer0Regs.TCR.ALL = 0x4000;

     

    //

    //启用中断

    //

       IER |= M_INT1;

       PieCtrlRegs.PIEIER1.bit.INTx7=1;

       EINT;

       ERTM;

     

       while (1)

       {

           setFreq();  //设置输出频率和最大输出频率

           setGain();  //设置波形幅度

           setOffset();//设置波形的偏移

           maxOutput_lsb = getMax ();

           minOutput_lsb = getMin ();

           PK_TO_pk_lsb = maxOutput_lsb - minOutput_lsb;

       }

     

    //

    // dlog -循环数据记录。 DATALOG [0]包含的下一个索引

    //       被覆盖

    //

    静态内联 void dlog (uint16值)

       dataalog[ndx]=值;

       if (++ndx =DLOG_SIZE)

       {

           NDX = 0;

       }

       dataalog[0]= ndx;

     

    //

    // setFreq -在 SGEN 中设置正弦频率

    //

    静态内联 void setFreq (void)

    #if sinewave_type=low_THD_Sine

       //

       //范围(Q0)= 0x0000 -> 0x7FFF、STEP_max (Q0)=

       //(Max_Freq_Hz*0x10000)/Sampling_Freq_Hz

       //

       sgen.step_max =(maxOutputFreq_Hz*0x10000)/samplingFreq_Hz;

     

       //

       //范围(Q15)= 0x0000 -> 0x7FFF、freq (Q15)=

       //(必需的频率 Hz/Max_Freq_Hz)*0x8000

       //

       sgen.freq =((float) outputFreq_Hz/maxOutputFreq_Hz)*0x8000;

    #elif sinewave_type=high_precision_sine

       //

       //范围(Q0)= 0x00000000 -> 0x7FFFFFFF、STEP_max (Q0)=

       //(Max_Freq_Hz*0x100000000)/Sampling_Freq_Hz

       //

       sgen.step_max =(maxOutputFreq_Hz*0x100000000)/samplingFreq_Hz;

     

       //

       //范围(Q31)= 0x00000000 -> 0x7FFFFFFF、freq (Q31)=

       //(必需的频率 Hz/Max_Freq_Hz)*0x80000000

       //

       sgen.freq =((float) outputFreq_Hz/maxOutputFreq_Hz)* 0x80000000;

    #endif

     

       freqResolution_Hz =(float) maxOutputFreq_Hz/sgen.step_max;

     

    //

    // setGain -在 SGEN 中设置增益

    //

    静态内联 void setGain (void)

       sgen.gain = wavformGain * 0x7FFF;  //范围(Q15)= 0x0000 -> 0x7FFF

     

    //

    // setOffset -在 SGEN 中设置偏移

    //

    静态内联 void setOffset (void)

       sgen.offset = wavformOffset * 0x7FFF;//范围(Q15)= 0x8000 -> 0x7FFF

     

    //

    // getMax -获取数据日志中的最大值

    //

    静态内联 UINT16 getMax (空)

       uint16索引= 0;

       uint16 tempMax = 0;

     

       for (index=1、<DLOG_SIZE; index++)

       {

           if (<DataLog[index]))

           {

               tempMax = dataalog[索引];

           }

       }

     

       返回 tempMax;

     

    //

    // getMin -获取数据日志中的最小值

    //

    静态内联 UINT16 getMin (void)

       uint16索引= 0;

       uint16 tempMin = 0xFFFF;

     

       for (index=1、<DLOG_SIZE; index++)

       {

           if (tempMin>datalog[index])

           {

               tempMin = dataalog[索引];

           }

       }

     

       返回 tempMin;

     

    //

    // configureDAC -启用并配置请求的 DAC 模块

    //

    void configureDAC (uint16 DAC_num)

       EALLOW;

     

       DAC_PTR[DAC_num]->DACCTL.bit.DACREFSEL =参考;

       DAC_PTR[DAC_num]->DACOUTEN 位.DACOUTEN = 1;

       DAC_PTR[DAC_num]->DACVALS.ALL = 0;

     

       DELAY_US (10);//缓冲 DAC 加电延迟

     

       EDIS;

     

    //

    // configureWaveform -配置正弦波形

    //

    void configureWaveform (void)

       sgen.alpha = 0;//范围(16)= 0x0000 -> 0xFFFF

       setFreq();

       setGain();

       setOffset();

     

    //

    // cpu_timer0_isr -将正弦值写入 DAC 的计时器 ISR,记录正弦值

    //                 value、计算下一个正弦值、并计算中断

    //                 持续时间

    //

    中断空 CPU_timer0_ISR (空)

       //

       //启动 CPU 定时器1以指示中断开始

       //

       CpuTimer1Regs.TCR.ALL = 0x0000;

     

       //

       //将当前正弦值写入缓冲 DAC

       //

       DAC_PTR[DAC_NUM]->DACVALS.ALL = sgen_out;

     

       //

       //记录当前正弦值

       //

       dlog (sgen_out);

     

       //

       //计算下一个正弦值

       //

       sgen.calc(&sgen);

     

       //

       //缩放下一个正弦值

       //

       sgen_out =(sgen.out + 32768)>> 4;

     

       //

       //确认此中断以从组1接收更多中断

       //

       PieCtrlRegs.PIEACX.ALL = PIEACK_Group1;

     

       //

       //停止 CPU 定时器1以指示中断结束

       //

       CpuTimer1Regs.TCR.ALL = 0x0010;

     

       //

       //计算以周期为单位的中断持续时间

       //

       interruptCycles = 0xFFFFFFUL - CpuTimer1Regs.TIM.ALL;

     

       //

       //计算以微秒为单位的中断持续时间

       //

       interruptDuration_us = cpuPeriod_us * interruptCycles;

     

       //

       //重新加载 CPU 定时器1

       //

       CpuTimer1Regs.TCR.ALL = 0x0030;

     

    //

    //文件结束

    //

     

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    请确保您包含了该符号所需的 SGEN 库或源代码。 此外、使用 CCS 控制台窗口获取有关错误的更多详细信息、并确保执行重建、而不仅仅是编译。

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

    非常感谢您的回复和 Christopher Chiarella 的建议。  

    1.我已包括 Sen 库,它显示在我之前邮件中所附的所列 Sin 代码库的快照中。

    2.I 读取到、如果在 PC 上运行防病毒保护、则会出现几次 gmake 错误。 我已禁用防病毒程序、但仍然收到相同的错误。

    我对代码的一个观察结果是

    3. 控制套件中的所有示例都在我的28377 Launchpad 上成功运行、在加载的代码文件中显示 CPU1_RAM 文件。 我正在运行 ADC_SOC_ePWM 示例、它正在成功运行。 当我构建这个程序时、在构建选项的下拉菜单中有 CPU RAM 和 CPU 闪存选项。 我将按如下所示附加快照:

    但是、当我构建我的 Sin 代码时、构建选项中没有 CPU RAM 和 CPU 闪存选项。  Sin 代码文件列表中甚至没有列出 CPU1_RAM。 我将按如下所示附加快照:

    5、是不是错误的根源?

    6.我认为我的 Sin 代码不在 Launchpad 的存储器中。 这是我对代码的看法。 请提供您对该问题的见解、以便我能够解决该问题。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您包含了 SGEN 头文件夹、但您是否链接到项目属性中的实际".lib"文件中? 或者、您也可以使用其他源文件直接复制到项目浏览器区域。

    确保您遵循 controlSUITE for F2837xS 中的固件用户指南、设置预定义值以设置正确的 LaunchPad 时钟。

    构建配置是可配置的、对于器件支持示例、我们通常为 RAM 和闪存创建一个。 Debug 和 Release 可以是任何内容。 调试并不是指 RAM。 如果您在项目属性中查看闪存构建配置、您将看到一些预定义值设置、使其加载到闪存中。

    此致
    Chris