在线时间3 小时
UID3346686
注册时间2019-5-6
NXP金币0
该用户从未签到
新手上路

- 积分
- 39
- 最后登录
- 2020-8-20
|
请问有谁使用过flexpwm的pwm输入捕获功能吗,我这边参考野火的pwm捕获demo,一直无法产生捕获中断,有没有什么建议或者demo
void PWM_Capture_test()
{
UINT32 sourceclock;
pwm_signal_param_t pwm_signal;
pwm_config_t PWM_Config;
PwmIndex_Enum Index;
UINT32 freq;
UINT8 duty;
freq = 1000;
duty = 50;
PWM_IoConfig(Index);
PWM_GetDefaultConfig(& WM_Config); /*先初始化为默认配置*/
PWM_Config.clockSource = kPWM_BusClock; /*时钟源为IP BUS=IPG_CLK_ROOT=150MHz*/
PWM_Config.prescale = kPWM_Prescale_Divide_128; /*设置分频*/
PWM_Config.reloadLogic = kPWM_ReloadPwmFullCycle; /*全周期更新*/
PWM_Config.pairOperation = kPWM_Independent; /*PMWA PWMB独立模式*/
PWM_Config.enableDebugMode = true; /*Debug模式使能*/
if(PWM_Init(PWM1,kPWM_Module_2,& WM_Config) == kStatus_Fail)/*初始化PWMx模块X*/
{
PRINTF(" WM_DriverInit PWM INIT %d fail! \r\n",Index);
}
PWM2->SM[2].DISMAP[0]=0; /*屏蔽故障检测功能*/
sourceclock=CLOCK_GetFreq(kCLOCK_IpgClk);
if(freq <= (sourceclock/128/65535))/*计算能够输出的最低频率*/
{
PRINTF(" WM_DriverInit PWM %d Frequency Is Too Low \r\n",Index);
freq = PwmConfigList[Index].PwmFreqDef;
}
pwm_signal.pwmChannel=kPWM_PwmA; /*PWM通道*/
pwm_signal.level=kPWM_HighTrue; /*高电平有效*/
pwm_signal.dutyCyclePercent=duty; /*占空比*/
PWM_SetupPwm(PWM1,kPWM_Module_2,&pwm_signal,1,kPWM_SignedEdgeAligned,freq,sourceclock);
PWM_SetPwmLdok(PWM1,kPWM_Control_Module_2,true); /*设置Set LDOK 位,将初始化参数加载到相应的寄存器*/
Capture_config();
PWM_StartTimer(PWM1,kPWM_Control_Module_2);/*开启定时器*/
}
void Capture_config(void)
{
pwm_input_capture_param_t pwm_input_capture;
gpio_pin_config_t PWM_pin_config;
IOMUXC_SetPinMux(IOMUXC_GPIO_SD_B0_05_FLEXPWM1_PWMB02,0);
IOMUXC_SetPinConfig(IOMUXC_GPIO_SD_B0_05_FLEXPWM1_PWMB02,0xF080);
PWM_pin_config.direction = kGPIO_DigitalInput;
PWM_pin_config.interruptMode = kGPIO_NoIntmode;
GPIO_PinInit(GPIO3, 17, & WM_pin_config);
/*初始化输入捕获配置参数*/
pwm_input_capture.captureInputSel = false;
pwm_input_capture.edge0 = kPWM_RisingEdge;
pwm_input_capture.edge1 = kPWM_FallingEdge;
pwm_input_capture.enableOneShotCapture = false;
pwm_input_capture.edgeCompareValue = 10;
pwm_input_capture.fifoWatermark = 2;
PWM_SetupInputCapture(PWM1, kPWM_Module_2, kPWM_PwmB, &pwm_input_capture);
/*开启捕获中断*/
//set_IRQn_Priority(PWM1_0_IRQn,Group4_PreemptPriority_0, Group4_SubPriority_0);//设置中断优先级
PWM_EnableInterrupts(PWM1, kPWM_Module_2, kPWM_CaptureB1InterruptEnable|kPWM_CaptureB0InterruptEnable);//使能捕获中断
EnableIRQ(PWM1_2_IRQn);
}
|
-
PWM_Capture_test
-
Capture_config
|