RT1176 PWM startup failed

取消
显示结果 
显示  仅  | 搜索替代 
您的意思是: 

RT1176 PWM startup failed

499 次查看
liu626
Contributor I

I am using PWM + fault + QTimer to implement motor pulse control, but the PWM3 submodule 0 PWM_A channel occasionally fails to start, where after the first high level it remains constant and subsequent pulses do not appear.After the inspection, it was found that the "run" bit of the pwm was not correctly set. Even though repeated startup operations were added in the program later, this anomaly still occurred.

liu626_0-1782287927569.png

 

0 项奖励
回复
4 回复数

428 次查看
Pablo_Ramos
NXP Employee
NXP Employee

Hi @liu626,

Are you using a custom board or an EVK? If you are using the EVK, did you make any rework to it?

Could you share the configuration you are using for PWM3?

Are you using an example as a reference? If so, which one?

If you try to replicate the issue using a project with only PWM3, does the problem persist?

Does this only happen with PWM3 submodule 0 PWM_A channel? Has this occurred on other PWM modules or submodules?

Is there any other task or interrupt that manipulates PWM3 registers and could affect or overwrite the run bit?

Best Regards,
Pablo

0 项奖励
回复

409 次查看
liu626
Contributor I
hi,I used a custom circuit board. I didn't refer to any examples. This was a problem that was discovered during the official development of the project. I configured six PWM channels for pulse control. Only this channel had problems, while no such issue occurred on the other sub-modules. I checked and found that only this channel was using the PWM3 module. No other interfering factors were detected. Below is my configuration.
static axis_ctrl_t g_axes[AXIS_NUM] =
{
{
.id = AXIS_X1, .name = "X1",
.pwmBase = PWM1, .pwmModule = kPWM_Module_0, .pwmChannel = kPWM_PwmA,
.tmrBase = TMR3, .lowCh = kQTMR_Channel_2, .highCh = kQTMR_Channel_3,
.tmrInputsrc=kQTMR_ClockCounter2InputPin, .cascadePcs = 6U,
.faultNum = 0U, .hwExactSupported = true, .outTrigMask = kPWM_ValueRegisterMask_3,
},

{
.id = AXIS_X2, .name = "X2",
.pwmBase = PWM2, .pwmModule = kPWM_Module_0, .pwmChannel = kPWM_PwmA,
.tmrBase = TMR2, .lowCh = kQTMR_Channel_0, .highCh = kQTMR_Channel_1,
.tmrInputsrc=kQTMR_ClockCounter0InputPin, .cascadePcs = 4U,
.faultNum = 0U, .hwExactSupported = true, .outTrigMask = kPWM_ValueRegisterMask_3,
},

{
.id = AXIS_Y, .name = "Y",
.pwmBase = PWM3, .pwmModule = kPWM_Module_0, .pwmChannel = kPWM_PwmA,
.tmrBase = TMR3, .lowCh = kQTMR_Channel_0, .highCh = kQTMR_Channel_1,
.tmrInputsrc=kQTMR_ClockCounter0InputPin, .cascadePcs = 4U,
.faultNum = 0U, .hwExactSupported = true, .outTrigMask = kPWM_ValueRegisterMask_3,
},

{
.id = AXIS_Z, .name = "Z",
.pwmBase = PWM4, .pwmModule = kPWM_Module_0, .pwmChannel = kPWM_PwmA,
.tmrBase = TMR1, .lowCh = kQTMR_Channel_0, .highCh = kQTMR_Channel_1,
.tmrInputsrc=kQTMR_ClockCounter0InputPin, .cascadePcs = 4U,
.faultNum = 0U, .hwExactSupported = true, .outTrigMask = kPWM_ValueRegisterMask_3,
},

{
.id = AXIS_EX1, .name = "EX1",
.pwmBase = PWM1, .pwmModule = kPWM_Module_1, .pwmChannel = kPWM_PwmA,
.tmrBase = TMR1, .lowCh = kQTMR_Channel_2, .highCh = kQTMR_Channel_3,
.tmrInputsrc=kQTMR_ClockCounter2InputPin, .cascadePcs = 6U,
.faultNum = 1U, .hwExactSupported = true, .outTrigMask = kPWM_ValueRegisterMask_3,
},

{
.id = AXIS_EX2, .name = "EX2",
.pwmBase = PWM2, .pwmModule = kPWM_Module_1, .pwmChannel = kPWM_PwmA,
.tmrBase = TMR2, .lowCh = kQTMR_Channel_2, .highCh = kQTMR_Channel_3,
.tmrInputsrc=kQTMR_ClockCounter2InputPin, .cascadePcs = 6U,
.faultNum = 1U, .hwExactSupported = true, .outTrigMask = kPWM_ValueRegisterMask_3,
},
};static void APP_Init_PWM_QTMR(void)
{
pwm_config_t pwmConfig;
pwm_fault_param_t faultConfig;
qtmr_config_t qtmrConfig;

PWM_GetDefaultConfig(&pwmConfig);
pwmConfig.pairOperation = kPWM_Independent;
pwmConfig.reloadLogic = kPWM_ReloadImmediate;

PWM_FaultDefaultConfig(&faultConfig);
faultConfig.faultLevel = true;

faultConfig.enableCombinationalPath = false;
faultConfig.faultClearingMode = kPWM_ManualSafety;
faultConfig.recoverMode = kPWM_NoRecovery;

QTMR_GetDefaultConfig(&qtmrConfig);
CLOCK_EnableClock(kCLOCK_Qtimer1);
CLOCK_EnableClock(kCLOCK_Qtimer2);
CLOCK_EnableClock(kCLOCK_Qtimer3);

PWM_StopTimer(PWM1, 0x0FU); PWM_StopTimer(PWM2, 0x0FU);
PWM_StopTimer(PWM3, 0x0FU); PWM_StopTimer(PWM4, 0x0FU);
pwm_fault_input_filter_param_t faultFilter;
faultFilter.faultFilterPeriod = 255U;
faultFilter.faultFilterCount = 7U;
faultFilter.faultGlitchStretch = false;

/* 记录每个 PWM 实例上已配置的 fault channel,避免重复设置 */
uint16_t pwm1FaultDone = 0U, pwm2FaultDone = 0U, pwm3FaultDone = 0U, pwm4FaultDone = 0U;

for (uint8_t i = 0U; i < AXIS_NUM; i++)
{
axis_ctrl_t *ax = &g_axes[i];
PWM_Init(ax->pwmBase, ax->pwmModule, &pwmConfig);
PWM_SetupFaults(ax->pwmBase, (pwm_fault_input_t)ax->faultNum, &faultConfig);

/* 故障滤波(每个 PWM 实例的每个 fault channel 只设一次) */
{
uint16_t *faultDone;
if (ax->pwmBase == PWM1) faultDone = &pwm1FaultDone;
else if (ax->pwmBase == PWM2) faultDone = &pwm2FaultDone;
else if (ax->pwmBase == PWM3) faultDone = &pwm3FaultDone;
else faultDone = &pwm4FaultDone;

uint16_t faultBit = (uint16_t)(1U << ax->faultNum);
if ((*faultDone & faultBit) == 0U)
{
PWM_SetupFaultInputFilterExt(ax->pwmBase,
(pwm_fault_channels_t)ax->faultNum,
&faultFilter);
*faultDone |= faultBit;
}
}

/* Fault 时输出低电平 */
ax->pwmBase->SM[ax->pwmModule].OCTRL &= ~(PWM_OCTRL_PWMAFS_MASK | PWM_OCTRL_PWMBFS_MASK);

APP_PWM_Unmap_Selected_Fault(ax);
APP_PWM_ClearFault_Safe(ax);

ax->pwmBase->SM[ax->pwmModule].INIT = 0U;
ax->pwmBase->SM[ax->pwmModule].VAL0 = 0U;
ax->pwmBase->SM[ax->pwmModule].VAL1 = 1U;
ax->pwmBase->SM[ax->pwmModule].VAL2 = 0U;
ax->pwmBase->SM[ax->pwmModule].VAL3 = 0U;
ax->pwmBase->SM[ax->pwmModule].VAL4 = 0U;
ax->pwmBase->SM[ax->pwmModule].VAL5 = 0U;
ax->pwmBase->SM[ax->pwmModule].TCTRL = PWM_TCTRL_OUT_TRIG_EN(ax->outTrigMask);
APP_PWM_Disable_Output(ax);

if (ax->hwExactSupported)
{
qtmrConfig.primarySource = ax->tmrInputSrc;
QTMR_Init(ax->tmrBase, ax->lowCh, &qtmrConfig);
QTMR_Init(ax->tmrBase, ax->highCh, &qtmrConfig);

ax->tmrBase->CHANNEL[ax->lowCh].CTRL = TMR_CTRL_CM(kQTMR_PriSrcRiseEdge)
| TMR_CTRL_PCS(ax->tmrInputSrc);
ax->tmrBase->CHANNEL[ax->highCh].CTRL = TMR_CTRL_CM(kQTMR_CascadeCount)
| TMR_CTRL_PCS(ax->cascadePcs);

APP_QTMR_Disable_Low_OFLAG_Output(ax);
QTMR_DisableInterrupts(ax->tmrBase, ax->lowCh, 0xFFU);
QTMR_DisableInterrupts(ax->tmrBase, ax->highCh, 0xFFU);
QTMR_ClearStatusFlags(ax->tmrBase, ax->lowCh, 0xFFU);
QTMR_ClearStatusFlags(ax->tmrBase, ax->highCh, 0xFFU);
}

ax->phase = kAxisIdle;

ax->armed = false;
ax->running = false;
ax->done = true;
#if HARD_PWM_STATE_GUARD_ENABLE
APP_StateGuard_Reset(ax);
#endif
}

/* 使能 QTMR 中断 */
NVIC_SetPriority(TMR1_IRQn, 2U);
NVIC_SetPriority(TMR2_IRQn, 2U);
NVIC_SetPriority(TMR3_IRQn, 2U);
EnableIRQ(TMR1_IRQn);
EnableIRQ(TMR2_IRQn);
EnableIRQ(TMR3_IRQn);
}static bool APP_PWM_Config_Pulse(axis_ctrl_t *axis,
uint32_t highCnt400M,
uint32_t lowCnt400M)
{
pwm_clock_prescale_t prescale;
uint16_t periodTicks;
uint32_t totalCnt400M = highCnt400M + lowCnt400M;

if ((axis == NULL) || (totalCnt400M == 0U)) return false;
if (!APP_PWM_SelectPrescaler_FromPeriodCnt400M(totalCnt400M, &prescale, &periodTicks))
return false;

uint32_t highTicks32 = (uint32_t)(((uint64_t)periodTicks * (uint64_t)highCnt400M +
((uint64_t)totalCnt400M / 2ULL)) /
(uint64_t)totalCnt400M);
if (highTicks32 == 0U) highTicks32 = 1U;
if (highTicks32 >= periodTicks) highTicks32 = (uint32_t)periodTicks - 1U;

uint32_t riseTicks32 = 0U;
uint32_t fallTicks32 = highTicks32;

#if HARD_PWM_LOW_START_PHASE_ENABLE
uint32_t lowTicks32 = (uint32_t)periodTicks - highTicks32;
if (lowTicks32 >= (2U * HARD_PWM_LOW_START_PHASE_MIN_TICKS))
{
uint32_t desiredLeadCnt400M = highCnt400M;
uint32_t minLeadCnt400M = (uint32_t)HARD_PWM_LOW_START_PHASE_MIN_US * 400U;
if (desiredLeadCnt400M < minLeadCnt400M) desiredLeadCnt400M = minLeadCnt400M;

uint32_t desiredLeadTicks32 = (uint32_t)(((uint64_t)periodTicks * (uint64_t)desiredLeadCnt400M +
((uint64_t)totalCnt400M / 2ULL)) /
(uint64_t)totalCnt400M);
if (desiredLeadTicks32 < HARD_PWM_LOW_START_PHASE_MIN_TICKS)
desiredLeadTicks32 = HARD_PWM_LOW_START_PHASE_MIN_TICKS;

uint32_t maxRiseByHalfTicks32 = lowTicks32 / 2U;
uint32_t postGuardTicks32 = (uint32_t)(((uint64_t)periodTicks *
(uint64_t)(HARD_PWM_VAL3_POST_LOW_GUARD_US * 400U) +
((uint64_t)totalCnt400M / 2ULL)) /
(uint64_t)totalCnt400M);
if (postGuardTicks32 < HARD_PWM_VAL3_POST_LOW_GUARD_MIN_TICKS)
postGuardTicks32 = HARD_PWM_VAL3_POST_LOW_GUARD_MIN_TICKS;
uint32_t maxRiseByPostGuardTicks32 = (lowTicks32 > postGuardTicks32) ?
(lowTicks32 - postGuardTicks32) : 0U;

uint32_t selectedRiseTicks32;
if (maxRiseByHalfTicks32 >= desiredLeadTicks32)
{
selectedRiseTicks32 = desiredLeadTicks32;
if (selectedRiseTicks32 > maxRiseByHalfTicks32)
selectedRiseTicks32 = maxRiseByHalfTicks32;
}
else if (maxRiseByPostGuardTicks32 >= desiredLeadTicks32)
{
selectedRiseTicks32 = desiredLeadTicks32;
if (selectedRiseTicks32 > maxRiseByPostGuardTicks32)
selectedRiseTicks32 = maxRiseByPostGuardTicks32;
}
else
{
selectedRiseTicks32 = maxRiseByPostGuardTicks32;
}

if (selectedRiseTicks32 >= HARD_PWM_LOW_START_PHASE_MIN_TICKS)
{
riseTicks32 = selectedRiseTicks32;
fallTicks32 = riseTicks32 + highTicks32;
}
}
#endif

if (fallTicks32 >= (uint32_t)periodTicks) fallTicks32 = (uint32_t)periodTicks - 1U;
uint16_t riseTicks = (uint16_t)riseTicks32;
uint16_t fallTicks = (uint16_t)fallTicks32;
PWM_SetPwmLdok(axis->pwmBase, APP_PwmModuleMask(axis), false);
uint16_t ctrl = axis->pwmBase->SM[axis->pwmModule].CTRL;
ctrl &= (uint16_t)(~PWM_CTRL_PRSC_MASK);
ctrl |= PWM_CTRL_PRSC(prescale);
axis->pwmBase->SM[axis->pwmModule].CTRL = ctrl;

axis->pwmBase->SM[axis->pwmModule].INIT = 0U;
axis->pwmBase->SM[axis->pwmModule].VAL0 = 0U;
axis->pwmBase->SM[axis->pwmModule].VAL1 = (uint16_t)(periodTicks - 1U);
if (axis->pwmChannel == kPWM_PwmA) {
axis->pwmBase->SM[axis->pwmModule].VAL2 = riseTicks;
axis->pwmBase->SM[axis->pwmModule].VAL3 = fallTicks;
} else if (axis->pwmChannel == kPWM_PwmB) {
axis->pwmBase->SM[axis->pwmModule].VAL4 = riseTicks;
axis->pwmBase->SM[axis->pwmModule].VAL5 = fallTicks;
}
axis->pwmBase->SM[axis->pwmModule].TCTRL = PWM_TCTRL_OUT_TRIG_EN(axis->outTrigMask);

PWM_SetPwmLdok(axis->pwmBase, APP_PwmModuleMask(axis), true);
PWM_SetPwmLdok(axis->pwmBase, APP_PwmModuleMask(axis), true);
axis->pwmConfigValid = true;
axis->cachedHighCnt400M = highCnt400M;
axis->cachedLowCnt400M = lowCnt400M;
return true;
}
0 项奖励
回复

