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.

[参考译文] TMS320F280025:将 TI AFE301演示代码添加到 C2000Ware

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1054915/tms320f280025-ti-afe301-demo-code-to-c2000ware

器件型号:TMS320F280025
主题中讨论的其他器件:C2000WAREAFE031

你(们)好

我的项目是在 driverlab 下开发的。 我想知道如何将演示示例 boostxl_afe031_f28004x_pwmmode 从 TI 直接用于我的 C2000Ware 项目。 演示演示代码位于位字段中。 感谢您的支持。

BR

HK Woo

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

    您好、HK Woo、

    由于项目位于位字段中、因此您可以在 C2000WARE 中导入其中一个位字段示例、以便 F28002x 开始(目录位置如下)。 然后进行必要的更改、复制源文件/头文件等、使用位字段将项目移植到 F28002x。 可能需要进行一些额外的移植工作、更改和调试、但 F28004x 和 F28002x 器件非常相似。

    C:\ti\c2000\C2000Ware_4_00_00_00\device_support\f28002x\examples

    移植到 DriverLib 需要付出更多的努力。

    最棒的

    Kevin

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

    你(们)好

    抱歉。 我不理解这些过程。 能不能再多解释一下。 谢谢  

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

    您好、HK Woo、

    非常抱歉、我想我误解了您的问题。 您已经有一个 DriverLib 项目、希望在其中添加'boostxl_afe031_f28004x_pwmmode'位字段代码。 是这样吗?

    如果是这样、位字段和 driverlib 方法的设计方式使它们能够协同工作。 请参阅以下 C2000WARE 文档中的第2.3节"项目:添加 Bitfield 或 Driverlib 支持"、详细了解如何向项目中添加支持。

    C:\ti\c2000\C2000Ware_4_00_00_00\device_support\f28002x\docs\F28002x_FRM_EX_UG.pdf

    由于'boostxl_afe031_f28004x_pwmmode'项目适用于 F28004x 而不是 F28002x、因此可能需要对代码进行一些额外的更改。 但是、由于 F28004x 和 F28002x 器件非常相似、它们应该是次要的。

    最棒的

    Kevin

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

    你(们)好

    我参考了该文档。 编译期间出现错误消息、如下所示

    >>编译失败
    subdir_rules.mk:9:目标'f28002x_globalvarabledefs.obj'的配方失败
    "./f28002x_globalvariabledefs.c"、第111行:错误#237:变量"CanaRegs"被声明为从未完成的类型
    "./f28002x_globalvariabledefs.c"、第247行:错误#237:变量"Dcc0Regs"被声明为从未完成的类型
    "./f28002x_globalvariabledefs.c"、第255行:错误#237:变量"Dcc1Regs"被声明为从未完成的类型
    "./f28002x_globalvariabledefs.c"、第711行:错误#237:变量"LinaRegs"被声明为从未完成的类型
    "./f28002x_globalvariabledefs.c"、第719行:错误#237:变量"LinbRegs"被声明为从未完成的类型
    在"../f28002x_globalvariabledefs.c"的编译中检测到5个错误。
    gmake:***[f28002x_globalvariabledefs.obj]错误1
    gmake:目标"全部"不会由于错误而重新生成。

    请建议如何解决。 我使用的是 C2000Ware 3.4

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

    你(们)好

    我在对变量进行注释 后发现了其他问题、以便推进测试。

    >>编译失败
    subdir_rules.mk:9:目标'HRPWM_ex3_prd_updown_SFS.obj'的配方失败
    "C:\ti\c2000Ware_4_00_00_00\device_support\f28002x\headers\include\f28002x_LIN.h"、第236行:错误#41:预期的标识符
    "C:\ti\c2000Ware_4_00_00_00\device_support\f28002x\headers\include\f28002x_LIN.h"、第236行:错误#80:预期类型说明符
    "C:\ti\c2000Ware_4_00_00_00\device_support\f28002x\headers\include\f28002x_LIN.h"、第236行:错误#170:此处不允许函数类型
    "C:\ti\c2000Ware_4_00_00_00\device_support\f28002x\headers\include\f28002x_LIN.h"、第236行:警告#109-D:长度为1的带符号位字段
    3在"../HRPWM_ex3_prd_updown_SFS.c"的编译中检测到错误。
    gmake:***[HRPWM_ex3_prd_updown_SFS.obj]错误1
    构建文件:"SYSCFG/board.c"

    错误是由于 f28002x_lin.h 中的结构名称 SCIFIR_BITS 具有"空闲"位定义、在 driverlib 的 cpu.h 中也是如此、但它们是不同的定义。

    struct SCIFLR_bits{                   // bits description
       BP_16 BRKDT:1;                     // 0中断检测标志(SCI 兼容模式)
       BP_16唤醒:1;                    // 1唤醒标志
       BP_16空闲:1;                      // 2 SCI 接收器处于空闲状态(SCI 兼容模式)
       BP_16忙:1;                      // 3忙标志
       BP_16超时:1;                   // 4 LIN 总线空闲超时标志(仅限 LIN)
       BP_16 rsvd1:1;                     // 5保留
       BP_16 TOAWUS:1;                    //唤醒信号标志后超时(仅限 LIN)
       BP_16 TOA3WUS:1;                   // 3个唤醒信号标志后超时(仅限 LIN)
       BP_16 TXRDY:1;                     // 8发送器缓冲器就绪标志
       BP_16 RXRDY:1;                     // 9接收器缓冲器就绪标志
       BP_16 TXWAKE:1;                    // 10 SCI 发送器唤醒方法选择
       BP_16 TXEMPTY:1;                   // 11发送器空标志
       BP_16 RXWAKE:1;                    // 12接收器唤醒检测标志
       BP_16 IDTXFLAG:1;                  // 13发送标志标识符(仅限 LIN)
       BP_16 IDRXFLAG:1;                  //接收标志上的14标识符
       BP_16 rsvd2:1;                     // 15保留
       BP_32 rsvd3:8;                     // 23:16保留
       BP_32 PE:1;                        // 24奇偶校验错误标志
       BP_32 OE:1;                        // 25溢出错误标志
       BP_32 FE:1;                        // 26组帧错误标志
       BP_32 NRE:1;                       // 27无响应错误标志(仅限 LIN)
       BP_32 ISFE:1;                      // 28不一致的同步字段错误标志(仅限 LIN)
       BP_32 CE:1;                        // 29校验和错误标志(仅限 LIN)
       BP_32 PBE:1;                       // 30物理总线错误标志(仅限 LIN)
       BP_32 be:1;                        // 31位错误标志(仅限 LIN)
    };

    cpu.h 中空闲的定义

    #ifndef _dual_headers
    #ifndef 空闲
    #define IDLE __asm (" IDLE")
    #endif
    其他
    #define IDLE_asm __asm (" IDLE");
    #endif

    这是冲突。  当然、它可以重命名为不同的名称、但我不知道任何负面结果。 我找到_dual_header. 我进行了 google 操作、发现它适用于 bitfield 和 driverlib 正在使用的工程、但我不知道在工程属性中定义它的最佳方法是什么。

    请建议如何解决。

    BR

    HK Woo

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

    您好、HK Woo、

    您需要根据之前引用的文档、将_dual_header 预定义符号添加到您的 CCS 工程中。

    当结合位字段和 driverlib 支持时、在项目属性中添加一个预定义符号
    称为"_dual_headers"。 这是避免定义冲突所必需的(在中
    在位字段和 driverlib 头文件中共享完全相同的名称的枚举/结构/宏。

    步骤如下:

    右键单击 Project Explorer 中的工程->选择 Properties -> Build -> C2000编译器-> Predefined Symbols -> Add '_DUAL_HEADLE'

    最棒的

    Kevin

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

    大家好、Kevin

    将代码从 F28004x 移植到 F28002x 时仍然存在问题。

    在编译期间、我遇到如下错误。

    subdir_rules.mk:9:目标'HRPWM_ex2_prdupdown_SFO_v8.obj'的配方失败
    "../HRPWM_ex2_prdupdown_SFO_v8.c"、第285行:错误#137:结构"PCLKCR0_bits"没有字段"HRPWM"
    "./HRPWM_ex2_prdupdown_SFO_v8.c"、第306行:错误#137:结构"TBCTL_BITS"没有字段"SYNCOSEL"

    原因如下

    1.  CpuSysRegs.PCLKCR0.bit.HRPWM = 1;

    EPwm1Regs.TBCTL.bit.SYNCOSEL    = TB_SYNC_DISABLE;

    我检查 了引用结构 PCLKCR0的 PCLKCR0、但是没有 HRPWM 位

    struct PCLKCR0_bits{                  // bits description
       uint16 rsvd1:1;                    // 0保留
       uint16 rsvd2:1;                    // 1保留
       uint16 dma:1;                      // 2 dma 时钟使能位
       UINT16 CPUTIMEER0:1;                // 3 CPUTIME0时钟使能位
       UINT16 CPUTIMEER1:1;                // 4 CPUTIMEER1时钟使能位
       UINT16 CPUTIMEER2:1;                // 5 CPUTIMEER2时钟使能位
       uint16 rsvd3:7;                    // 12:6保留
       UINT16 CPUBGCRC:1;                 // 13 CPUBGCRC 时钟使能位
       uint16 rsvd4:2;                    // 15:14保留
       UINT16 HRCAL:1;                    // 16 HRCAL 时钟使能位
       uint16 rsvd5:1;                    // 17保留
       UINT16 TBCLKSYNC:1;                // 18 ePWM 时基时钟同步
       uint16 rsvd6:1;                    // 19保留
       uint16 rsvd7:4;                    // 23:20保留
       uint16 ERAD:1;                     // 24 ERAD 模块时钟启用
       uint16 rsvd8:7;                    // 31:25保留
    };

    我检查属于结构 TBCTL_BITS 的 TBCTL、但没有 SYNCOSEL 位

    struct TBCTL_bits{                    // bits description
       UINT16 CTRMODE:2;                  // 1:0计数器模式
       UINT16 PHSEN:1;                    //启用两相加载
       uint16 PRDLD:1;                    // 3有源周期负载
       uint16 rsvd1:2;                    // 5:4保留
       UINT16 SWFSYNC:1;                  // 6软件强制同步脉冲
       UINT16 HSPCLKDIV:3;                // 9:7高速 TBCLK 预分频器
       UINT16 CLKDIV:3;                   // 12:10时基时钟预分频器
       UINT16 PHSDIR:1;                   // 13相位方向位
       UINT16 FREE_SOFT:2;                // 15:14仿真模式位
    };

    请建议如何解决。

    谢谢

    HK Woo

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

    您好、HK Woo、

    正如我之前提到的、在移植到 F28002x 时将进行一些小改动。 您应该花些时间了解器件差异(例如 EPWM/HRPWM 模块)并查看相应的 TRM 部分。

    下面的参考指南简要介绍了 C2000器件之间的外设差异:

    https://www.ti.com/lit/spru566

    您将看到、对于 F28002x 和更新的器件、HRPWM 有一个变化:"到各个 HRPWM 模块的时钟将被连接到相应的 ePWM。"

    请查看以下目录中的 C2000WARE 示例、以进一步了解 SW 配置:

    C:\ti\c2000\C2000Ware_4_00_00_00\device_support\f28002x\examples\HRPWM

    最棒的

    Kevin

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

    大家好、Kevin

    感谢您的进步。 但是、我仍然对如何使用 HRPWM 生成143.75Khz 和131.25Khz 有疑问。 我导入位字段示例 HRPWM_ex2_prdupdown_SFO_V8。

    我修改了以下代码

    1.HRPWM_Config (20)至 HRPWM_Config (347)

    2.(* ePWM[1]).TBPRDHR = 211U << 8;/211<< 8是 F28004x AFE301 PWM 模式下的代码、它位于项目1之后

    3、STATUS = SFO ();//在#2之后,我不知道 SFO ()是否必要。 我在 F28004x 代码中看不到它

    4.我在第一级注释所有代码以用于循环。

    但是、仍然无法生成143.75KHz。

    我的问题是什么?

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

    您好、HK Woo、

    [引用 userid="46959" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1054915/tms320f280025-ti-afe301-demo-code-to-c2000ware/3907959 #3907959"] 1.HRPWM_Config (20)到 HRPWM_Config (347)[/quot]

    此函数不仅仅更改周期和比较值。 为什么不将原始示例中的代码部分用于此部分? 我认为 F28002x 和 F28004x PWM 模块之间的时钟机制是不同的。

                    EPwm6Regs.TBPRD = 347;
                    EPwm6Regs.TBPRDHR = (211U << 8);
                    EPwm6Regs.CMPA.bit.CMPA = EPWM1A_SPACE_COMPARE; // Set compare A value
                    EPwm6Regs.CMPB.bit.CMPB = EPWM1B_SPACE_COMPARE; // Set Compare B value

    [引用 userid="46959" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1054915/tms320f280025-ti-afe301-demo-code-to-c2000ware/3907959 #3907959]3. 状态= SFO ();//在#2之后,我不知道 SFO ()是否必要。 我在 F28004x[/quot]代码中看不到它

    F28004x 代码中也使用 SFO、但可能会有所不同。 在项目中搜索 SFO。

    最棒的

    Kevin