I have a board on which I have to produce a simple PWM waveform on pin GPIO_AD_B1_09 on an MIMRT1021DAG5A.
This requires going through the XBAR.
I have successfully routed another pin through the XBAR to a QTMR input, but can't see any output on this pin with the following PWM code:
// Generating 22kHz PWM using TMR1 channel 1 to pin GPIO_AD_B1_09
// Want to connect TMR1.output1 to pin GPIO_AD_B1_09
// but need to do it through the XBAR
#define FAN_PWM_TIMER TMR1
#define FAN_PWM_TIMER_CHANNEL kQTMR_Channel_1
#define FAN_PWM_FREQUENCY 22000UL
#define FAN_TIMER_DIVIDED_CLOCK 1953125UL
void fan_pwm_initialize(void)
{
CLOCK_EnableClock(kCLOCK_Iomuxc);
CLOCK_EnableClock(kCLOCK_Xbar1);
XBARA_Init(XBARA);
IOMUXC_SetPinMux(IOMUXC_GPIO_AD_B1_09_XBAR1_INOUT13, 0);
IOMUXC_SetPinConfig(IOMUXC_GPIO_AD_B1_09_XBAR1_INOUT13, 0x1080);
IOMUXC_GPR->GPR6 = (IOMUXC_GPR->GPR6 & (~(IOMUXC_GPR_GPR6_IOMUXC_XBAR_DIR_SEL_13_MASK))) |
IOMUXC_GPR_GPR6_IOMUXC_XBAR_DIR_SEL_13(0x01U);
XBARA_SetSignalsConnection(XBARA, kXBARA1_InputQtimer1Tmr1, kXBARA1_OutputIomuxXbarInout13);
qtmr_config_t qtmrConfig = {
.debugMode = kQTMR_RunNormalInDebug,
.enableExternalForce = false,
.enableMasterMode = false,
.faultFilterCount = 0,
.faultFilterPeriod = 0,
.primarySource = kQTMR_ClockDivide_64, // 1.953 MHz clock
.secondarySource = kQTMR_Counter0InputPin,
};
QTMR_Init(FAN_PWM_TIMER, FAN_PWM_TIMER_CHANNEL, &qtmrConfig);
// start at 50% duty cycle
QTMR_SetupPwm(FAN_PWM_TIMER, FAN_PWM_TIMER_CHANNEL, FAN_PWM_FREQUENCY, 50, false, FAN_TIMER_DIVIDED_CLOCK);
QTMR_StartTimer(FAN_PWM_TIMER, FAN_PWM_TIMER_CHANNEL, kQTMR_PriSrcRiseEdge);
};
How can I make this work? I have looked at the TMR1 registers in a debugger and they look OK.