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.

[参考译文] LAUNCHXL-F280025C:未定义标识符"PieCtrlRegs"

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1274082/launchxl-f280025c-identifier-piectrlregs-is-undefined

器件型号:LAUNCHXL-F280025C
主题中讨论的其他器件:C2000WARE

您好!  

我应该为 PieCtrlRegs 包括什么头文件 ?

如果参考包含 f28x_project.h 的 adc_ex1_soc_epwm.c 等示例,那么我有以下错误:

"svcrk_sdk_4_02_01_00/c2000ware/device_support/f28002x/headers/include/f28002x_nmiintrupt.h"/Users/dannychan/ti/C2000,第159行:错误#41:预期的标识符 Ware_Motor

"svcrk_sdk_4_02_01_00/c2000ware/device_support/f28002x/headers/include/f28002x_nmiintrupt.h"/Users/dannychan/ti/C2000,第170行:错误#41:预期的标识符 Ware_Motor

"svcrk_sdk_4_02_01_00/c2000ware/device_support/f28002x/headers/include/f28002x_nmiintrupt.h"/Users/dannychan/ti/C2000,第180行:错误#41:预期的标识符 Ware_Motor

"svcrk_sdk_4_02_01_00/c2000ware/device_support/f28002x/headers/include/f28002x_lin.h"/Users/dannychan/ti/C2000,第236行:错误#41:需要一个标识符 Ware_Motor

"svcrk_sdk_4_02_01_00/c2000ware/device_support/f28002x/headers/include/f28002x_lin.h"/Users/dannychan/ti/C2000,第236行:错误#80:预期的类型说明符 Ware_Motor

"svcrk_sdk_4_02_01_00/c2000ware/device_support/f28002x/headers/include/f28002x_lin.h"/Users/dannychan/ti/C2000,第236行:错误#170:此处不允许函数类型 Ware_Motor

"svcrk_sdk_4_02_01_00/c2000ware/device_support/f28002x/headers/include/f28002x_lin.h"/Users/dannychan/ti/C2000,第236行:警告#109-D:长度为1的带符号位字段 Ware_Motor

"svcrk_sdk_4_02_01_00/c2000ware/device_support/f28002x/common/include/f28002x_globalprotys.h"/Users/dannychan/ti/C2000,第92行:错误#41:预计的标识符 Ware_Motor

"svcrk_sdk_4_02_01_00/c2000ware/device_support/f28002x/common/include/f28002x_globalprotys.h"/Users/dannychan/ti/C2000,第92行:错误#80:预计的类型指定符 Ware_Motor

"svcrk_sdk_4_02_01_00/c2000ware/device_support/f28002x/common/include/f28002x_globalprotys.h"/Users/dannychan/ti/C2000,第92行:错误#91:不允许函数返回函数 Ware_Motor