246 次查看
Pablo_Ramos
NXP Employee
NXP Employee

Hi @liu626,

Could you help me isolate the configuration and test whether the issue persists when only PWM3 is initialized?

After reviewing the configuration, you shared and in order to try to replicate the behavior, I have the following questions:

What is the definition of axis_ctrl_t?

Are HARD_PWM_LOW_START_PHASE_ENABLE and HARD_PWM_STATE_GUARD_ENABLE enabled in your application?

What do the following APP functions do?

APP_PWM_Unmap_Selected_Fault
APP_PWM_ClearFault_Safe
APP_PWM_Disable_Output
APP_QTMR_Disable_Low_OFLAG_Output
APP_StateGuard_Reset
APP_PWM_SelectPrescaler_FromPeriodCnt400M
APP_PwmModuleMask

Best Regards,
Pablo

0 项奖励
回复

134 次查看
liu626
Contributor I

Thank you for your reply. The GPIO pin I'm using is GPIO_EMC_B1_29 of the rt1176."axis_ctrl_t" is the definition related to the motor shaft.

* PWM output pulse -> Trigger XBAR signal -> Falling edge of pulse drives the external clock input of QTMR ->
* QTMR 32-bit cascaded counter decrements by 1 -> When it reaches 0, triggers QTMR comparison interrupt -> Interrupt internally turns off PWM
* At the same time, QTMR triggers the hardware Fault, directly pulling down the physical output pin of PWM. .id = AXIS_Y,
.name = "Y", /* Used for serial port logging or breakpoint debugging to identify the Y-axis */
/* ================= PWM Output Resource Allocation ================= */
.pwmBase = PWM3, /* The Y-axis uses the FlexPWM3 module */
.pwmModule = kPWM_Module_0, /* Uses the sub-module 0 of PWM3 (each PWM has 4 sub-modules from 0 to 3) */
.pwmChannel = kPWM_PwmA, /* Uses the output pin of phase A of sub-module 0, corresponding to the physical pin GPIO_EMC_B1_29 */
/* ================= 32-bit QTMR cascaded count resource allocation ================= */
.tmrBase = TMR3, /* The Y-axis uses the QTMR3 peripheral (corresponding to IRQ interrupt number TMR3_IRQn) */
.lowCh = kQTMR_Channel_0, /* 16-bit low counter: uses channel 0 of TMR3 */
.highCh = kQTMR_Channel_1,/* 16-bit high counter: uses channel 1 of TMR3 */
/* .lowCh and .highCh are paired, and in the hardware level, they are automatically combined into a 32-bit counter */
/* ================= Configuration of Hardware Cascaded Clock Sources (Core Critical) ================= */ .tmrInputsrc=kQTMR_ClockCounter0InputPin,
/* The clock source for Channel 0: Set to "External Pin Input 0".
In the XBAR configuration, the falling edge of the pulse from PWM3 is connected to the input pin of Channel 0 of TMR3 through the XBAR.
Therefore, every time a pulse is output by PWM, Channel 0 (16-bit) will perform a decrement operation once. */

