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.
您好!
在使用两个 CPU 的 LAUNCHXL-F28P65X 板上、我面临一个测试项目问题、其中我设置了一个 EPWM 通道(在单个 CPU 项目上运行)、但在 EPWM 通道5 (GPIO 8和9)的引脚上没有输出。
我使用 SysConfig 工具设置项目。 我的一般配置为:
ePWM 功能完全独立于我添加到两个 CPU 的其他功能。 ePWM 的定义在 board.c/.h 中生成以下源代码。 默认情况下、ePWM5被 CPU1保留。 在 device.c 中启用 ePWM 外设。
有任何想法为什么我在 GPIO 8和9上没有为我的 ePWM5获得输出信号?
board.h:
//
// EPWM5 -> myEPWM0引脚多路复用
//
//
// EPWM5_A - GPIO 设置
//
#define GPIO_PIN_EPWM5_A 8
#define myEPWM0_EPWMA_GPIO 8
#define myEPWM0_EPWMA_PIN_CONFIG GPIO_8_EPWM5_A
//
// EPWM5_B - GPIO 设置
//
#define GPIO_PIN_EPWM5_B 9
#define myEPWM0_EPWMB_GPIO 9
#define myEPWM0_EPWMB_PIN_CONFIG GPIO_9_EPWM5_B
//*****
//
// ePWM 配置
//
//*****
#define myEPWM0_BASE EPWM5_BASE
#define myEPWM0_TBPRD 500
#define myEPWM0_COUNTER_MODE EPWM_COUNTER_MODE_UP_DOWN
#define myEPWM0_TBPHS 250
#define myEPWM0_CMPA 275
#define myEPWM0_CMPB 200
#define myEPWM0_CMPC 0
#define myEPWM0_CMPD 0
#define myEPWM0_DBRED 0
#define myEPWM0_DBFED 0
#define myEPWM0_TZA_ACTION EPWM_TZ_ACTION_HIGH_Z
#define myEPWM0_TZB_ACTION ePWM_TZ_ACTION_HIGH_Z
#define myEPWM0_INTERRUPT_SOURCE EPWM_INT_TBCTR_DISABLED
board.c:
//*****
//
// ePWM 配置
//
//*****
void ePWM_init (){
ePWM_setClockPrescaler (myEPWM0_BASE、ePWM_CLOCK_DIVIDER _1、ePWM_HSCLOCK_DIVIDER_4);
EPWM_setTimeBasePeriod (myEPWM0_BASE、500);
EPWM_setTimeBaseCounter (myEPWM0_BASE、0);
EPWM_setTimeBaseCounterMode (myEPWM0_BASE、EPWM_COUNTER_MODE_UP_DOWN);
EPWM_enablePhaseShiftLoad (myEPWM0_BASE);
EPWM_setPhaseShift (myEPWM0_BASE、250);
EPWM_setSyncInPulseSource (myEPWM0_BASE、EPWM_SYNC_IN_PULSE_SRC_DISABLE);
EPWM_setCounterCompareValue (myEPWM0_BASE、EPWM_COUNTER_COMPARE_A、275);
EPWM_setCounterCompareShadowLoadMode (myEPWM0_BASE、EPWM_COUNTER_COMPARE_A、EPWM_COMP_LOAD_ON_CNTR_ZERO);
EPWM_setCounterCompareValue (myEPWM0_BASE、EPWM_COUNTER_COMPARE_B、200);
EPWM_setCounterCompareShadowLoadMode (myEPWM0_BASE、EPWM_COUNTER_COMPARE_B、EPWM_COMP_LOAD_ON_CNTR_ZERO);
EPWM_setActionQualifierT2TriggerSource (myEPWM0_BASE、EPWM_AQ_TRIGG_EVENT_TRIG_DCA_2);
EPWM_enableGlobalLoadRegisters (myEPWM0_BASE、EPWM_GL_REGISTER_AQCTLA_AQCTLA2);
EPWM_setActionQualifierAction (myEPWM0_BASE、EPWM_AQ_OUTPUT_A、EPWM_AQ_OUTPUT_NO_CHANGE、EPWM_AQ_OUTPUT_ON_TIMEBASE_ZERO);
EPWM_setActionQualifierAction (myEPWM0_BASE、EPWM_AQ_OUTPUT_A、EPWM_AQ_OUTPUT_NO_CHANGE、EPWM_AQ_OUTPUT_ON_TIMEBASE_PERIOD);
EPWM_setActionQualifierAction (myEPWM0_BASE、EPWM_AQ_OUTPUT_A、EPWM_AQ_OUTPUT_HIGH、EPWM_AQ_OUTPUT_ON_TIMEBASE_UP_CMPA);
EPWM_setActionQualifierAction (myEPWM0_BASE、EPWM_AQ_OUTPUT_A、EPWM_AQ_OUTPUT_LOW、EPWM_AQ_OUTPUT_ON_TIMEBASE_DOWN_CMPA);
EPWM_setActionQualifierAction (myEPWM0_BASE、EPWM_AQ_OUTPUT_A、EPWM_AQ_OUTPUT_NO_CHANGE、EPWM_AQ_OUTPUT_ON_TIMEBASE_UP_CMPB);
EPWM_setActionQualifierAction (myEPWM0_BASE、EPWM_AQ_OUTPUT_A、EPWM_AQ_OUTPUT_NO_CHANGE、EPWM_AQ_OUTPUT_ON_TIMEBASE_DOWN_CMPB);
EPWM_enableGlobalLoadRegisters (myEPWM0_BASE、EPWM_GL_REGISTER_AQCTLB_AQCTLB2);
EPWM_setActionQualifierAction (myEPWM0_BASE、EPWM_AQ_OUTPUT_B、EPWM_AQ_OUTPUT_NO_CHANGE、EPWM_AQ_OUTPUT_ON_TIMEBASE_ZERO);
EPWM_setActionQualifierAction (myEPWM0_BASE、EPWM_AQ_OUTPUT_B、EPWM_AQ_OUTPUT_NO_CHANGE、EPWM_AQ_OUTPUT_ON_TIMEBASE_PERIOD);
EPWM_setActionQualifierAction (myEPWM0_BASE、EPWM_AQ_OUTPUT_B、EPWM_AQ_OUTPUT_NO_CHANGE、EPWM_AQ_OUTPUT_ON_TIMEBASE_UP_CMPA);
EPWM_setActionQualifierAction (myEPWM0_BASE、EPWM_AQ_OUTPUT_B、EPWM_AQ_OUTPUT_NO_CHANGE、EPWM_AQ_OUTPUT_ON_TIMEBASE_DOWN_CMPA);
EPWM_setActionQualifierAction (myEPWM0_BASE、EPWM_AQ_OUTPUT_B、EPWM_AQ_OUTPUT_LOW、EPWM_AQ_OUTPUT_ON_TIMEBASE_UP_CMPB);
EPWM_setActionQualifierAction (myEPWM0_BASE、EPWM_AQ_OUTPUT_B、EPWM_AQ_OUTPUT_HIGH、EPWM_AQ_OUTPUT_ON_TIMEBASE_DOWN_CMPB);
ePWM_setRisingEdgeDelayCountShadowLoadMode (myEPWM0_BASE、ePWM_RED_LOAD_ON_CNTR_ZERO);
ePWM_disableRisingEdgeDelayCountShadowLoadMode (myEPWM0_BASE);
EPWM_setFallingEdgeDelayCountShadowLoadMode (myEPWM0_BASE、EPWM_FED_LOAD_ON_CNTR_ZERO);
ePWM_disableFallingEdgeDelayCountShadowLoadMode (myEPWM0_BASE);
}
此致
帕特里克
尊敬的 Patrik:
我怀疑 pinMux 问题、您可以帮助我了解项目详细信息吗、它是一个"系统"项目还是两个单核项目吗? 此外、两个 CPU 中是否都使用了 ePWM 5?
谢谢。此致、
马德哈瓦
尊敬的 Madhava:
感谢您的答复。
该项目由三个 CCS 项目组成、这些项目具有一个一般多项目、每个 CPU 一个。 我从 C2000Ware 5.2.0中导入了项目(当时为 IPC 双核示例)。 ePWM 仅在 CPU1中使用、并且定义了必要的 GPIO (#8和#9)、并仅在该 CPU 中使用 ePWM 的 SysConfig 中的 PinMux 部分。
由于外设的默认用法是在 CPU1上使用、因此我在这里不做任何更改。 外设也已启用、针对此模式的访问控制为默认值、意思是"针对读取和写入的完全访问"。
尊敬的 Patrik:
感谢您的答复! 我尝试了使用 ipc_basic_syscfg_multiple 示例。 我已经在 CPU1中添加了 EPWM5并在 board.c 中检查了 pinmux_init ()。 以下是我的观察。
pinmux_init ()代码包含以下行,请注意,无论外设添加到哪个内核 SysConfig ,它始终存在于 CPU1中。
// // EPWM5 -> myEPWM0 Pinmux // GPIO_setPinConfig(myEPWM0_EPWMA_PIN_CONFIG); GPIO_setPadConfig(myEPWM0_EPWMA_GPIO, GPIO_PIN_TYPE_STD); GPIO_setQualificationMode(myEPWM0_EPWMA_GPIO, GPIO_QUAL_SYNC); GPIO_setPinConfig(myEPWM0_EPWMB_PIN_CONFIG); GPIO_setPadConfig(myEPWM0_EPWMB_GPIO, GPIO_PIN_TYPE_STD); GPIO_setQualificationMode(myEPWM0_EPWMB_GPIO, GPIO_QUAL_SYNC);
下面是我关于您的设置的问题。 您能否同时提供这些信息?
谢谢。此致、
马德哈瓦
尊敬的 Madhava:
PinMux_init()在 CPU1的 Board_init()中被调用为第一项,其中正好描述了您所提到的代码。
关于您的其他问题:
PWM 的配置在 CPU1中完成
2.生成一个 PinMux_init()函数,用于配置所使用的 GPIO。
3. PinMux_init ()函数是 Board_Init ()函数中第一个被调用的函数
生成的 PinMux_init()函数正在工作,因为所有其他配置的 GPIO 都在正常工作。
此致
帕特里克
#include "board.h"
//*****
//
//板配置
//初始化模块的其余部分。
//如果您希望执行所有模块,请在您的应用程序中调用此函数
//初始化。
//如果您不想使用某些初始化,而不使用
// Board_init 使用单个模块初始化
//
//*****
void Board_init()
{
EALLOW;
PinMux_init ();
sysctl_init();
sync_init();
ASYSCTL_init ();
MEMCFG_init ();
adc_init();
can_init();
CPUTIME_INIT();
ePWM_init ();
GPIO_init ();
IPC_SYSCFG_init ();
interrupt_init();
EDIS;
}
//*****
//
// PINMUX 配置
//
//*****
void PinMux_init ()
{
//
//分配给 CPU1的模块的 PinMux
//
//
//模拟-> myANALOGUEPinMux0引脚多路复用
//
//用于 A0/DACA_OUT 的模拟引脚多路复用器
GPIO_setPinConfig (GPIO_227_GPIO227);
// AIO ->已选择模拟模式
GPIO_setAnalogMode (227、GPIO_analog_enabled);
//针对 B1/DACC_OUT 的模拟引脚多路复用器
GPIO_setPinConfig (GPIO_234_GPIO234);
// AIO ->已选择模拟模式
GPIO_setAnalogMode (234、GPIO_ANALOG_ENABLED);
//
// CANA -> myCAN0 Pinmux
//
GPIO_setPinConfig (myCAN0_CANRX_PIN_CONFIG);
GPIO_setPadConfig (myCAN0_CANRX_GPIO、GPIO_PIN_TYPE_STD | GPIO_PIN_TYPE_PULLUP);
GPIO_setQualificationMode (myCAN0_CANRX_GPIO、GPIO_QUAL_ASYNC);
GPIO_setPinConfig (myCAN0_CANTX_PIN_CONFIG);
GPIO_setPadConfig (myCAN0_CANTX_GPIO、GPIO_PIN_TYPE_STD | GPIO_PIN_TYPE_PULLUP);
GPIO_setQualificationMode (myCAN0_CANTX_GPIO、GPIO_QUAL_ASYNC);
//
// EPWM5 -> myEPWM 引脚多路复用
//
GPIO_setPinConfig (myEPWM_EPWMA_PIN_CONFIG);
GPIO_setPadConfig (myEPWM_EPWMA_GPIO、GPIO_PIN_TYPE_STD);
GPIO_setQualificationMode (myEPWM_EPWMA_GPIO、GPIO_QUAL_SYNC);
GPIO_setPinConfig (myEPWM_EPWMB_PIN_CONFIG);
GPIO_setPadConfig (myEPWM_EPWMB_GPIO、GPIO_PIN_TYPE_STD);
GPIO_setQualificationMode (myEPWM_EPWMB_GPIO、GPIO_QUAL_SYNC);
// GPIO13 -> myGPIO0引脚多路复用
GPIO_setPinConfig (GPIO_13_GPIO13);
// GPIO25 -> myCPU1Toggle_GPIO0引脚多路复用
GPIO_setPinConfig (GPIO_25_GPIO25);
//
//分配给 CPU2的模块的 PinMux
//
//
// SCIB -> mySCIB 引脚多路复用
//
GPIO_setPinConfig (mySCIB_SCIRX_PIN_CONFIG);
GPIO_setPadConfig (mySCIB_SCIRX_GPIO、GPIO_PIN_TYPE_STD | GPIO_PIN_TYPE_PULLUP);
GPIO_setQualificationMode (mySCIB_SCIRX_GPIO、GPIO_QUAL_ASYNC);
GPIO_setPinConfig (mySCIB_SCITX_PIN_CONFIG);
GPIO_setPadConfig (mySCIB_SCITX_GPIO、GPIO_PIN_TYPE_STD | GPIO_PIN_TYPE_PULLUP);
GPIO_setQualificationMode (mySCIB_SCITX_GPIO、GPIO_QUAL_ASYNC);
}