查看: 7177|回复: 8

[求助] flexpwm 用作输入捕获功能

[复制链接]

该用户从未签到

1

主题

4

帖子

0

新手上路

Rank: 1

积分
39
最后登录
2020-8-20
发表于 2020-8-19 14:04: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

PWM_Capture_test

Capture_config

Capture_config
回复

使用道具 举报

该用户从未签到

712

主题

6371

帖子

0

超级版主

Rank: 8Rank: 8

积分
24861
最后登录
2025-7-18
发表于 2020-8-19 15:31:10 | 显示全部楼层
楼主你好!
如果使用的是野火的代码,建议你到野火论坛去问问,他们那边应该会给你提供直接的支持。
回复 支持 反对

使用道具 举报

该用户从未签到

1

主题

4

帖子

0

新手上路

Rank: 1

积分
39
最后登录
2020-8-20
 楼主| 发表于 2020-8-19 16:17:38 | 显示全部楼层
小恩GG 发表于 2020-8-19 15:31
楼主你好!
如果使用的是野火的代码,建议你到野火论坛去问问,他们那边应该会给你提供直接的支持。
...

嗯,好的。
您这边有flexpwm做输入捕获的demo吗
回复 支持 反对

使用道具 举报

该用户从未签到

712

主题

6371

帖子

0

超级版主

Rank: 8Rank: 8

积分
24861
最后登录
2025-7-18
发表于 2020-8-19 16:29:02 | 显示全部楼层
子衿-- 发表于 2020-8-19 16:17
嗯,好的。
您这边有flexpwm做输入捕获的demo吗

你是RT多少的芯片,我给你找看看。
SDK里面我看了下,只有PWM的。
不过我看了我们的fsl_pwm.c,是有capture的API的。
/*!
* brief Sets up the PWM input capture
*
* Each PWM submodule has 3 pins that can be configured for use as input capture pins. This function
* sets up the capture parameters for each pin and enables the pin for input capture operation.
*
* param base               PWM peripheral base address
* param subModule          PWM submodule to configure
* param pwmChannel         Channel in the submodule to setup
* param inputCaptureParams Parameters passed in to set up the input pin
*/
void PWM_SetupInputCapture(PWM_Type *base,
                           pwm_submodule_t subModule,
                           pwm_channels_t pwmChannel,
                           const pwm_input_capture_param_t *inputCaptureParams)
你可以看看SDK驱动,尝试下配置API,然后看是否能够工作
回复 支持 反对

使用道具 举报

该用户从未签到

1

主题

4

帖子

0

新手上路

Rank: 1

积分
39
最后登录
2020-8-20
 楼主| 发表于 2020-8-19 16:38:52 | 显示全部楼层
小恩GG 发表于 2020-8-19 16:29
你是RT多少的芯片,我给你找看看。
SDK里面我看了下,只有PWM的。
不过我看了我们的fsl_pwm.c,是有captu ...

嗯,谢谢。使用的RT1064芯片
回复 支持 反对

使用道具 举报

该用户从未签到

712

主题

6371

帖子

0

超级版主

Rank: 8Rank: 8

积分
24861
最后登录
2025-7-18
发表于 2020-8-19 17:06:45 | 显示全部楼层
子衿-- 发表于 2020-8-19 16:38
嗯,谢谢。使用的RT1064芯片

嗯,刚看了下SDK,RT1064确实也只有PWM的,但是你可以试试配置API调用看看,是否能够成功。
回复 支持 反对

使用道具 举报

该用户从未签到

1

主题

4

帖子

0

新手上路

Rank: 1

积分
39
最后登录
2020-8-20
 楼主| 发表于 2020-8-19 18:25:35 | 显示全部楼层
小恩GG 发表于 2020-8-19 17:06
嗯,刚看了下SDK,RT1064确实也只有PWM的,但是你可以试试配置API调用看看,是否能够成功。 ...

折腾了一下,调用API产生不了捕获中断,reload中断倒是可以产生,看PWM_SetupInputCapture()函数挺简单的,估计是哪里出了问题,只能使用GPT做PWM输入捕获了,这个到没问题。
网上搜了一圈,好像没发现有谁用flexpwm做过输入捕获。
回复 支持 反对

使用道具 举报

该用户从未签到

712

主题

6371

帖子

0

超级版主

Rank: 8Rank: 8

积分
24861
最后登录
2025-7-18
发表于 2020-8-24 11:10:40 | 显示全部楼层
子衿-- 发表于 2020-8-19 18:25
折腾了一下,调用API产生不了捕获中断,reload中断倒是可以产生,看PWM_SetupInputCapture()函数挺简单 ...

暂时还没看到直接RT flexPWM捕获的代码,不过可以仔细看看RM中对应的寄存器,在你调用对应的API之后,是否都配置了对应的capture寄存器,如果都配置了,应该问题不大,有可能还有些相关寄存器没有被API直接配置到。
回复 支持 反对

使用道具 举报

该用户从未签到

9

主题

25

帖子

0

注册会员

Rank: 2

积分
191
最后登录
2023-4-12
发表于 2021-12-27 09:53:50 | 显示全部楼层
楼主有调通这个功能吗,我现在也要用到这个功能
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条

Archiver|手机版|小黑屋|恩智浦技术社区

GMT+8, 2025-7-19 00:43 , Processed in 0.101329 second(s), 28 queries , MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

快速回复 返回顶部 返回列表