.cascadePcs = 4U,
/* Configuration of the clock source (PCS) for the high 16-bit channel (Channel 1).
In the QTMR register of i.MX RT, the PCS value corresponds as follows:
0-3 = External pin input;
4 = Overflow/Termination event of Channel 0;
5 = Overflow/Termination event of Channel 1;
6 = Overflow/Termination event of Channel 2;
7 = Overflow/Termination event of Channel 3.
Here, it is configured as 4U, meaning: Let "Channel 1 of TMR3" monitor the "Overflow event of Channel 0 of TMR3".

HARD_PWM_LOW_START_PHASE_ENABLE and HARD_PWM_STATE_GUARD_ENABLE have been enabled. APP_PWM_Unmap_Selected_Fault

Function: Remove the Fault pin mapping corresponding to the current axis. Call the underlying PWM_SetupFaultDisableMap function to disable the Fault. The purpose is: When the hardware Fault is not needed, prevent accidental external interference from causing the PWM to be turned off, facilitating the underlying debugging process.
APP_PWM_ClearFault (original code function)
Function: Clear the Fault status flag (axis->pwmBase->FSTS) of the PWM module. After triggering a hardware Fault, you must first clear this flag before the PWM can be allowed to restart.
APP_PWM_Disable_Output

Function: Immediately stop the PWM timer, force the pin to output a low level (PWM_SetPwmForceOutputToZero), and enable the output. Its purpose is to ensure that the pin does not output a high level due to being left floating or in the default state before the motor starts, which could cause the motor to move erratically.
APP_QTMR_Disable_Low_OFLAG_Output

Function: Disable the OFLAG (status flag) output of QTMR and force the OFLAG to be at a low level. In conjunction with the XBAR hardware, its role is to cut off the path from the QTMR output to the PWM Fault pin, preventing accidental triggering of Fault before startup.
APP_StateGuard_Reset

Function: Clears the counters and flags of the state guard (watchdog). This function is used to reset these protection variables before stopping or restarting the system if it encounters a long period of no pulse change or a deadlock when HARD_PWM_STATE_GUARD_ENABLE is enabled.
APP_PWM_SelectPrescaler_FromPeriodCnt400M

Function: This is a very core underlying frequency calculation function. It receives the total 400MHz count value of High + Low, and calculates how many prescalers (PRSC) and PWM periods (PERIOD) should be set in order to fit into the 16-bit PWM register. Please note: If the calculated period exceeds 65535 and the division coefficient is out of range, this function will return false, causing the motor to fail to start.
APP_PwmModuleMask

Function: Convert the index number of the PWM sub-module (for example, kPWM_Module_0 with the value 0) into a bit mask shifted left by N bits. Many of NXP's PWM registers (such as OUTEN, MCTRL) are controlled bit by bit. This function is responsible for generating the correct binary mask.

0 项奖励
回复
%3CLINGO-SUB%20id%3D%22lingo-sub-2385575%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3ERT1176%20PWM%E5%90%AF%E5%8A%A8%E5%A4%B1%E8%B4%A5%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-2385575%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CP%3E%E6%88%91%E4%BD%BF%E7%94%A8PWM%2B%E6%95%85%E9%9A%9C%2BQTimer%E6%9D%A5%E5%AE%9E%E7%8E%B0%E7%94%B5%E6%9C%BA%E8%84%89%E5%86%B2%E6%8E%A7%E5%88%B6%EF%BC%8C%E4%BD%86PWM3%E5%AD%90%E6%A8%A1%E5%9D%970%E7%9A%84PWM_A%E9%80%9A%E9%81%93%E5%81%B6%E5%B0%94%E6%97%A0%E6%B3%95%E5%90%AF%E5%8A%A8%EF%BC%8C%E5%9C%A8%E7%AC%AC%E4%B8%80%E4%B8%AA%E9%AB%98%E7%94%B5%E5%B9%B3%E4%B9%8B%E5%90%8E%E5%B0%B1%E4%B8%80%E7%9B%B4%E4%BF%9D%E6%8C%81%E9%AB%98%E7%94%B5%E5%B9%B3%EF%BC%8C%E5%90%8E%E7%BB%AD%E8%84%89%E5%86%B2%E4%B8%8D%E5%86%8D%E5%87%BA%E7%8E%B0%E3%80%82%E6%A3%80%E6%9F%A5%E5%90%8E%E5%8F%91%E7%8E%B0%EF%BC%8CPWM%E7%9A%84%E2%80%9C%E8%BF%90%E8%A1%8C%E2%80%9D%E4%BD%8D%E6%B2%A1%E6%9C%89%E6%AD%A3%E7%A1%AE%E8%AE%BE%E7%BD%AE%E3%80%82%E5%8D%B3%E4%BD%BF%E5%90%8E%E6%9D%A5%E5%9C%A8%E7%A8%8B%E5%BA%8F%E4%B8%AD%E6%B7%BB%E5%8A%A0%E4%BA%86%E9%87%8D%E5%A4%8D%E5%90%AF%E5%8A%A8%E6%93%8D%E4%BD%9C%EF%BC%8C%E8%BF%99%E7%A7%8D%E5%BC%82%E5%B8%B8%E6%83%85%E5%86%B5%E4%BB%8D%E7%84%B6%E5%8F%91%E7%94%9F%E3%80%82%3C%2FP%3E%3CP%3E%3CSPAN%20class%3D%22lia-inline-image-display-wrapper%20lia-image-align-inline%22%20image-alt%3D%22liu626_0-1782287927569.png%22%20style%3D%22width%3A%20400px%3B%22%3E%3CSPAN%20class%3D%22lia-inline-image-display-wrapper%22%20image-alt%3D%22liu626_0-1782287927569.png%22%20style%3D%22width%3A%20400px%3B%22%3E%3CSPAN%20class%3D%22lia-inline-image-display-wrapper%22%20image-alt%3D%22liu626_0-1782287927569.png%22%20style%3D%22width%3A%20400px%3B%22%3E%3CSPAN%20class%3D%22lia-inline-image-display-wrapper%22%20image-alt%3D%22liu626_0-1782287927569.png%22%20style%3D%22width%3A%20400px%3B%22%3E%3CSPAN%20class%3D%22lia-inline-image-display-wrapper%22%20image-alt%3D%22liu626_0-1782287927569.png%22%20style%3D%22width%3A%20400px%3B%22%3E%3Cspan%20class%3D%22lia-inline-image-display-wrapper%22%20image-alt%3D%22liu626_0-1782287927569.png%22%20style%3D%22width%3A%20400px%3B%22%3E%3Cimg%20src%3D%22https%3A%2F%2Fcommunity.nxp.com%2Ft5%2Fimage%2Fserverpage%2Fimage-id%2F389985i82C105A58467F67F%2Fimage-size%2Fmedium%3Fv%3Dv2%26amp%3Bpx%3D400%22%20role%3D%22button%22%20title%3D%22liu626_0-1782287927569.png%22%20alt%3D%22liu626_0-1782287927569.png%22%20%2F%3E%3C%2Fspan%3E%3C%2FSPAN%3E%3C%2FSPAN%3E%3C%2FSPAN%3E%3C%2FSPAN%3E%3C%2FSPAN%3E%3C%2FP%3E%3CBR%20%2F%3E%3C%2FLINGO-BODY%3E%3CLINGO-SUB%20id%3D%22lingo-sub-2386554%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%20translate%3D%22no%22%3ERe%3A%20RT1176%20PWM%20startup%20failed%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-2386554%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CP%3E%E4%BD%A0%E5%A5%BD%3CA%20href%3D%22https%3A%2F%2Fcommunity.nxp.com%2Ft5%2Fuser%2Fviewprofilepage%2Fuser-id%2F264017%22%20target%3D%22_blank%22%3E%40liu626%3C%2FA%3E%20%EF%BC%8C%3C%2FP%3E%0A%3CP%3E%E4%BD%A0%E7%94%A8%E7%9A%84%E6%98%AF%E5%AE%9A%E5%88%B6%E6%9D%BF%E8%BF%98%E6%98%AFEVK%E6%9D%BF%EF%BC%9F%E5%A6%82%E6%9E%9C%E4%BD%A0%E4%BD%BF%E7%94%A8%E7%9A%84%E6%98%AF%20EVK%EF%BC%8C%E4%BD%A0%E5%AF%B9%E5%AE%83%E8%BF%9B%E8%A1%8C%E8%BF%87%E4%BB%BB%E4%BD%95%E4%BF%AE%E6%94%B9%E5%90%97%EF%BC%9F%3C%2FP%3E%0A%3CP%3E%E8%83%BD%E5%90%A6%E5%88%86%E4%BA%AB%E4%B8%80%E4%B8%8B%E6%82%A8%E4%BD%BF%E7%94%A8%E7%9A%84PWM3%E9%85%8D%E7%BD%AE%EF%BC%9F%3C%2FP%3E%0A%3CP%3E%E6%82%A8%E6%98%AF%E4%BD%BF%E7%94%A8%E7%A4%BA%E4%BE%8B%E4%BD%9C%E4%B8%BA%E5%8F%82%E8%80%83%E5%90%97%EF%BC%9F%E5%A6%82%E6%9E%9C%E6%98%AF%EF%BC%8C%E6%98%AF%E5%93%AA%E4%B8%80%E4%B8%AA%EF%BC%9F%3C%2FP%3E%0A%3CP%3E%E5%A6%82%E6%9E%9C%E5%B0%9D%E8%AF%95%E4%BD%BF%E7%94%A8%E4%BB%85%E5%8C%85%E5%90%AB%20PWM3%20%E7%9A%84%E9%A1%B9%E7%9B%AE%E6%9D%A5%E9%87%8D%E7%8E%B0%E8%AF%A5%E9%97%AE%E9%A2%98%EF%BC%8C%E9%97%AE%E9%A2%98%E6%98%AF%E5%90%A6%E4%BB%8D%E7%84%B6%E5%AD%98%E5%9C%A8%EF%BC%9F%3C%2FP%3E%0A%3CP%3E%E8%BF%99%E7%A7%8D%E6%83%85%E5%86%B5%E6%98%AF%E5%90%A6%E5%8F%AA%E5%8F%91%E7%94%9F%E5%9C%A8%20PWM3%20%E5%AD%90%E6%A8%A1%E5%9D%97%200%20PWM_A%20%E9%80%9A%E9%81%93%E4%B8%8A%EF%BC%9F%E5%85%B6%E4%BB%96PWM%E6%A8%A1%E5%9D%97%E6%88%96%E5%AD%90%E6%A8%A1%E5%9D%97%E6%98%AF%E5%90%A6%E4%B9%9F%E5%87%BA%E7%8E%B0%E8%BF%87%E8%BF%99%E7%A7%8D%E6%83%85%E5%86%B5%EF%BC%9F%3C%2FP%3E%0A%3CP%3E%E6%98%AF%E5%90%A6%E8%BF%98%E6%9C%89%E5%85%B6%E4%BB%96%E4%BB%BB%E5%8A%A1%E6%88%96%E4%B8%AD%E6%96%AD%E4%BC%9A%E6%93%8D%E4%BD%9C%20PWM3%20%E5%AF%84%E5%AD%98%E5%99%A8%EF%BC%8C%E4%BB%8E%E8%80%8C%E5%BD%B1%E5%93%8D%E6%88%96%E8%A6%86%E7%9B%96%E8%BF%90%E8%A1%8C%E4%BD%8D%EF%BC%9F%3C%2FP%3E%0A%3CP%3E%E6%AD%A4%E8%87%B4%EF%BC%8C%3CBR%20%2F%3E%E5%B7%B4%E5%8B%83%E7%BD%97%3C%2FP%3E%3C%2FLINGO-BODY%3E%3CLINGO-SUB%20id%3D%22lingo-sub-2386633%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%20translate%3D%22no%22%3ERe%3A%20RT1176%20PWM%20startup%20failed%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-2386633%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%E6%82%A8%E5%A5%BD%EF%BC%8C%E6%88%91%E4%BD%BF%E7%94%A8%E7%9A%84%E6%98%AF%E5%AE%9A%E5%88%B6%E7%94%B5%E8%B7%AF%E6%9D%BF%E3%80%82%E6%88%91%E6%B2%A1%E6%9C%89%E4%B8%BE%E4%BB%BB%E4%BD%95%E4%BE%8B%E5%AD%90%E3%80%82%E8%BF%99%E6%98%AF%E5%9C%A8%E9%A1%B9%E7%9B%AE%E6%AD%A3%E5%BC%8F%E5%BC%80%E5%8F%91%E8%BF%87%E7%A8%8B%E4%B8%AD%E5%8F%91%E7%8E%B0%E7%9A%84%E9%97%AE%E9%A2%98%E3%80%82%E6%88%91%E9%85%8D%E7%BD%AE%E4%BA%86%E5%85%AD%E4%B8%AAPWM%E9%80%9A%E9%81%93%E7%94%A8%E4%BA%8E%E8%84%89%E5%86%B2%E6%8E%A7%E5%88%B6%E3%80%82%E5%8F%AA%E6%9C%89%E8%BF%99%E4%B8%AA%E9%80%9A%E9%81%93%E5%87%BA%E7%8E%B0%E4%BA%86%E9%97%AE%E9%A2%98%EF%BC%8C%E5%85%B6%E4%BB%96%E5%AD%90%E6%A8%A1%E5%9D%97%E9%83%BD%E6%B2%A1%E6%9C%89%E5%87%BA%E7%8E%B0%E6%AD%A4%E7%B1%BB%E9%97%AE%E9%A2%98%E3%80%82%E6%88%91%E6%A3%80%E6%9F%A5%E5%90%8E%E5%8F%91%E7%8E%B0%EF%BC%8C%E5%8F%AA%E6%9C%89%E8%BF%99%E4%B8%AA%E9%80%9A%E9%81%93%E4%BD%BF%E7%94%A8%E4%BA%86%20PWM3%20%E6%A8%A1%E5%9D%97%E3%80%82%E6%9C%AA%E6%A3%80%E6%B5%8B%E5%88%B0%E5%85%B6%E4%BB%96%E5%B9%B2%E6%89%B0%E5%9B%A0%E7%B4%A0%E3%80%82%E4%BB%A5%E4%B8%8B%E6%98%AF%E6%88%91%E7%9A%84%E9%85%8D%E7%BD%AE%E3%80%82%3CBR%20%2F%3E%E9%9D%99%E6%80%81%20axis_ctrl_t%20g_axes%5BAXIS_NUM%5D%20%3D%3CBR%20%2F%3E%20%7B%3CBR%20%2F%3E%20%7B%3CBR%20%2F%3E%20%E3%80%82ID%3D%20AXIS_X1%EF%BC%8C.name%3D%20%22X1%22%2C%3CBR%20%2F%3E%20.pwmBase%3D%20PWM1%EF%BC%8C.pwmModule%3D%20kPWM_Module_0%EF%BC%8C.pwmChannel%3D%20kPWM_PwmA%EF%BC%8C%3CBR%20%2F%3E%20.tmrBase%3D%20TMR3%EF%BC%8C.lowCh%3D%20kQTMR_Channel_2%EF%BC%8C.highCh%3D%20kQTMR_Channel_3%EF%BC%8C%3CBR%20%2F%3E%20.tmrInputsrc%3DkQTMR_ClockCounter2InputPin%2C.cascadePcs%3D%206U%EF%BC%8C%3CBR%20%2F%3E%E6%95%85%E9%9A%9C%E7%BC%96%E5%8F%B7%3D%200U%EF%BC%8C.hwExactSupported%3D%20true%EF%BC%8C.outTrigMask%3D%20kPWM_ValueRegisterMask_3%EF%BC%8C%3CBR%20%2F%3E%20%7D%2C%3CBR%20%2F%3E%3CBR%20%2F%3E%20%7B%3CBR%20%2F%3E%20%E3%80%82ID%3D%20AXIS_X2%EF%BC%8C.name%3D%20%22X2%22%2C%3CBR%20%2F%3E%20.pwmBase%3D%20PWM2%EF%BC%8C.pwmModule%3D%20kPWM_Module_0%EF%BC%8C.pwmChannel%3D%20kPWM_PwmA%EF%BC%8C%3CBR%20%2F%3E%20.tmrBase%3D%20TMR2%EF%BC%8C.lowCh%3D%20kQTMR_Channel_0%2C%20.highCh%3D%20kQTMR_Channel_1%EF%BC%8C%3CBR%20%2F%3E%20.tmrInputsrc%3DkQTMR_ClockCounter0InputPin%2C.cascadePcs%3D%204U%EF%BC%8C%3CBR%20%2F%3E%E6%95%85%E9%9A%9C%E7%BC%96%E5%8F%B7%3D%200U%EF%BC%8C.hwExactSupported%3D%20true%EF%BC%8C.outTrigMask%3D%20kPWM_ValueRegisterMask_3%EF%BC%8C%3CBR%20%2F%3E%20%7D%2C%3CBR%20%2F%3E%3CBR%20%2F%3E%20%7B%3CBR%20%2F%3E%20%E3%80%82ID%3D%20AXIS_Y%EF%BC%8C.name%3D%20%22Y%22%2C%3CBR%20%2F%3E%20.pwmBase%3D%20PWM3%EF%BC%8C.pwmModule%3D%20kPWM_Module_0%EF%BC%8C.pwmChannel%3D%20kPWM_PwmA%EF%BC%8C%3CBR%20%2F%3E%20.tmrBase%3D%20TMR3%EF%BC%8C.lowCh%3D%20kQTMR_Channel_0%2C%20.highCh%3D%20kQTMR_Channel_1%EF%BC%8C%3CBR%20%2F%3E%20.tmrInputsrc%3DkQTMR_ClockCounter0InputPin%2C.cascadePcs%3D%204U%EF%BC%8C%3CBR%20%2F%3E%E6%95%85%E9%9A%9C%E7%BC%96%E5%8F%B7%3D%200U%EF%BC%8C.hwExactSupported%3D%20true%EF%BC%8C.outTrigMask%3D%20kPWM_ValueRegisterMask_3%EF%BC%8C%3CBR%20%2F%3E%20%7D%2C%3CBR%20%2F%3E%3CBR%20%2F%3E%20%7B%3CBR%20%2F%3E%20%E3%80%82ID%3D%20AXIS_Z%EF%BC%8C.name%3D%20%22Z%22%2C%3CBR%20%2F%3E%20.pwmBase%3D%20PWM4%EF%BC%8C.pwmModule%3D%20kPWM_Module_0%EF%BC%8C.pwmChannel%3D%20kPWM_PwmA%EF%BC%8C%3CBR%20%2F%3E%20.tmrBase%3D%20TMR1%EF%BC%8C.lowCh%3D%20kQTMR_Channel_0%2C%20.highCh%3D%20kQTMR_Channel_1%EF%BC%8C%3CBR%20%2F%3E%20.tmrInputsrc%3DkQTMR_ClockCounter0InputPin%2C.cascadePcs%3D%204U%EF%BC%8C%3CBR%20%2F%3E%E6%95%85%E9%9A%9C%E7%BC%96%E5%8F%B7%3D%200U%EF%BC%8C.hwExactSupported%3D%20true%EF%BC%8C.outTrigMask%3D%20kPWM_ValueRegisterMask_3%EF%BC%8C%3CBR%20%2F%3E%20%7D%2C%3CBR%20%2F%3E%3CBR%20%2F%3E%20%7B%3CBR%20%2F%3E%20%E3%80%82ID%3D%20AXIS_EX1%EF%BC%8C.name%3D%20%22EX1%22%2C%3CBR%20%2F%3E%20.pwmBase%3D%20PWM1%EF%BC%8C.pwmModule%3D%20kPWM_Module_1%EF%BC%8C.pwmChannel%3D%20kPWM_PwmA%EF%BC%8C%3CBR%20%2F%3E%20.tmrBase%3D%20TMR1%EF%BC%8C.lowCh%3D%20kQTMR_Channel_2%EF%BC%8C.highCh%3D%20kQTMR_Channel_3%EF%BC%8C%3CBR%20%2F%3E%20.tmrInputsrc%3DkQTMR_ClockCounter2InputPin%2C.cascadePcs%3D%206U%EF%BC%8C%3CBR%20%2F%3E%E6%95%85%E9%9A%9C%E7%BC%96%E5%8F%B7%3D%201U%EF%BC%8C.hwExactSupported%3D%20true%EF%BC%8C.outTrigMask%3D%20kPWM_ValueRegisterMask_3%EF%BC%8C%3CBR%20%2F%3E%20%7D%2C%3CBR%20%2F%3E%3CBR%20%2F%3E%20%7B%3CBR%20%2F%3E%20%E3%80%82ID%3D%20AXIS_EX2%EF%BC%8C.name%3D%20%22EX2%22%2C%3CBR%20%2F%3E%20.pwmBase%3D%20PWM2%EF%BC%8C.pwmModule%3D%20kPWM_Module_1%EF%BC%8C.pwmChannel%3D%20kPWM_PwmA%EF%BC%8C%3CBR%20%2F%3E%20.tmrBase%3D%20TMR2%EF%BC%8C.lowCh%3D%20kQTMR_Channel_2%EF%BC%8C.highCh%3D%20kQTMR_Channel_3%EF%BC%8C%3CBR%20%2F%3E%20.tmrInputsrc%3DkQTMR_ClockCounter2InputPin%2C.cascadePcs%3D%206U%EF%BC%8C%3CBR%20%2F%3E%E6%95%85%E9%9A%9C%E7%BC%96%E5%8F%B7%3D%201U%EF%BC%8C.hwExactSupported%3D%20true%EF%BC%8C.outTrigMask%3D%20kPWM_ValueRegisterMask_3%EF%BC%8C%3CBR%20%2F%3E%20%7D%2C%3CBR%20%2F%3E%20%7D%3Bstatic%20void%20APP_Init_PWM_QTMR(void)%3CBR%20%2F%3E%20%7B%3CBR%20%2F%3E%20pwm_config_t%20pwmConfig%3B%3CBR%20%2F%3E%20pwm_fault_param_t%20faultConfig%3B%3CBR%20%2F%3E%20qtmr_config_t%20qtmrConfig%3B%3CBR%20%2F%3E%3CBR%20%2F%3E%20PWM_GetDefaultConfig(%26amp%3BpwmConfig)%3B%3CBR%20%2F%3E%20pwmConfig.pairOperation%3D%20kPWM_Independent%3B%3CBR%20%2F%3E%20pwmConfig.reloadLogic%20%3D%20kPWM_ReloadImmediate%3B%3CBR%20%2F%3E%3CBR%20%2F%3E%20PWM_FaultDefaultConfig(%26amp%3BfaultConfig)%3B%3CBR%20%2F%3E%20faultConfig.faultLevel%20%3D%20true%3B%3CBR%20%2F%3E%3CBR%20%2F%3E%20faultConfig.enableCombinationPath%3D%20false%EF%BC%9B%3CBR%20%2F%3E%20faultConfig.faultClearingMode%3D%20kPWM_%E6%89%8B%E5%8A%A8%E5%AE%89%E5%85%A8%EF%BC%9B%3CBR%20%2F%3E%20faultConfig.recoverMode%20%3D%20kPWM_NoRecovery%3B%3CBR%20%2F%3E%3CBR%20%2F%3E%20QTMR_GetDefaultConfig(%26amp%3BqtmrConfig)%3B%3CBR%20%2F%3E%20CLOCK_EnableClock(kCLOCK_Qtimer1)%3B%3CBR%20%2F%3E%20CLOCK_EnableClock(kCLOCK_Qtimer2)%3B%3CBR%20%2F%3E%20CLOCK_EnableClock(kCLOCK_Qtimer3)%3B%3CBR%20%2F%3E%3CBR%20%2F%3E%20PWM_StopTimer(PWM1%2C%200x0FU)%3B%20PWM_StopTimer(PWM2%2C%200x0FU)%3B%3CBR%20%2F%3E%20PWM_StopTimer(PWM3%2C%200x0FU)%3B%20PWM_StopTimer(PWM4%2C%200x0FU)%3B%3CBR%20%2F%3E%20pwm_fault_input_filter_param_t%20faultFilter%3B%3CBR%20%2F%3E%E6%95%85%E9%9A%9C%E8%BF%87%E6%BB%A4%E5%99%A8.%E6%95%85%E9%9A%9C%E8%BF%87%E6%BB%A4%E5%99%A8%E5%91%A8%E6%9C%9F%3D%20255U%EF%BC%9B%3CBR%20%2F%3E%20faultFilter.faultFilterCount%3D%207U%EF%BC%9B%3CBR%20%2F%3E%20faultFilter.faultGlitchStretch%3D%20false%EF%BC%9B%3CBR%20%2F%3E%3CBR%20%2F%3E%20%2F*%20%E8%AE%B0%E5%BD%95%E6%AF%8F%E4%B8%AAPWM%E5%AE%9E%E4%BE%8B%E4%B8%8A%E5%B7%B2%E9%85%8D%E7%BD%AE%E7%9A%84%E6%95%85%E9%9A%9C%E9%80%9A%E9%81%93%EF%BC%8C%E9%81%BF%E5%85%8D%E9%87%8D%E5%A4%8D%E8%AE%BE%E7%BD%AE%20*%2F%3CBR%20%2F%3E%20uint16_t%20pwm1FaultDone%20%3D%200U%2C%20pwm2FaultDone%20%3D%200U%2C%20pwm3FaultDone%20%3D%200U%2C%20pwm4FaultDone%20%3D%200U%3B%3CBR%20%2F%3E%3CBR%20%2F%3E%20for%20(uint8_t%20i%20%3D%200U%3B%20i%20%26lt%3B%20AXIS_NUM%3B%20i%2B%2B)%3CBR%20%2F%3E%20%7B%3CBR%20%2F%3E%20axis_ctrl_t%20*ax%20%3D%20%26amp%3Bg_axes%5Bi%5D%3B%3CBR%20%2F%3E%20PWM_Init(ax-%26gt%3BpwmBase%2C%20ax-%26gt%3BpwmModule%2C%20%26amp%3BpwmConfig)%3B%3CBR%20%2F%3E%20PWM_SetupFaults(ax-%26gt%3BpwmBase%2C%20(pwm_fault_input_t)ax-%26gt%3BfaultNum%2C%20%26amp%3BfaultConfig)%3B%3CBR%20%2F%3E%3CBR%20%2F%3E%20%2F*%20%E6%95%85%E9%9A%9C%E6%8F%90%E7%A4%BA%EF%BC%88%E6%AF%8F%E4%B8%AA%20PWM%20%E5%AE%9E%E4%BE%8B%E7%9A%84%E6%AF%8F%E4%B8%AA%E6%95%85%E9%9A%9C%E9%80%9A%E9%81%93%E5%8F%AA%E8%AE%BE%E7%BD%AE%E4%B8%80%E6%AC%A1%EF%BC%89%20*%2F%3CBR%20%2F%3E%20%7B%3CBR%20%2F%3E%20uint16_t%20*faultDone%3B%3CBR%20%2F%3E%E5%A6%82%E6%9E%9C%20(ax-%26gt%3BpwmBase%20%3D%3D%20PWM1)%20faultDone%20%3D%20%26amp%3Bpwm1FaultDone%3B%3CBR%20%2F%3E%E5%90%A6%E5%88%99%E5%A6%82%E6%9E%9C%20(ax-%26gt%3BpwmBase%20%3D%3D%20PWM2)%20faultDone%20%3D%20%26amp%3Bpwm2FaultDone%3B%3CBR%20%2F%3E%E5%90%A6%E5%88%99%E5%A6%82%E6%9E%9C%20(ax-%26gt%3BpwmBase%20%3D%3D%20PWM3)%20faultDone%20%3D%20%26amp%3Bpwm3FaultDone%3B%3CBR%20%2F%3E%E5%90%A6%E5%88%99%20faultDone%20%3D%20%26amp%3Bpwm4FaultDone%3B%3CBR%20%2F%3E%3CBR%20%2F%3E%20uint16_t%20faultBit%20%3D%20(uint16_t)(1U%20%26lt%3B%26lt%3B%20ax-%26gt%3BfaultNum)%3B%3CBR%20%2F%3E%E5%A6%82%E6%9E%9C%20((*faultDone%20%26amp%3B%20faultBit)%20%3D%3D%200U)%3CBR%20%2F%3E%20%7B%3CBR%20%2F%3E%20PWM_SetupFaultInputFilterExt(ax-%26gt%3BpwmBase%2C%3CBR%20%2F%3E%20(pwm_fault_channels_t)ax-%26gt%3BfaultNum%2C%3CBR%20%2F%3E%20%26amp%3BfaultFilter)%3B%3CBR%20%2F%3E%20*faultDone%20%7C%3D%20faultBit%3B%3CBR%20%2F%3E%20%7D%3CBR%20%2F%3E%20%7D%3CBR%20%2F%3E%3CBR%20%2F%3E%20%2F*%20%E6%95%85%E9%9A%9C%E6%97%B6%E8%BE%93%E5%87%BA%E4%BD%8E%E7%94%B5%E5%B9%B3%20*%2F%3CBR%20%2F%3E%20ax-%26gt%3BpwmBase-%26gt%3BSM%5Bax-%26gt%3BpwmModule%5D.OCTRL%20%26amp%3B%3D%20~(PWM_OCTRL_PWMAFS_MASK%20%7C%20PWM_OCTRL_PWMBFS_MASK)%3B%3CBR%20%2F%3E%3CBR%20%2F%3E%20APP_PWM_Unmap_Selected_Fault(ax)%3B%3CBR%20%2F%3E%20APP_PWM_ClearFault_Safe(ax)%3B%3CBR%20%2F%3E%3CBR%20%2F%3E%20ax-%26gt%3BpwmBase-%26gt%3BSM%5Bax-%26gt%3BpwmModule%5D.INIT%20%3D%200U%3B%3CBR%20%2F%3E%20ax-%26gt%3BpwmBase-%26gt%3BSM%5Bax-%26gt%3BpwmModule%5D.VAL0%20%3D%200U%3B%3CBR%20%2F%3E%20ax-%26gt%3BpwmBase-%26gt%3BSM%5Bax-%26gt%3BpwmModule%5D.VAL1%20%3D%201U%3B%3CBR%20%2F%3E%20ax-%26gt%3BpwmBase-%26gt%3BSM%5Bax-%26gt%3BpwmModule%5D.VAL2%20%3D%200U%3B%3CBR%20%2F%3E%20ax-%26gt%3BpwmBase-%26gt%3BSM%5Bax-%26gt%3BpwmModule%5D.VAL3%20%3D%200U%3B%3CBR%20%2F%3E%20ax-%26gt%3BpwmBase-%26gt%3BSM%5Bax-%26gt%3BpwmModule%5D.VAL4%20%3D%200U%3B%3CBR%20%2F%3E%20ax-%26gt%3BpwmBase-%26gt%3BSM%5Bax-%26gt%3BpwmModule%5D.VAL5%20%3D%200U%3B%3CBR%20%2F%3E%20ax-%26gt%3BpwmBase-%26gt%3BSM%5Bax-%26gt%3BpwmModule%5D.TCTRL%20%3D%20PWM_TCTRL_OUT_TRIG_EN(ax-%26gt%3BoutTrigMask)%3B%3CBR%20%2F%3E%20APP_PWM_Disable_Output(ax)%3B%3CBR%20%2F%3E%3CBR%20%2F%3E%E5%A6%82%E6%9E%9C%20(ax-%26gt%3BhwExactSupported)%3CBR%20%2F%3E%20%7B%3CBR%20%2F%3E%20qtmrConfig.primarySource%3D%20ax-%26gt%3BtmrInputSrc%3B%3CBR%20%2F%3E%20QTMR_Init(ax-%26gt%3BtmrBase%2C%20ax-%26gt%3BlowCh%2C%20%26amp%3BqtmrConfig)%3B%3CBR%20%2F%3E%20QTMR_Init(ax-%26gt%3BtmrBase%2C%20ax-%26gt%3BhighCh%2C%20%26amp%3BqtmrConfig)%3B%3CBR%20%2F%3E%3CBR%20%2F%3E%20ax-%26gt%3BtmrBase-%26gt%3BCHANNEL%5Bax-%26gt%3BlowCh%5D.CTRL%20%3D%20TMR_CTRL_CM(kQTMR_PriSrcRiseEdge)%3CBR%20%2F%3E%20%7C%20TMR_CTRL_PCS(ax-%26gt%3BtmrInputSrc)%3B%3CBR%20%2F%3E%20ax-%26gt%3BtmrBase-%26gt%3BCHANNEL%5Bax-%26gt%3BhighCh%5D.CTRL%20%3D%20TMR_CTRL_CM(kQTMR_CascadeCount)%3CBR%20%2F%3E%20%7C%20TMR_CTRL_PCS(ax-%26gt%3BcascadePcs)%3B%3CBR%20%2F%3E%3CBR%20%2F%3E%20APP_QTMR_Disable_Low_OFLAG_Output(ax)%3B%3CBR%20%2F%3E%20QTMR_DisableInterrupts(ax-%26gt%3BtmrBase%2C%20ax-%26gt%3BlowCh%2C%200xFFU)%3B%3CBR%20%2F%3E%20QTMR_DisableInterrupts(ax-%26gt%3BtmrBase%2C%20ax-%26gt%3BhighCh%2C%200xFFU)%3B%3CBR%20%2F%3E%20QTMR_ClearStatusFlags(ax-%26gt%3BtmrBase%2C%20ax-%26gt%3BlowCh%2C%200xFFU)%3B%3CBR%20%2F%3E%20QTMR_ClearStatusFlags(ax-%26gt%3BtmrBase%2C%20ax-%26gt%3BhighCh%2C%200xFFU)%3B%3CBR%20%2F%3E%20%7D%3CBR%20%2F%3E%3CBR%20%2F%3E%20ax-%26gt%3Bphase%20%3D%20kAxisIdle%3B%3CBR%20%2F%3E%3CBR%20%2F%3E%20ax-%26gt%3Barmed%20%3D%20false%3B%3CBR%20%2F%3E%20ax-%26gt%3Brunning%20%3D%20false%3B%3CBR%20%2F%3E%20ax-%26gt%3Bdone%20%3D%20true%3B%3CBR%20%2F%3E%20%23if%20HARD_PWM_STATE_GUARD_ENABLE%3CBR%20%2F%3E%20APP_StateGuard_Reset(ax)%3B%3CBR%20%2F%3E%20%23endif%3CBR%20%2F%3E%20%7D%3CBR%20%2F%3E%3CBR%20%2F%3E%20%2F*%20%E4%BD%BF%E8%83%BD%20QTMR%20%E4%B8%AD%E6%96%AD%20*%2F%3CBR%20%2F%3E%20NVIC_SetPriority(TMR1_IRQn%2C%202U)%3B%3CBR%20%2F%3E%20NVIC_SetPriority(TMR2_IRQn%2C%202U)%3B%3CBR%20%2F%3E%20NVIC_SetPriority(TMR3_IRQn%2C%202U)%3B%3CBR%20%2F%3E%E5%90%AF%E7%94%A8IRQ(TMR1_IRQn)%3B%3CBR%20%2F%3E%E5%90%AF%E7%94%A8IRQ(TMR2_IRQn)%3B%3CBR%20%2F%3E%E5%90%AF%E7%94%A8IRQ(TMR3_IRQn)%3B%3CBR%20%2F%3E%20%7Dstatic%20bool%20APP_PWM_Config_Pulse(axis_ctrl_t%20*axis%2C%3CBR%20%2F%3E%20uint32_t%20highCnt400M%EF%BC%8C%3CBR%20%2F%3E%20uint32_t%20lowCnt400M)%3CBR%20%2F%3E%20%7B%3CBR%20%2F%3E%20pwm_clock_prescale_t%20%E9%A2%84%E5%88%86%E9%A2%91%EF%BC%9B%3CBR%20%2F%3E%20uint16_t%20periodTicks%3B%3CBR%20%2F%3E%20uint32_t%20totalCnt400M%20%3D%20highCnt400M%20%2B%20lowCnt400M%3B%3CBR%20%2F%3E%3CBR%20%2F%3E%E5%A6%82%E6%9E%9C%20((axis%20%3D%3D%20NULL)%20%7C%7C%20(totalCnt400M%20%3D%3D%200U))%20%E8%BF%94%E5%9B%9E%20false%3B%3CBR%20%2F%3E%E5%A6%82%E6%9E%9C%20(!APP_PWM_SelectPrescaler_FromPeriodCnt400M(totalCnt400M%2C%20%26amp%3Bprescale%2C%20%26amp%3BperiodTicks))%3CBR%20%2F%3E%E8%BF%94%E5%9B%9E%20false%EF%BC%9B%3CBR%20%2F%3E%3CBR%20%2F%3E%20uint32_t%20highTicks32%20%3D%20(uint32_t)(((uint64_t)periodTicks%20*%20(uint64_t)highCnt400M%20%2B%3CBR%20%2F%3E%20((uint64_t)totalCnt400M%20%2F%202ULL))%20%2F%3CBR%20%2F%3E%20%EF%BC%88uint64_t%EF%BC%89totalCnt400M%EF%BC%89%EF%BC%9B%3CBR%20%2F%3E%E5%A6%82%E6%9E%9C%20(highTicks32%20%3D%3D%200U)%20highTicks32%20%3D%201U%3B%3CBR%20%2F%3E%E5%A6%82%E6%9E%9C%20(highTicks32%20%26gt%3B%3D%20periodTicks)%20highTicks32%20%3D%20(uint32_t)periodTicks%20-%201U%3B%3CBR%20%2F%3E%3CBR%20%2F%3E%20uint32_t%20riseTicks32%20%3D%200U%3B%3CBR%20%2F%3E%20uint32_t%20fallTicks32%20%3D%20highTicks32%3B%3CBR%20%2F%3E%3CBR%20%2F%3E%20%23if%20HARD_PWM_LOW_START_PHASE_ENABLE%3CBR%20%2F%3E%20uint32_t%20lowTicks32%20%3D%20(uint32_t)periodTicks%20-%20highTicks32%3B%3CBR%20%2F%3E%E5%A6%82%E6%9E%9C%20(lowTicks32%20%26gt%3B%3D%20(2U%20*%20HARD_PWM_LOW_START_PHASE_MIN_TICKS))%3CBR%20%2F%3E%20%7B%3CBR%20%2F%3E%20uint32_t%20desiredLeadCnt400M%20%3D%20highCnt400M%3B%3CBR%20%2F%3E%20uint32_t%20minLeadCnt400M%20%3D%20(uint32_t)HARD_PWM_LOW_START_PHASE_MIN_US%20*%20400U%3B%3CBR%20%2F%3E%E5%A6%82%E6%9E%9C%20(desiredLeadCnt400M%20%26lt%3B%20minLeadCnt400M)%20desiredLeadCnt400M%20%3D%20minLeadCnt400M%3B%3CBR%20%2F%3E%3CBR%20%2F%3E%20uint32_t%20desiredLeadTicks32%20%3D%20(uint32_t)(((uint64_t)periodTicks%20*%20(uint64_t)desiredLeadCnt400M%20%2B%3CBR%20%2F%3E%20((uint64_t)totalCnt400M%20%2F%202ULL))%20%2F%3CBR%20%2F%3E%20%EF%BC%88uint64_t%EF%BC%89totalCnt400M%EF%BC%89%EF%BC%9B%3CBR%20%2F%3E%E5%A6%82%E6%9E%9C%20(desiredLeadTicks32%20%26lt%3B%20HARD_PWM_LOW_START_PHASE_MIN_TICKS)%3CBR%20%2F%3E%20desiredLeadTicks32%20%3D%20HARD_PWM_LOW_START_PHASE_MIN_TICKS%3B%3CBR%20%2F%3E%3CBR%20%2F%3E%20uint32_t%20maxRiseByHalfTicks32%20%3D%20lowTicks32%20%2F%202U%3B%3CBR%20%2F%3E%20uint32_t%20postGuardTicks32%20%3D%20(uint32_t)(((uint64_t)periodTicks%20*%3CBR%20%2F%3E%20(uint64_t)(HARD_PWM_VAL3_POST_LOW_GUARD_US%20*%20400U)%20%2B%3CBR%20%2F%3E%20((uint64_t)totalCnt400M%20%2F%202ULL))%20%2F%3CBR%20%2F%3E%20%EF%BC%88uint64_t%EF%BC%89totalCnt400M%EF%BC%89%EF%BC%9B%3CBR%20%2F%3E%E5%A6%82%E6%9E%9C%20(postGuardTicks32%20%26lt%3B%20HARD_PWM_VAL3_POST_LOW_GUARD_MIN_TICKS)%3CBR%20%2F%3E%20postGuardTicks32%20%3D%20HARD_PWM_VAL3_POST_LOW_GUARD_MIN_TICKS%3B%3CBR%20%2F%3E%20uint32_t%20maxRiseByPostGuardTicks32%20%3D%20(lowTicks32%20%26gt%3B%20postGuardTicks32)%20%3F%3CBR%20%2F%3E%20%EF%BC%88lowTicks32%20-%20postGuardTicks32%EF%BC%89%EF%BC%9A0U%EF%BC%9B%3CBR%20%2F%3E%3CBR%20%2F%3E%20uint32_t%20selectedRiseTicks32%3B%3CBR%20%2F%3E%E5%A6%82%E6%9E%9C%20(maxRiseByHalfTicks32%20%26gt%3B%3D%20desiredLeadTicks32)%3CBR%20%2F%3E%20%7B%3CBR%20%2F%3E%20selectedRiseTicks32%20%3D%20desiredLeadTicks32%3B%3CBR%20%2F%3E%E5%A6%82%E6%9E%9C%20(selectedRiseTicks32%20%26gt%3B%20maxRiseByHalfTicks32)%3CBR%20%2F%3E%20selectedRiseTicks32%20%3D%20maxRiseByHalfTicks32%3B%3CBR%20%2F%3E%20%7D%3CBR%20%2F%3E%E5%90%A6%E5%88%99%E5%A6%82%E6%9E%9C%EF%BC%88maxRiseByPostGuardTicks32%20%26gt%3B%3D%20desiredLeadTicks32%EF%BC%89%3CBR%20%2F%3E%20%7B%3CBR%20%2F%3E%20selectedRiseTicks32%20%3D%20desiredLeadTicks32%3B%3CBR%20%2F%3E%E5%A6%82%E6%9E%9C%20(selectedRiseTicks32%20%26gt%3B%20maxRiseByPostGuardTicks32)%3CBR%20%2F%3E%20selectedRiseTicks32%20%3D%20maxRiseByPostGuardTicks32%3B%3CBR%20%2F%3E%20%7D%3CBR%20%2F%3E%E5%88%AB%E7%9A%84%3CBR%20%2F%3E%7B%3CBR%20%2F%3E%20selectedRiseTicks32%20%3D%20maxRiseByPostGuardTicks32%3B%3CBR%20%2F%3E%20%7D%3CBR%20%2F%3E%3CBR%20%2F%3E%E5%A6%82%E6%9E%9C%20(selectedRiseTicks32%20%26gt%3B%3D%20HARD_PWM_LOW_START_PHASE_MIN_TICKS)%3CBR%20%2F%3E%20%7B%3CBR%20%2F%3E%20riseTicks32%20%3D%20selectedRiseTicks32%3B%3CBR%20%2F%3E%20fallTicks32%20%3D%20riseTicks32%20%2B%20highTicks32%3B%3CBR%20%2F%3E%20%7D%3CBR%20%2F%3E%20%7D%3CBR%20%2F%3E%20%23endif%3CBR%20%2F%3E%3CBR%20%2F%3E%E5%A6%82%E6%9E%9C%20(fallTicks32%20%26gt%3B%3D%20(uint32_t)periodTicks)%20fallTicks32%20%3D%20(uint32_t)periodTicks%20-%201U%3B%3CBR%20%2F%3E%20uint16_t%20riseTicks%20%3D%20(uint16_t)riseTicks32%3B%3CBR%20%2F%3E%20uint16_t%20fallTicks%20%3D%20(uint16_t)fallTicks32%3B%3CBR%20%2F%3E%20PWM_SetPwmLdok(axis-%26gt%3BpwmBase%2C%20APP_PwmModuleMask(axis)%2C%20false)%3B%3CBR%20%2F%3E%20uint16_t%20ctrl%20%3D%20axis-%26gt%3BpwmBase-%26gt%3BSM%5Baxis-%26gt%3BpwmModule%5D.CTRL%3B%3CBR%20%2F%3E%20ctrl%20%26amp%3B%3D%20(uint16_t)(~PWM_CTRL_PRSC_MASK)%3B%3CBR%20%2F%3E%20ctrl%20%7C%3D%20PWM_CTRL_PRSC%EF%BC%88%E9%A2%84%E5%88%86%E9%A2%91%EF%BC%89%EF%BC%9B%3CBR%20%2F%3E%20axis-%26gt%3BpwmBase-%26gt%3BSM%5Baxis-%26gt%3BpwmModule%5D.CTRL%20%3D%20ctrl%3B%3CBR%20%2F%3E%3CBR%20%2F%3E%20axis-%26gt%3BpwmBase-%26gt%3BSM%5Baxis-%26gt%3BpwmModule%5D.INIT%20%3D%200U%3B%3CBR%20%2F%3E%20axis-%26gt%3BpwmBase-%26gt%3BSM%5Baxis-%26gt%3BpwmModule%5D.VAL0%20%3D%200U%3B%3CBR%20%2F%3E%20axis-%26gt%3BpwmBase-%26gt%3BSM%5Baxis-%26gt%3BpwmModule%5D.VAL1%20%3D%20(uint16_t)(periodTicks%20-%201U)%3B%3CBR%20%2F%3E%E5%A6%82%E6%9E%9C%20(axis-%26gt%3BpwmChannel%20%3D%3D%20kPWM_PwmA)%20%7B%3CBR%20%2F%3E%20axis-%26gt%3BpwmBase-%26gt%3BSM%5Baxis-%26gt%3BpwmModule%5D.VAL2%20%3D%20riseTicks%3B%3CBR%20%2F%3E%20axis-%26gt%3BpwmBase-%26gt%3BSM%5Baxis-%26gt%3BpwmModule%5D.VAL3%20%3D%20fallTicks%3B%3CBR%20%2F%3E%20%7D%20%E5%90%A6%E5%88%99%E5%A6%82%E6%9E%9C%20(axis-%26gt%3BpwmChannel%20%3D%3D%20kPWM_PwmB)%20%7B%3CBR%20%2F%3E%20axis-%26gt%3BpwmBase-%26gt%3BSM%5Baxis-%26gt%3BpwmModule%5D%E3%80%82VAL4%20%3D%20riseTicks%3B%3CBR%20%2F%3E%20axis-%26gt%3BpwmBase-%26gt%3BSM%5Baxis-%26gt%3BpwmModule%5D.VAL5%20%3D%20fallTicks%3B%3CBR%20%2F%3E%20%7D%3CBR%20%2F%3E%20axis-%26gt%3BpwmBase-%26gt%3BSM%5Baxis-%26gt%3BpwmModule%5D.TCTRL%20%3D%20PWM_TCTRL_OUT_TRIG_EN(axis-%26gt%3BoutTrigMask)%3B%3CBR%20%2F%3E%3CBR%20%2F%3E%20PWM_SetPwmLdok(axis-%26gt%3BpwmBase%2C%20APP_PwmModuleMask(axis)%2C%20true)%3B%3CBR%20%2F%3E%20PWM_SetPwmLdok(axis-%26gt%3BpwmBase%2C%20APP_PwmModuleMask(axis)%2C%20true)%3B%3CBR%20%2F%3E%20axis-%26gt%3BpwmConfigValid%20%3D%20true%3B%3CBR%20%2F%3E%20axis-%26gt%3BcachedHighCnt400M%20%3D%20highCnt400M%3B%3CBR%20%2F%3E%20axis-%26gt%3BcachedLowCnt400M%20%3D%20lowCnt400M%3B%3CBR%20%2F%3E%E8%BF%94%E5%9B%9E%20true%EF%BC%9B%3CBR%20%2F%3E%20%7D%3C%2FLINGO-BODY%3E%3CLINGO-SUB%20id%3D%22lingo-sub-2387922%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%20translate%3D%22no%22%3ERe%3A%20RT1176%20PWM%20startup%20failed%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-2387922%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CP%3E%E4%BD%A0%E5%A5%BD%3CA%20href%3D%22https%3A%2F%2Fcommunity.nxp.com%2Ft5%2Fuser%2Fviewprofilepage%2Fuser-id%2F264017%22%20target%3D%22_blank%22%3E%40liu626%3C%2FA%3E%20%EF%BC%8C%3C%2FP%3E%0A%3CP%3E%E6%82%A8%E8%83%BD%E5%90%A6%E5%B8%AE%E6%88%91%E6%89%BE%E5%87%BA%E9%85%8D%E7%BD%AE%E9%97%AE%E9%A2%98%EF%BC%8C%E5%B9%B6%E6%B5%8B%E8%AF%95%E4%B8%80%E4%B8%8B%E4%BB%85%E5%88%9D%E5%A7%8B%E5%8C%96%20PWM3%20%E6%97%B6%E9%97%AE%E9%A2%98%E6%98%AF%E5%90%A6%E4%BB%8D%E7%84%B6%E5%AD%98%E5%9C%A8%EF%BC%9F%3C%2FP%3E%0A%3CP%3E%E5%9C%A8%E6%9F%A5%E7%9C%8B%E4%BA%86%E6%82%A8%E5%88%86%E4%BA%AB%E7%9A%84%E9%85%8D%E7%BD%AE%E5%90%8E%EF%BC%8C%E4%B8%BA%E4%BA%86%E5%B0%9D%E8%AF%95%E9%87%8D%E7%8E%B0%E8%AF%A5%E8%A1%8C%E4%B8%BA%EF%BC%8C%E6%88%91%E6%9C%89%E4%BB%A5%E4%B8%8B%E9%97%AE%E9%A2%98%EF%BC%9A%3C%2FP%3E%0A%3CP%3Eaxis_ctrl_t%20%E7%9A%84%E5%AE%9A%E4%B9%89%E6%98%AF%E4%BB%80%E4%B9%88%EF%BC%9F%3C%2FP%3E%0A%3CP%3E%E6%82%A8%E7%9A%84%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F%E4%B8%AD%E6%98%AF%E5%90%A6%E5%90%AF%E7%94%A8%E4%BA%86%20HARD_PWM_LOW_START_PHASE_ENABLE%20%E5%92%8C%20HARD_PWM_STATE_GUARD_ENABLE%EF%BC%9F%3C%2FP%3E%0A%3CP%3E%E4%BB%A5%E4%B8%8BAPP%E5%8A%9F%E8%83%BD%E6%98%AF%E5%81%9A%E4%BB%80%E4%B9%88%E7%94%A8%E7%9A%84%EF%BC%9F%3C%2FP%3E%0A%3CP%3EAPP_PWM_Unmap_Selected_Fault%3CBR%20%2F%3E%20APP_PWM_ClearFault_Safe%3CBR%20%2F%3E%20APP_PWM_%E7%A6%81%E7%94%A8%E8%BE%93%E5%87%BA%3CBR%20%2F%3EAPP_QTMR_Disable_Low_OFLAG_Output%3CBR%20%2F%3E%20APP_StateGuard_Reset%3CBR%20%2F%3E%20APP_PWM_SelectPrescaler_FromPeriodCnt400M%3CBR%20%2F%3E%20APP_PwmModuleMask%3CBR%20%2F%3E%3CBR%20%2F%3E%E6%AD%A4%E8%87%B4%EF%BC%8C%3CBR%20%2F%3E%E5%B7%B4%E5%8B%83%E7%BD%97%3C%2FP%3E%3C%2FLINGO-BODY%3E%3CLINGO-SUB%20id%3D%22lingo-sub-2388687%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%20translate%3D%22no%22%3ERe%3A%20RT1176%20PWM%20startup%20failed%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-2388687%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CP%3E%E6%84%9F%E8%B0%A2%E4%BD%A0%E7%9A%84%E5%9B%9E%E5%A4%8D%E3%80%82%E6%88%91%E4%BD%BF%E7%94%A8%E7%9A%84%20GPIO%20%E5%BC%95%E8%84%9A%E6%98%AF%20rt1176%20%E7%9A%84%20GPIO_EMC_B1_29%E3%80%82%E2%80%9Caxis_ctrl_t%E2%80%9D%E6%98%AF%E4%B8%8E%E7%94%B5%E6%9C%BA%E8%BD%B4%E7%9B%B8%E5%85%B3%E7%9A%84%E5%AE%9A%E4%B9%89%E3%80%82%3C%2FP%3E%3CP%3E*%20PWM%20%E8%BE%93%E5%87%BA%E8%84%89%E5%86%B2%20-%26gt%3B%20%E8%A7%A6%E5%8F%91%20XBAR%20%E4%BF%A1%E5%8F%B7%20-%26gt%3B%20%E8%84%89%E5%86%B2%E4%B8%8B%E9%99%8D%E6%B2%BF%E9%A9%B1%E5%8A%A8%20QTMR%20%E7%9A%84%E5%A4%96%E9%83%A8%E6%97%B6%E9%92%9F%E8%BE%93%E5%85%A5%20-%26gt%3B%3CBR%20%2F%3E%20*%20QTMR%2032%20%E4%BD%8D%E7%BA%A7%E8%81%94%E8%AE%A1%E6%95%B0%E5%99%A8%E9%80%92%E5%87%8F%201%20-%26gt%3B%20%E5%BD%93%E8%AE%A1%E6%95%B0%E5%99%A8%E8%BE%BE%E5%88%B0%200%20%E6%97%B6%EF%BC%8C%E8%A7%A6%E5%8F%91%20QTMR%20%E6%AF%94%E8%BE%83%E4%B8%AD%E6%96%AD%20-%26gt%3B%20%E4%B8%AD%E6%96%AD%E5%86%85%E9%83%A8%E5%85%B3%E9%97%AD%20PWM%3CBR%20%2F%3E%20*%20%E5%90%8C%E6%97%B6%EF%BC%8CQTMR%20%E8%A7%A6%E5%8F%91%E7%A1%AC%E4%BB%B6%E6%95%85%E9%9A%9C%EF%BC%8C%E7%9B%B4%E6%8E%A5%E6%8B%89%E4%BD%8E%20PWM%20%E7%9A%84%E7%89%A9%E7%90%86%E8%BE%93%E5%87%BA%E5%BC%95%E8%84%9A%E3%80%82%E3%80%82ID%3D%20AXIS_Y%EF%BC%8C%3CBR%20%2F%3E%20%E3%80%82%E5%A7%93%E5%90%8D%3D%20%22Y%22%2C%20%2F*%20%E7%94%A8%E4%BA%8E%E4%B8%B2%E5%8F%A3%E6%97%A5%E5%BF%97%E8%AE%B0%E5%BD%95%E6%88%96%E6%96%AD%E7%82%B9%E8%B0%83%E8%AF%95%EF%BC%8C%E4%BB%A5%E8%AF%86%E5%88%AB%20Y%20%E8%BD%B4%20*%2F%3CBR%20%2F%3E%20%2F*%20%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%20PWM%20%E8%BE%93%E5%87%BA%E8%B5%84%E6%BA%90%E5%88%86%E9%85%8D%20%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%20*%2F%3CBR%20%2F%3E%20.pwmBase%3D%20PWM3%2C%20%2F*%20Y%E8%BD%B4%E4%BD%BF%E7%94%A8FlexPWM3%E6%A8%A1%E5%9D%97%20*%2F%3CBR%20%2F%3E%20.pwm%E6%A8%A1%E5%9D%97%3D%20kPWM_Module_0%2C%20%2F*%20%E4%BD%BF%E7%94%A8%20PWM3%20%E7%9A%84%E5%AD%90%E6%A8%A1%E5%9D%97%200%EF%BC%88%E6%AF%8F%E4%B8%AA%20PWM%20%E6%9C%89%204%20%E4%B8%AA%E5%AD%90%E6%A8%A1%E5%9D%97%EF%BC%8C%E7%BC%96%E5%8F%B7%E4%BB%8E%200%20%E5%88%B0%203%EF%BC%89%20*%2F%3CBR%20%2F%3E%20.pwm%E9%80%9A%E9%81%93%3D%20kPWM_PwmA%2C%20%2F*%20%E4%BD%BF%E7%94%A8%E5%AD%90%E6%A8%A1%E5%9D%97%200%20%E7%9A%84%20A%20%E7%9B%B8%E8%BE%93%E5%87%BA%E5%BC%95%E8%84%9A%EF%BC%8C%E5%AF%B9%E5%BA%94%E4%BA%8E%E7%89%A9%E7%90%86%E5%BC%95%E8%84%9A%20GPIO_EMC_B1_29%20*%2F%3CBR%20%2F%3E%20%2F*%20%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%2032%20%E4%BD%8D%20QTMR%20%E7%BA%A7%E8%81%94%E8%AE%A1%E6%95%B0%E8%B5%84%E6%BA%90%E5%88%86%E9%85%8D%20%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%20*%2F%3CBR%20%2F%3E%20.tmrBase%3D%20TMR3%2C%20%2F*%20Y%E8%BD%B4%E4%BD%BF%E7%94%A8QTMR3%E5%A4%96%E8%AE%BE%EF%BC%88%E5%AF%B9%E5%BA%94%E4%BA%8EIRQ%E4%B8%AD%E6%96%AD%E5%8F%B7TMR3_IRQn%EF%BC%89%20*%2F%3CBR%20%2F%3E%E4%BD%8E%3D%20kQTMR_Channel_0%2C%20%2F*%2016%20%E4%BD%8D%E4%BD%8E%E8%AE%A1%E6%95%B0%E5%99%A8%EF%BC%9A%E4%BD%BF%E7%94%A8%20TMR3%20%E7%9A%84%E9%80%9A%E9%81%93%200%20*%2F%3CBR%20%2F%3E%20.highCh%3D%20kQTMR_Channel_1%2C%2F*%2016%20%E4%BD%8D%E9%AB%98%E4%BD%8D%E8%AE%A1%E6%95%B0%E5%99%A8%EF%BC%9A%E4%BD%BF%E7%94%A8%20TMR3%20%E7%9A%84%E9%80%9A%E9%81%93%201%20*%2F%3CBR%20%2F%3E%20%2F*%20%3CLI-EMOJI%20id%3D%22lia_backhand-index-pointing-right%22%20title%3D%22%3Abackhand_index_pointing_right%3A%22%3E%3C%2FLI-EMOJI%3E%20.lowCh%20%E5%92%8C%20.highCh%E5%AE%83%E4%BB%AC%E6%88%90%E5%AF%B9%E5%87%BA%E7%8E%B0%EF%BC%8C%E5%9C%A8%E7%A1%AC%E4%BB%B6%E5%B1%82%E9%9D%A2%E4%B8%8A%EF%BC%8C%E5%AE%83%E4%BB%AC%E4%BC%9A%E8%87%AA%E5%8A%A8%E7%BB%84%E5%90%88%E6%88%90%E4%B8%80%E4%B8%AA%2032%20%E4%BD%8D%E8%AE%A1%E6%95%B0%E5%99%A8%E3%80%82%3CBR%20%2F%3E%20%2F*%20%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%20%E7%A1%AC%E4%BB%B6%E7%BA%A7%E8%81%94%E6%97%B6%E9%92%9F%E6%BA%90%E9%85%8D%E7%BD%AE%EF%BC%88%E6%A0%B8%E5%BF%83%E5%85%B3%E9%94%AE%EF%BC%89%20%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%20*%2F%20.tmrInputsrc%3DkQTMR_ClockCounter0InputPin%2C%3CBR%20%2F%3E%2F*%20%E9%80%9A%E9%81%93%200%20%E7%9A%84%E6%97%B6%E9%92%9F%E6%BA%90%EF%BC%9A%E8%AE%BE%E7%BD%AE%E4%B8%BA%E2%80%9C%E5%A4%96%E9%83%A8%E5%BC%95%E8%84%9A%E8%BE%93%E5%85%A5%200%E2%80%9D%E3%80%82%3CBR%20%2F%3E%E5%9C%A8%20XBAR%20%E9%85%8D%E7%BD%AE%E4%B8%AD%EF%BC%8CPWM3%20%E8%84%89%E5%86%B2%E7%9A%84%E4%B8%8B%E9%99%8D%E6%B2%BF%E9%80%9A%E8%BF%87%20XBAR%20%E8%BF%9E%E6%8E%A5%E5%88%B0%20TMR3%20%E9%80%9A%E9%81%93%200%20%E7%9A%84%E8%BE%93%E5%85%A5%E5%BC%95%E8%84%9A%E3%80%82%3CBR%20%2F%3E%E5%9B%A0%E6%AD%A4%EF%BC%8C%E6%AF%8F%E6%AC%A1%20PWM%20%E8%BE%93%E5%87%BA%E8%84%89%E5%86%B2%E6%97%B6%EF%BC%8C%E9%80%9A%E9%81%93%200%EF%BC%8816%20%E4%BD%8D%EF%BC%89%E5%B0%86%E6%89%A7%E8%A1%8C%E4%B8%80%E6%AC%A1%E5%87%8F%E9%87%8F%E6%93%8D%E4%BD%9C%E3%80%82*%2F%3C%2FP%3E%3CP%3E.cascadePcs%20%3D%204U%EF%BC%8C%3CBR%20%2F%3E%20%2F*%20%E9%AB%98%2016%20%E4%BD%8D%E9%80%9A%E9%81%93%EF%BC%88%E9%80%9A%E9%81%93%201%EF%BC%89%E7%9A%84%E6%97%B6%E9%92%9F%E6%BA%90%20(PCS)%20%E9%85%8D%E7%BD%AE%E3%80%82%3CBR%20%2F%3E%E5%9C%A8%20i.MX%20RT%20%E7%9A%84%20QTMR%20%E5%AF%84%E5%AD%98%E5%99%A8%E4%B8%AD%EF%BC%8CPCS%20%E5%80%BC%E5%AF%B9%E5%BA%94%E5%A6%82%E4%B8%8B%EF%BC%9A%3CBR%20%2F%3E%200-3%20%3D%20%E5%A4%96%E9%83%A8%E5%BC%95%E8%84%9A%E8%BE%93%E5%85%A5%EF%BC%9B%3CBR%20%2F%3E%204%20%3D%20%E9%80%9A%E9%81%93%200%20%E7%9A%84%E6%BA%A2%E5%87%BA%2F%E7%BB%88%E6%AD%A2%E4%BA%8B%E4%BB%B6%EF%BC%9B%3CBR%20%2F%3E%205%20%3D%20%E9%80%9A%E9%81%93%201%20%E7%9A%84%E6%BA%A2%E5%87%BA%2F%E7%BB%88%E6%AD%A2%E4%BA%8B%E4%BB%B6%EF%BC%9B%3CBR%20%2F%3E%206%20%3D%20%E9%80%9A%E9%81%93%202%20%E7%9A%84%E6%BA%A2%E5%87%BA%2F%E7%BB%88%E6%AD%A2%E4%BA%8B%E4%BB%B6%EF%BC%9B%3CBR%20%2F%3E%207%20%3D%20%E9%80%9A%E9%81%93%203%20%E7%9A%84%E6%BA%A2%E5%87%BA%2F%E7%BB%88%E6%AD%A2%E4%BA%8B%E4%BB%B6%E3%80%82%3CBR%20%2F%3E%E8%BF%99%E9%87%8C%E9%85%8D%E7%BD%AE%E4%B8%BA%204U%EF%BC%8C%E6%84%8F%E6%80%9D%E6%98%AF%EF%BC%9A%E8%AE%A9%E2%80%9CTMR3%20%E7%9A%84%E9%80%9A%E9%81%93%201%E2%80%9D%E7%9B%91%E6%B5%8B%E2%80%9CTMR3%20%E7%9A%84%E9%80%9A%E9%81%93%200%20%E7%9A%84%E6%BA%A2%E5%87%BA%E4%BA%8B%E4%BB%B6%E2%80%9D%E3%80%82%3C%2FP%3E%3CP%3E%E5%B7%B2%E5%90%AF%E7%94%A8%20HARD_PWM_LOW_START_PHASE_ENABLE%20%E5%92%8C%20HARD_PWM_STATE_GUARD_ENABLE%E3%80%82APP_PWM_Unmap_Selected_Fault%3C%2FP%3E%3CP%3E%E5%8A%9F%E8%83%BD%EF%BC%9A%E7%A7%BB%E9%99%A4%E4%B8%8E%E5%BD%93%E5%89%8D%E8%BD%B4%E5%AF%B9%E5%BA%94%E7%9A%84%E6%95%85%E9%9A%9C%E5%BC%95%E8%84%9A%E6%98%A0%E5%B0%84%E3%80%82%E8%B0%83%E7%94%A8%E5%BA%95%E5%B1%82%20PWM_SetupFaultDisableMap%20%E5%87%BD%E6%95%B0%E6%9D%A5%E7%A6%81%E7%94%A8%E6%95%85%E9%9A%9C%E3%80%82%E7%9B%AE%E7%9A%84%E6%98%AF%E4%B8%BA%E4%BA%86%EF%BC%9A%E5%9C%A8%E4%B8%8D%E9%9C%80%E8%A6%81%E7%A1%AC%E4%BB%B6%E6%95%85%E9%9A%9C%E7%9A%84%E6%83%85%E5%86%B5%E4%B8%8B%EF%BC%8C%E9%98%B2%E6%AD%A2%E6%84%8F%E5%A4%96%E7%9A%84%E5%A4%96%E9%83%A8%E5%B9%B2%E6%89%B0%E5%AF%BC%E8%87%B4%20PWM%20%E5%85%B3%E9%97%AD%EF%BC%8C%E4%BB%8E%E8%80%8C%E6%96%B9%E4%BE%BF%E5%BA%95%E5%B1%82%E8%B0%83%E8%AF%95%E8%BF%87%E7%A8%8B%E3%80%82%3CBR%20%2F%3EAPP_PWM_ClearFault%EF%BC%88%E5%8E%9F%E5%A7%8B%E4%BB%A3%E7%A0%81%E5%87%BD%E6%95%B0%EF%BC%89%3CBR%20%2F%3E%E5%8A%9F%E8%83%BD%EF%BC%9A%E6%B8%85%E9%99%A4%20PWM%20%E6%A8%A1%E5%9D%97%E7%9A%84%E6%95%85%E9%9A%9C%E7%8A%B6%E6%80%81%E6%A0%87%E5%BF%97%EF%BC%88axis-%26gt%3BpwmBase-%26gt%3BFSTS%EF%BC%89%E3%80%82%E8%A7%A6%E5%8F%91%E7%A1%AC%E4%BB%B6%E6%95%85%E9%9A%9C%E5%90%8E%EF%BC%8C%E5%BF%85%E9%A1%BB%E5%85%88%E6%B8%85%E9%99%A4%E6%AD%A4%E6%A0%87%E5%BF%97%EF%BC%8C%E7%84%B6%E5%90%8E%E6%89%8D%E8%83%BD%E5%85%81%E8%AE%B8%20PWM%20%E9%87%8D%E6%96%B0%E5%90%AF%E5%8A%A8%E3%80%82%3CBR%20%2F%3EAPP_PWM_%E7%A6%81%E7%94%A8%E8%BE%93%E5%87%BA%3C%2FP%3E%3CP%3E%E5%8A%9F%E8%83%BD%EF%BC%9A%E7%AB%8B%E5%8D%B3%E5%81%9C%E6%AD%A2%20PWM%20%E5%AE%9A%E6%97%B6%E5%99%A8%EF%BC%8C%E5%BC%BA%E5%88%B6%E5%BC%95%E8%84%9A%E8%BE%93%E5%87%BA%E4%BD%8E%E7%94%B5%E5%B9%B3%EF%BC%88PWM_SetPwmForceOutputToZero%EF%BC%89%EF%BC%8C%E5%B9%B6%E5%90%AF%E7%94%A8%E8%BE%93%E5%87%BA%E3%80%82%E5%AE%83%E7%9A%84%E7%9B%AE%E7%9A%84%E6%98%AF%E7%A1%AE%E4%BF%9D%E5%9C%A8%E7%94%B5%E6%9C%BA%E5%90%AF%E5%8A%A8%E4%B9%8B%E5%89%8D%EF%BC%8C%E5%BC%95%E8%84%9A%E4%B8%8D%E4%BC%9A%E5%9B%A0%E4%B8%BA%E6%B5%AE%E7%A9%BA%E6%88%96%E5%A4%84%E4%BA%8E%E9%BB%98%E8%AE%A4%E7%8A%B6%E6%80%81%E8%80%8C%E8%BE%93%E5%87%BA%E9%AB%98%E7%94%B5%E5%B9%B3%EF%BC%8C%E8%BF%99%E5%8F%AF%E8%83%BD%E4%BC%9A%E5%AF%BC%E8%87%B4%E7%94%B5%E6%9C%BA%E8%BF%90%E5%8A%A8%E4%B8%8D%E8%A7%84%E5%88%99%E3%80%82%3CBR%20%2F%3EAPP_QTMR_Disable_Low_OFLAG_Output%3C%2FP%3E%3CP%3E%E5%8A%9F%E8%83%BD%EF%BC%9A%E7%A6%81%E7%94%A8%20QTMR%20%E7%9A%84%20OFLAG%EF%BC%88%E7%8A%B6%E6%80%81%E6%A0%87%E5%BF%97%EF%BC%89%E8%BE%93%E5%87%BA%EF%BC%8C%E5%B9%B6%E5%BC%BA%E5%88%B6%20OFLAG%20%E5%A4%84%E4%BA%8E%E4%BD%8E%E7%94%B5%E5%B9%B3%E3%80%82%E5%AE%83%E4%B8%8E%20XBAR%20%E7%A1%AC%E4%BB%B6%E9%85%8D%E5%90%88%E4%BD%BF%E7%94%A8%EF%BC%8C%E5%85%B6%E4%BD%9C%E7%94%A8%E6%98%AF%E5%88%87%E6%96%AD%20QTMR%20%E8%BE%93%E5%87%BA%E5%88%B0%20PWM%20%E6%95%85%E9%9A%9C%E5%BC%95%E8%84%9A%E7%9A%84%E8%B7%AF%E5%BE%84%EF%BC%8C%E9%98%B2%E6%AD%A2%E5%9C%A8%E5%90%AF%E5%8A%A8%E5%89%8D%E6%84%8F%E5%A4%96%E8%A7%A6%E5%8F%91%E6%95%85%E9%9A%9C%E3%80%82%3CBR%20%2F%3EAPP_StateGuard_Reset%3C%2FP%3E%3CP%3E%E5%8A%9F%E8%83%BD%EF%BC%9A%E6%B8%85%E9%99%A4%E5%9B%BD%E5%AE%B6%E5%8D%AB%E9%98%9F%EF%BC%88%E7%9C%8B%E9%97%A8%E7%8B%97%EF%BC%89%E7%9A%84%E8%AE%A1%E6%95%B0%E5%99%A8%E5%92%8C%E6%97%97%E5%B8%9C%E3%80%82%E5%A6%82%E6%9E%9C%E5%90%AF%E7%94%A8%20HARD_PWM_STATE_GUARD_ENABLE%20%E6%97%B6%E7%B3%BB%E7%BB%9F%E9%81%87%E5%88%B0%E9%95%BF%E6%97%B6%E9%97%B4%E6%97%A0%E8%84%89%E5%86%B2%E5%8F%98%E5%8C%96%E6%88%96%E6%AD%BB%E9%94%81%EF%BC%8C%E5%88%99%E6%AD%A4%E5%8A%9F%E8%83%BD%E7%94%A8%E4%BA%8E%E5%9C%A8%E5%81%9C%E6%AD%A2%E6%88%96%E9%87%8D%E6%96%B0%E5%90%AF%E5%8A%A8%E7%B3%BB%E7%BB%9F%E4%B9%8B%E5%89%8D%E9%87%8D%E7%BD%AE%E8%BF%99%E4%BA%9B%E4%BF%9D%E6%8A%A4%E5%8F%98%E9%87%8F%E3%80%82%3CBR%20%2F%3EAPP_PWM_SelectPrescaler_FromPeriodCnt400M%3C%2FP%3E%3CP%3E%E5%8A%9F%E8%83%BD%EF%BC%9A%E8%BF%99%E6%98%AF%E4%B8%80%E4%B8%AA%E9%9D%9E%E5%B8%B8%E6%A0%B8%E5%BF%83%E7%9A%84%E5%BA%95%E5%B1%82%E9%A2%91%E7%8E%87%E8%AE%A1%E7%AE%97%E5%87%BD%E6%95%B0%E3%80%82%E5%AE%83%E6%8E%A5%E6%94%B6%E9%AB%98%E7%94%B5%E5%B9%B3%20%2B%20%E4%BD%8E%E7%94%B5%E5%B9%B3%E7%9A%84%E6%80%BB%20400MHz%20%E8%AE%A1%E6%95%B0%E5%80%BC%EF%BC%8C%E5%B9%B6%E8%AE%A1%E7%AE%97%E5%BA%94%E8%AE%BE%E7%BD%AE%E5%A4%9A%E5%B0%91%E4%B8%AA%E9%A2%84%E5%88%86%E9%A2%91%E5%99%A8%20(PRSC)%20%E5%92%8C%20PWM%20%E5%91%A8%E6%9C%9F%20(PERIOD)%20%E6%89%8D%E8%83%BD%E6%94%BE%E5%85%A5%2016%20%E4%BD%8D%20PWM%20%E5%AF%84%E5%AD%98%E5%99%A8%E4%B8%AD%E3%80%82%E8%AF%B7%E6%B3%A8%E6%84%8F%EF%BC%9A%E5%A6%82%E6%9E%9C%E8%AE%A1%E7%AE%97%E5%87%BA%E7%9A%84%E5%91%A8%E6%9C%9F%E8%B6%85%E8%BF%87%2065535%20%E4%B8%94%E9%99%A4%E6%B3%95%E7%B3%BB%E6%95%B0%E8%B6%85%E5%87%BA%E8%8C%83%E5%9B%B4%EF%BC%8C%E5%88%99%E6%AD%A4%E5%87%BD%E6%95%B0%E5%B0%86%E8%BF%94%E5%9B%9E%20false%EF%BC%8C%E5%AF%BC%E8%87%B4%E7%94%B5%E6%9C%BA%E6%97%A0%E6%B3%95%E5%90%AF%E5%8A%A8%E3%80%82%3CBR%20%2F%3EAPP_PwmModuleMask%3C%2FP%3E%3CP%3E%E5%8A%9F%E8%83%BD%EF%BC%9A%E5%B0%86%20PWM%20%E5%AD%90%E6%A8%A1%E5%9D%97%E7%9A%84%E7%B4%A2%E5%BC%95%E5%8F%B7%EF%BC%88%E4%BE%8B%E5%A6%82%EF%BC%8C%E5%80%BC%E4%B8%BA%200%20%E7%9A%84%20kPWM_Module_0%EF%BC%89%E8%BD%AC%E6%8D%A2%E4%B8%BA%E5%B7%A6%E7%A7%BB%20N%20%E4%BD%8D%E7%9A%84%E4%BD%8D%E6%8E%A9%E7%A0%81%E3%80%82NXP%20%E7%9A%84%E8%AE%B8%E5%A4%9A%20PWM%20%E5%AF%84%E5%AD%98%E5%99%A8%EF%BC%88%E4%BE%8B%E5%A6%82%20OUTEN%E3%80%81MCTRL%EF%BC%89%E9%83%BD%E6%98%AF%E9%80%90%E4%BD%8D%E6%8E%A7%E5%88%B6%E7%9A%84%E3%80%82%E8%AF%A5%E5%87%BD%E6%95%B0%E8%B4%9F%E8%B4%A3%E7%94%9F%E6%88%90%E6%AD%A3%E7%A1%AE%E7%9A%84%E4%BA%8C%E8%BF%9B%E5%88%B6%E6%8E%A9%E7%A0%81%E3%80%82%3C%2FP%3E%3C%2FLINGO-BODY%3E