丹尼

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

    尊敬的 Danny:

    我应该为 PieCtrlRegs 包含什么头文件 ?

    PieCtrlRegs 在 \device_support\f28002x\headers\source\f28002x_globalvariabledefs.c 文件中定义。

    您可以将其添加到项目属性中。

    谢谢

    阿斯温

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

    您好、Aswin、

    你的意思是,我把文件拖动到我的项目,如下所示? 但它不起作用:(

    丹尼

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

    尊敬的 Danny:

    您能否确认文件路径是否已包括在示例属性中、如果不包括、请添加文件路径并重试。

    右键单击 example -> properties -> C2000 compiler -> Include option。 为标头添加文件路径。

    谢谢

    阿斯温

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

    您好、Aswin、

    是的,我没有运气:(

    丹尼

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

    尊敬的 Danny:

    请在文件路径选项中添加包含路径、然后尝试。

    谢谢

    阿斯温

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

    您好、Aswin、

    是的、添加了包含和源路径、但仍然不幸运!

    丹尼

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

    尊敬的 Danny:

    您是否能够在不更改任何设置的情况下构建 adc_ex1_soc 示例?

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

    是的、我可以导入和构建  adc_ex1_soc

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

    PIECTRL 寄存器也位于 src_device -> device 支持文件夹中。

    我不知道为什么它没有从该文件夹中选择寄存器。

    您能否附上该示例以进行进一步调试?

    谢谢

    阿斯温

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

    您是指 adc_ex1_soc 文件吗?  

    //##########################################################################出################################出

    //

    //文件: adc_ex1_soc_epwm.c

    //

    //标题: ADC EPWM 触发

    //

    //! \addtogroup bitfield_example_list

    //!

    ADC EPWM 触发

    //!

    //! 该示例将 ePWM1设置为在 ADCA 上定期触发转换。

    //!

    //! /b 外部连接\n

    //!  - A1应该连接到一个信号进行转换

    //!

    //! \b 监视\b 变量\n

    //! -\b adcAResults -一组模数转换样本,来自

    //!  引脚 A1。 采样之间的时间是根据周期数确定的、

    //!  未启用。

    //!

    //

    //##########################################################################出################################出

    //

    //

    //$Copyright:

    //版权所有(C) 2023德州仪器(TI)公司- http://www.ti.com/

    //

    //以源代码和二进制形式重新分发和使用,无论有无

    //修改,前提是满足以下条件

    //已满足:

    //

    // 重新分发源代码必须保留以上版权

    // 通知,此条件列表和下述免责声明。

    //

    // 以二进制形式重新分发必须复制上述版权

    // 通知,此条件列表和以下免责声明(位于

    // /文件和/或其他材料   

    // 分布。

    //

    //  TI 公司名称或公司名称

    // 其贡献者可用于认可或推广派生的产品。

    // 未经事先书面许可从本软件获得。

    //

    //此软件由版权持有者和贡献者提供

    //"按原样"和任何明示或暗示的保证、包括但不限于

    //仅限于对适销性和适用性的暗示保证

    //不考虑特定目的。 在任何情况下、版权均不得

    //所有者或贡献者对任何直接、间接、偶然、

    //特殊、示例或后果性损害(包括但不包括

    //仅限于采购替代货物或服务;不能使用、

    ///数据或利润;或业务中断)

    //责任理论,无论是在合同,严格的责任,或侵权

    //(包括疏忽或其他)以任何方式产生的使用

    //本软件,即使已被告知此类损坏的可能性。

    //$

    //##########################################################################出################################出

    //

    //包含的文件

    //

    #include "F28x_project.h"

    //

    //定义

    //

    #define results_buffer_size   256

    //

    //全局变量

    //

    uint16_t adcAResults[results_buffer_size]; //结果缓冲区

    uint16_t 索引;                //索引到结果缓冲区中

    volatile uint16_t bufferFull;         //标记以指示缓冲区已满

    //

    //函数原型

    //

    void initADC (void);

    void initEPWM (void);

    void initADCSOC (void);

    __interrupt void adcA1ISR (void);

    //

    //主菜单

    //

    main (void)

    {

      //

      //初始化设备时钟和外设

      //

      InitSysCtrl()

      //

      //初始化 GPIO

      //

      InitGpio()

      //

      //禁用 CPU 中断

      //

      Dint;

      //

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

      //默认状态是所有 PIE 中断都被禁用并且标志

      //被清除。

      //

      InitPieCtrl()

      //

      //禁用 CPU 中断并清除所有 CPU 中断标志:

      //

      IER = 0x0000;

      IFR = 0x0000;

      //

      //使用指向 shell 中断的指针初始化 PIE 矢量表

      //服务例程(ISR)。

      //

      InitPieVectTable()

      //

      //映射 ISR 函数

      //

      EALLOW;

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

      EDIS;

      //

      //配置 ADC 并为其加电

      //

      initadc();

      //

      //配置 ePWM

      //

      initEPwm();

      //

      //为通道1上的 EPWM 触发转换设置 ADC

      //

      initADCSOC();

      //

      //启用全局中断和更高优先级的实时调试事件:

      //

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

      EINT;      //启用全局中断 INTM

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

      //

      //初始化结果缓冲区

      //

      for (index = 0;index < results_buffer_size;index++)

      {

        adcAResults[index]= 0;

      

      索引= 0;

      bufferFull = 0;

      //

      //启用 PIE 中断

      //

      PieCtrlRegs.PIEIER1.bit.INTx1 = 1;

      //

      //同步 ePWM

      //

      EALLOW;

      CpuSysRegs.PCLKCR0.bit.TBCLKSYNC = 1;

      //

      //在循环中无限地进行转换

      //

      while (1)

      {

        //

        //启动 ePWM

        //

        EPwm1Regs.ETSEL.bit.SOCAEN = 1;  //启用 SOCA

        EPwm1Regs.TBCTL.bit.CTRMODE = 0; //解冻、并进入向上计数模式

        //

        //等待 ePWM 会引起 ADC 转换,然后会引起中断,

        //这将填充结果缓冲区,最终设置 bufferFull

        //标记

        //

        while (!bufferFull)

        {

        

        bufferFull = 0;//清除缓冲区满标志

        //

        //停止 ePWM

        //

        EPwm1Regs.ETSEL.bit.SOCAEN = 0;  //禁用 SOCA

        EPwm1Regs.TBCTL.bit.CTRMODE = 3; //冻结计数器

        //

        //软件断点。 此时、转换结果存储在

        // adcAResults。

        //

        //再次点击运行以获得更新的转换。

        //

        ESTOP0;

      

    //

    // initADC -用于配置 ADCA 并为其加电的函数。

    //

    void initADC (void)

    {

      //

      //将 VREF 设置为内部

      //

      SetVREF (ADC_ADCA、ADC_INTERNAL、ADC_VREF3P3);

      EALLOW;

      //

      //将 ADCCLK 分频器设置为/4

      //

      AdcaRegs.ADCCTL2.bit.prescale = 6;

      //

      //将脉冲位置设置为延迟

      //

      AdcaRegs.ADCCTL1.bit.INTPULSEPOS = 1;

      //

      //给 ADC 上电,然后延迟1ms

      //

      AdcaRegs.ADCCTL1.bit.ADCPWDNZ = 1;

      EDIS;

      DELAY_US (1000);

    //

    // initEPWM -用于配置 ePWM1以生成 SOC 的函数。

    //

    void initEPWM (void)

    {

      EALLOW;

      EPwm1Regs.ETSEL.bit.SOCAEN = 0;  //在组上禁用 SOC

      EPwm1Regs.ETSEL.bit.SOCASEL = 4;  //在向上计数时选择 SOC

      EPwm1Regs.ETPS.bit.SOCAPRD = 1;  //在发生第1个事件时生成脉冲

      EPwm1Regs.CMPA.bit.CMPA = 0x0800; //将 A 值设置为2048个计数

      EPwm1Regs.TBPRD = 0x1000;      //将周期设置为4096个计数

      EPwm1Regs.TBCTL.bit.CTRMODE = 3;  //冻结计数器

      EDIS;

    //

    // initADCSOC -用于配置 ADCA 的 SOC0由 ePWM1触发的函数。

    //

    void initADCSOC (void)

    {

      //

      //选择要转换的通道以及转换结束标志

      //

      EALLOW;

      AdcaRegs.ADCSOC0CTL.bit.CHSEL = 1;  // SOC0将转换引脚 A1

                          // 0:A0  1:A1  2:A2  3:A3

                          // 4:A4  5:A5  6:A6  7:A7

                          // 8:A8  9:A9  A:A10  B:A11

                          // C:A12  D:A13  E:A14  F:A15

      AdcaRegs.ADCSOC0CTL.bit.ACQPS = 9;  //采样窗口为10个 SYSCLK 周期

      AdcaRegs.ADCSOC0CTL.bit.TRIGSEL = 5; //针对 ePWM1 SOCA 触发

      AdcaRegs.ADCINTSEL1N2.bit.INT1SEL = 0;// SOC0结束将设置 INT1标志

      AdcaRegs.ADCINTSEL1N2.bit.INT1E = 1; //启用 INT1标志

      AdcaRegs.ADCINTFLGCLR.bit.ADCINT1 = 1;//确保 INT1标志被清除

      EDIS;

    //

    // adcA1ISR - ADC A 中断1 ISR

    //

    __interrupt void adcA1ISR (void)

    {

      //

      //将最新结果添加到缓冲区中

      // ADCRESULT0是 SOC0的结果寄存器

      adcResults[index++]= AdcResultRegs.ADCRESULT0

      //

      //如果缓冲区已满,则设置 bufferFull 标志

      //

      if (results_buffer_size <= index)

      {

        索引= 0;

        bufferFull = 1;

      

      //

      //清除中断标志

      //

      AdcaRegs.ADCINTFLGCLR.bit.ADCINT1 = 1;

      //

      //检查是否发生了溢出

      //

      if (1 == AdcaRegs.ADCINTOVF.bit.ADCINT1)

      {

        AdcaRegs.ADCINTOVFCLR.bit.ADCINT1 = 1;//清除 INT1溢出标志

        AdcaRegs.ADCINTFLGCLR.bit.ADCINT1 = 1;//清除 INT1标志

      

      //

      //确认中断

      //

      PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;

    //

    //文件结束

    //

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

    Danny:

    我认为您将无法访问器件支持寄存器、我将收集有关这方面的更多信息并将回来。

    您能否以 zip 格式附加您遇到错误问题的完整示例工程。

    我将尝试自行打开示例并检查问题。

    谢谢

    阿斯温

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

    您好、Aswin、

    我只是使用了 示例 universal_motorcontrol_lab、今天早上我删除了我的现有   副本并导入一个也已升级到 MotorControl SDK 5.0的全新副本(MotorControl_SDK_5_00_00_000)

    我做了什么:  

    1.升级到 MotorControl SDK 至5.0

    2.导入  universal_motorcontrol_lab 示例  

    3.添加两个包含路径

    c2000_SDK_5_00_00_00 Ware_Motor  > c2000ware > device_support > f28002x > 标头> 包含

    c2000_SDK_5_00_00_00 Ware_Motor  > c2000ware > device_support > f28002x > 标头>源代码

    4.简单地将 TempPIEIER = PieCtrlRegs.PIEIER1.all 添加到 sys_main.c 文件中  

    5. Build All >错误  

    我在此附上示例及其工作空间,感谢你们的调查!  

    e2e.ti.com/.../universal_5F00_motorcontrol_5F00_lab_5F00_f28002x.zip

    e2e.ti.com/.../universal_5F00_motorcontrol_5F00_lab.zip

    丹尼

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

    尊敬的 Danny:

    我已经在 main.c 文件中包含了这个头文件并为 UINT16宏添加了一个定义。

     如果您正在访问代码中的任何片段、请添加以下标题。

    typedef 无符号整型      UINT16;
    #include "f28002x_PIECTRL.h"

    谢谢

    阿斯温

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

    您好、Aswin、

    是的,它起作用了:)

    丹尼