在线时间37 小时
UID3533948
注册时间2020-7-22
NXP金币12
该用户从未签到
中级会员
 
- 积分
- 382
- 最后登录
- 2025-3-3
|

楼主 |
发表于 2021-8-27 16:03:49
|
显示全部楼层
后面我把好多寄存器清0了,还是相同结果 ,能帮我看下代码有啥子问题吗?
- /*
- * Copyright (c) 2015, Freescale Semiconductor, Inc.
- * Copyright 2016-2017 NXP
- * All rights reserved.
- *
- * SPDX-License-Identifier: BSD-3-Clause
- */
- #include "fsl_debug_console.h"
- #include "pin_mux.h"
- #include "board.h"
- #include "fsl_pwm.h"
- #include "fsl_xbara.h"
- #include "fsl_iomuxc.h"
- #include "pin_mux.h"
- #include "fsl_edma.h"
- #include "fsl_dmamux.h"
- /*******************************************************************************
- * Definitions
- ******************************************************************************/
- #define PWM_SRC_CLK_FREQ CLOCK_GetRootClockFreq(kCLOCK_Root_Bus)
- /*******************************************************************************
- * Prototypes
- ******************************************************************************/
- /*******************************************************************************
- * Variables
- ******************************************************************************/
- volatile uint32_t Target_PWM2_Module2A_number = 0;
- volatile uint32_t PWM2_Module2A_number = 0;
- /*******************************************************************************
- * Code
- ******************************************************************************/
-
- void PWM2_2_IRQHandler(void)
- {
- PWM2->SM[kPWM_Module_2].STS = ((uint16_t)kPWM_CompareVal5Flag);
- PWM2_Module2A_number++;
- if(PWM2_Module2A_number == Target_PWM2_Module2A_number)
- {
- PWM2->OUTEN &= ~(kPWM_Control_Module_2 << 8 | kPWM_Control_Module_2 << 4);
- PWM_StopTimer(PWM2, kPWM_Control_Module_2);
- }
- }
- int pwmInit()
- {
- pwm_config_t pwmConfig;
- CLOCK_EnableClock(kCLOCK_Iomuxc); /**< \brief 使能引脚开关时钟 */
- /* 设置FLEXPWM的分频系数,模式 */
- PWM_GetDefaultConfig(&pwmConfig);
- pwmConfig.prescale = kPWM_Prescale_Divide_1; /**< \brief 1分频 240M/1 = 240MHZ */
- pwmConfig.reloadLogic = kPWM_ReloadImmediate; /**< \brief 立即加载 */
- pwmConfig.pairOperation = kPWM_Independent; /**< \brief 独立模式 */
- pwmConfig.enableDebugMode = true;
-
- IOMUXC_SetPinMux(IOMUXC_GPIO_AD_28_FLEXPWM2_PWM2_A, 0); /**< \brief 初始化 STEP4 脉冲引脚 */
- IOMUXC_SetPinMux(IOMUXC_GPIO_AD_29_FLEXPWM2_PWM2_B, 0); /**< \brief 初始化 STEP4 方向引脚 */
- GPIO_WritePinOutput(GPIO3, 27, 0);
- GPIO_WritePinOutput(GPIO3, 28, 0);
- if(PWM_Init(PWM2, kPWM_Module_2, &pwmConfig) == kStatus_Fail)
- {
- return -1;
- }
- PWM2->SM[2].DISMAP[0]=0;
-
- return 0;
- }
- void set_pwm_out(uint16_t pulse, uint8_t duty)
- {
- uint32_t pwmFrequencyInHz = 1000000; /**< \brief 1MHZ*/
- pwm_signal_param_t pwmSignal[2];
-
- PWM2_Module2A_number = 0;
- Target_PWM2_Module2A_number = pulse;
- pwmSignal[0].pwmChannel = kPWM_PwmA;
- pwmSignal[0].level = kPWM_HighTrue;
- pwmSignal[0].dutyCyclePercent = duty;
- pwmSignal[1].pwmChannel = kPWM_PwmB;
- pwmSignal[1].level = kPWM_HighTrue;
- pwmSignal[1].dutyCyclePercent = duty;
- PWM_SetupPwm(PWM2, kPWM_Module_2, pwmSignal, 2, kPWM_EdgeAligned,
- pwmFrequencyInHz,PWM_SRC_CLK_FREQ); /**< \brief OUTEN 写1电平会被拉高 */
- PRINTF("VAL3=%d\n",PWM2->SM[2].VAL3);
- PWM_SetPwmLdok(PWM2, kPWM_Control_Module_2, true);
- PRINTF("VAL5=%d\n",PWM2->SM[2].VAL5);
- PRINTF("VAL5=%d\n",PWM2->SM[2].VAL1);
- PWM_EnableInterrupts(PWM2,kPWM_Module_2,kPWM_CompareVal5Flag); /**< \brief 使能中断 */
- EnableIRQ(PWM2_2_IRQn);
- PWM_StartTimer(PWM2, kPWM_Control_Module_2);
-
- }
- /*!
- * @brief Main function
- */
- int main(void)
- {
- /* Board pin, clock, debug console init */
- BOARD_ConfigMPU();
- BOARD_InitPins();
- BOARD_BootClockRUN();
- BOARD_InitDebugConsole();
- /* Set the PWM Fault inputs to a low value */
- XBARA_Init(XBARA1);
- XBARA_SetSignalsConnection(XBARA1, kXBARA1_InputLogicHigh, kXBARA1_OutputFlexpwm1Fault0);
- XBARA_SetSignalsConnection(XBARA1, kXBARA1_InputLogicHigh, kXBARA1_OutputFlexpwm1Fault1);
- XBARA_SetSignalsConnection(XBARA1, kXBARA1_InputLogicHigh, kXBARA1_OutputFlexpwm1234Fault2);
- XBARA_SetSignalsConnection(XBARA1, kXBARA1_InputLogicHigh, kXBARA1_OutputFlexpwm1234Fault3);
-
- PRINTF("FlexPWM driver example\n");
- pwmInit();
- while (1U)
- {
- PRINTF("please input a key\n");
- GETCHAR();
- PWM2->SM[kPWM_Module_2].INIT = 0;
- PWM2->SM[kPWM_Module_2].CTRL2 = 0;
- PWM2->SM[kPWM_Module_2].CTRL = 0X400;
- PWM2->SM[kPWM_Module_2].VAL0 = 0;
- PWM2->SM[kPWM_Module_2].FRACVAL1 = 0;
- PWM2->SM[kPWM_Module_2].VAL1 = 0;
- PWM2->SM[kPWM_Module_2].FRACVAL2 = 0;
- PWM2->SM[kPWM_Module_2].VAL2 = 0;
- PWM2->SM[kPWM_Module_2].FRACVAL3 = 0;
- PWM2->SM[kPWM_Module_2].VAL3 = 0;
- PWM2->SM[kPWM_Module_2].FRACVAL4 = 0;
- PWM2->SM[kPWM_Module_2].VAL4 = 0;
- PWM2->SM[kPWM_Module_2].FRACVAL5 = 0;
- PWM2->SM[kPWM_Module_2].VAL5 = 0;
- PWM2->SM[kPWM_Module_2].FRCTRL = 0;
- PWM2->SM[kPWM_Module_2].OCTRL = 0;
- PWM2->SM[kPWM_Module_2].STS = 0xffff; /**< \brief 清除中断标志 */
- PWM2->SM[kPWM_Module_2].INTEN = 0;
- PWM2->SM[kPWM_Module_2].DMAEN = 0;
- PWM2->SM[kPWM_Module_2].TCTRL = 0;
- PWM2->SM[kPWM_Module_2].DISMAP[0] = 0XFFFF;
- PWM2->SM[kPWM_Module_2].DTCNT0 =0x7ff;
- PWM2->SM[kPWM_Module_2].DTCNT1 =0x7ff;
- PWM2->DTSRCSEL = 0;
- PWM2->FCTRL = 0;
- PWM2->FCTRL2 = 0;
- PWM2->FFILT = 0;
- PWM2->FFILT = 0;
- PWM2->FSTS = 0;
- PWM2->FTST = 0;
- PWM2->MASK = 0;
- PWM2->MCTRL = 0;
- PWM2->MCTRL2 = 0;
- PWM2->OUTEN = 0;
- PWM2->SWCOUT = 0;
- pwmInit();
- set_pwm_out(1000,80); /**< \brief 输出1000个PWM,占空比80%*/
- }
- }
复制代码 |
|