主题中讨论的其他器件:C2000WARE、 AFE031
你(们)好
我的项目是在 driverlab 下开发的。 我想知道如何将演示示例 boostxl_afe031_f28004x_pwmmode 从 TI 直接用于我的 C2000Ware 项目。 演示演示代码位于位字段中。 感谢您的支持。
BR
HK Woo
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.
你(们)好
我的项目是在 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