Made some code that shows my issue in serial monitor.
Teensy 4.1
Connect pin 16 to ground
Look at serial monitor (and reboot a few times to see both situations occuring):
Good:
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 2 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0
0 0 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 2 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 2 0 0 0 0 0 1 0 0 0 2 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0
0 0 3 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 1 0 0 0 0 2 0 0 0
0 0 0 0 3 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 3 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 3 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 1 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 3 0 3 0 0 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 4 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 0 0 0 0
0 0 0 0 0 0 0 1 0 2 0 0 0 1 0 0 0 1 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 0 0 0 3 0 2 0 0 0 0 0 1 0 0 0 1 0 0 0
0 0 0 0 0 0 2 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 2 0 0
Bad (noisy):
0 3 1 0 1 2 0 1 0 0 2 0 1 2 0 1 0 0 1 0 1 2 0 1 0 0 2 0 1 2 0 1 0 0 1 0 2 1 0 1 0 0 2 0 1 2 0 2 0 0
2 0 1 2 0 1 1 0 1 0 2 2 0 1 0 0 1 3 2 1 0 2 0 0 1 0 1 1 0 1 0 0 2 0 1 2 0 2 0 0 1 0 2 2 0 1 0 0 2 0
3 1 0 2 0 0 1 0 1 1 0 2 0 0 1 0 2 1 0 1 0 0 2 0 1 4 0 6 0 0 0 0 1 2 1 2 0 0 1 0 1 2 0 1 0 0 1 0 2 0
0 2 0 0 1 1 1 2 0 1 0 0 1 0 5 2 2 1 0 0 1 0 2 2 0 1 0 0 2 0 1 2 0 2 0 0 2 0 2 2 0 2 2 0 3 0 1 2 0 1
0 0 1 0 2 3 0 4 0 0 1 0 2 3 0 2 0 0 1 0 2 2 0 2 0 0 2 0 1 2 0 1 1 0 2 0 1 2 0 1 0 0 2 0 1 2 0 4 0 0
2 0 1 2 0 1 0 0 1 0 2 2 0 2 0 0 1 0 1 2 0 2 0 0 1 0 2 1 0 1 0 0 1 0 1 2 0 2 0 0 2 0 2 1 0 1 0 0 2 0
2 2 0 1 0 0 3 0 1 2 1 1 1 0 1 0 2 1 1 2 0 0 2 0 2 2 0 2 0 0 5 0 2 1 0 1 0 0 1 0 2 1 0 1 0 0 1 1 2 0
0 2 0 1 1 0 2 1 0 1 0 0 2 0 2 1 0 1 0 0 2 0 1 1 0 4 0 0 1 2 2 1 0 2 0 0 1 0 1 1 0 1 0 0 1 0 2 2 0 1
0 0 2 0 1 2 0 1 0 0 1 0 2 3 0 1 0 1 1 0 2 0 0 2 0 0 1 1 1 1 0 1 0 0 2 0 1 2 0 5 0 0 1 0 1 3 0 1 0 0
1 0 2 1 0 1 0 0 2 0 1 2 0 1 0 0 1 0 3 1 0 1 1 0 1 0 3 1 0 2 2 0 0 0 2 2 0 1 0 0 2 0 5 2 0 1 0 2 1 0
2 2 0 2 0 0 1 0 0 1 0 2 0 0 1 0 2 1 0 4 0 1 1 1 1 1 0 2 0 0 1 0 1 2 0 2 0 0 0 0 1 2 0 1 1 0 1 0 1 3
0 2 0 1 2 1 2 1 0 5 0 0 1 0 2 1 0 0 0 0 1 0 2 2 0 2 1 0 1 0 4 1 0 2 0 0 1 0 1 2 0 1 0 1 1 1 2 4 0 2
0 0 1 0 1 1 1 1 0 0 2 0 0 1 0 2 0 0 1 0 1 1 0 1 0 0 1 0 1 2 0 4 0 0 1 0 2 1 0 1 0 0 1 0 0 2 0 2 0 0
2 0 1 4 0 1 0 0 1 0 2 2 0 1 2 0 1 0 1 1 0 2 0 0 2 0 1 2 0 5 0 0 2 0 1 1 0 1 0 0 2 0 1 2 0 1 0 0 1 0
2 2 0 2 0 0 1 0 1 1 0 1 0 0 2 0 1 2 0 2 0 0 1 0 2 2 0 0 0 0 1 0 2 1 0 2 0 0 2 0 1 1 0 2 0 0 2 0 1 1
0 1 0 0 0 0 2 1 0 1 0 0 2 0 2 2 0 1 0 0 1 0 3 4 0 0 0 0 1 0 3 1 0 1 0 0 2 0 1 2 0 4 0 0 1 0 1 2 0 1
0 0 2 0 1 2 0 1 0 0 4 0 2 3 0 2 0 1 1 0 1 2 0 2 0 0 1 0 2 1 0 1 0 0 1 0 1 3 0 1 0 0 1 0 2 1 0 1 0 0
1 0 2 2 0 1 1 0 1 0 2 1 0 4 0 0 2 0 1 2 0 1 0 0 1 0 2 1 0 1 0 0 1 0 1 2 0 1 0 0 1 0 2 1 0 1 0 0 1 0
1 1 0 1 0 0 1 0 1 1 0 2 0 0 1 0 2 1 0 1 0 0 1 0 2 2 0 2 0 0 1 0 2 1 0 2 0 0 2 0 1 2 0 2 0 0 1 0 2 2
0 2 0 0 1 0 6 1 1 2 0 0 2 0 2 2 0 0 0 0 1 0 2 1 0 2 0 0 1 0 2 1 0 1 0 0 2 0 2 2 0 1 1 0 1 0 2 1 0 2
0 0 1 0 1 3 2 1 0 0 1 0 1 2 0 1 0 0 3 0 2 2 0 1 0 0 1 0 0 4 0 2 0 0 2 0 2 1 0 1 0 0 1 0 1 2 0 2 0 0
2 0 1 2 0 1 3 0 1 0 1 2 0 2 0 0 1 0 2 2 0 1 0 0 2 0 1 2 0 2 0 0 1 0 4 2 0 2 0 0 2 0 1 2 0 2 0 1 3 2
2 3 0 1 0 0 2 0 1 2 0 1 0 0 1 0 2 1 0 1 0 0 1 0 1 1 0 2 0 0 1 0 1 2 0 1 0 0 1 0 1 2 0 3 0 2 1 0 2 2
0 2 0 0 1 0 1 1 0 0 0 0 4 0 1 1 1 2 0 0 2 0 1 2 0 1 0 0 1 0 1 1 0 4 0 0 2 0 1 2 0 2 0 0 1 0 2 2 0 1
0 0 3 0 1 1 1 1 0 0 2 0 1 2 0 1 0 0 1 0 1 1 0 1 0 0 1 0 1 3 0 2 0 0 1 0 2 1 0 2 0 0 1 0 1 2 0 1 0 0
1 0 2 1 3 2 0 0 2 0 1 2 0 2 0 0 1 0 1 2 0 2 0 0 1 0 2 1 0 3 2 3 1 0 1 2 0 1 0 0 2 0 1 2 0 2 0 0 1 0
1 2 0 2 0 0 0 0 1 1 0 1 0 0 2 1 2 2 1 1 0 0 2 0 1 2 0 1 0 0 1 0 2 2 0 2 0 0 1 0 2 2 0 1 0 0 1 0 1 1
0 3 0 0 5 0 1 4 0 3 0 0 4 1 1 5 0 2 0 0 1 0 1 2 3 2 0 0 2 0 2 1 0 2 0 0 1 0 2 2 0 1 0 0 2 0 2 2 0 1
0 0 1 0 1 1 0 1 0 0 1 0 1 1 0 1 0 0 0 0 1 3 0 2 0 0 2 0 1 1 0 1 0 0 1 0 1 1 0 2 0 0 1 0 2 2 0 1 0 0
1 0 3 1 0 1 0 0 1 0 1 4 1 1 1 0 0 1 1 4 2 2 0 1 4 0 1 2 0 2 0 2 1 0 1 5 0 0 0 0 1 2 1 1 1 2 0 0 1 0
2 1 2 2 0 0 3 0 2 3 0 0 3 0 1 2 1 4 0 1 0 0 1 0 4 2 0 1 0 0 1 0 1 1 1 1 0 0 1 0 1 0 0 1 0 0 1 0 1 2
0 1 0 0 1 0 2 2 0 2 0 0 1 0 2 1 0 1 0 0 2 0 1 3 0 2 0 0 1 0 1 2 0 2 0 0 1 0 2 1 0 2 0 2 2 0 1 1 0 1
0 0 1 0 1 2 0 1 0 0 1 0 1 2 0 2 0 0 1 0 1 2 0 1 0 0 2 0 2 2 1 1 0 3 1 0 1 1 0 1 0 0 1 0 1 2 0 2 0 0
2 0 2 2 0 1 0 0 1 0 2 1 0 1 0 0 1 2 0 0 2 4 0 0 3 0 2 2 0 1 0 0 1 0 2 1 0 1 0 0 2 0 1 3 0 1 0 0 1 0
1 0 0 1 0 0 0 0 1 2 0 1 0 0 1 0 2 1 4 2 0 3 2 0 3 2 0 2 0 0 2 0 1 2 0 2 0 0 1 0 4 1 0 1 0 0 1 0 1 2
0 2 0 0 1 0 1 2 0 2 0 0 1 0 2 1 0 1 0 0 1 0 1 3 0 2 0 0 3 0 1 3 0 1 0 0 2 0 2 2 0 2 0 2 4 0 1 1 0 1
0 0 1 0 1 1 0 1 0 0 1 0 1 1 0 1 0 0 1 0 1 2 0 2 0 0 3 0 2 2 0 1 0 0 2 0 2 3 0 3 0 0 4 0 1 1 0 1 0 0
1 0 2 2 0 1 0 0 1 0 1 1 0 1 0 0 1 0 2 2 0 1 0 0 4 0 0 1 0 2 0 0 1 0 3 2 0 2 0 0 1 0 1 2 0 2 0 0 2 0
2 2 1 0 0 0 1 0 1 2 0 2 0 0 2 3 1 1 0 1 0 0 1 0 1 3 0 1 0 0 1 0 1 1 0 1 0 0 2 0 3 2 0 2 1 0 1 0 2 3
0 2 0 0 1 0 2 2 0 1 0 0 2 0 1 1 3 1 0 0 2 0 1 2 0 2 0 0 0 0 1 2 0 2 0 0 1 0 1 1 0 1 0 0 1 0 1 2 0 2
1 0 1 0 2 2 0 1 0 0 1 0 2 2 0 1 0 0 2 0 1 3 0 1 0 0 1 0 2 2 0 3 1 0 1 0 3 1 0 2 0 0 2 0 4 2 0 1 0 0
2 0 1 4 0 1 0 0 1 0 2 1 0 2 0 0 1 0 1 2 0 2 0 0 3 0 2 2 0 1 0 0 2 0 0 2 0 2 0 0 1 2 3 1 0 1 0 0 2 0
2 2 0 1 1 0 2 0 2 1 0 1 1 0 0 0 1 1 0 1 0 3 1 0 1 2 0 2 0 0 1 0 0 1 0 2 0 0 2 0 2 3 0 0 0 0 1 0 3 1
0 1 0 0 1 0 2 2 0 1 0 0 1 0 1 1 1 0 0 0 2 0 2 1 0 5 0 0 1 0 1 2 0 2 0 0 1 0 2 2 0 1 0 0 1 0 1 3 0 3
2 0 1 0 2 1 0 2 0 0 1 0 2 2 0 2 0 0 1 0 1 2 0 1 0 0 4 0 0 1 0 2 0 2 2 0 3 2 0 2 0 0 1 0 2 1 0 1 0 0
Code:
#define f_pwm 20e3
unsigned int curtime;
unsigned int sens1;
unsigned int cursample;
void setup() {
Serial.begin(9600);
Serial.println("Hi");
xbar_init();
adc_init();
adc_etc_init();
flexpwm2_init();
}
void loop() {
}
void adcetc0_isr() {
curtime = micros();
cursample++;
ADC_ETC_DONE0_1_IRQ |= 1 << 20; // clear
FLEXPWM2_SM0STS |= FLEXPWM_SMSTS_CMPF(2); //Reset flag
sens1 = (ADC_ETC_TRIG0_RESULT_1_0 & 4095);
Serial.print(sens1 );
Serial.print(" ");
if (cursample == 50) {
cursample = 0;
Serial.println("");
}
}
void xbar_init() {
CCM_CCGR2 |= CCM_CCGR2_XBAR1(CCM_CCGR_ON); //turn clock on for xbara1
xbar_connect(XBARA1_IN_FLEXPWM2_PWM1_OUT_TRIG0, XBARA1_OUT_ADC_ETC_TRIG00); //FlexPWM to adc_etc
}
void adc_init() {
//Tried many configurations, but this seems to be best:
ADC1_CFG = ADC_CFG_OVWREN //Allow overwriting of the next converted Data onto the existing
| ADC_CFG_ADICLK(0) // input clock select - IPG clock
| ADC_CFG_MODE(2) // 12-bit conversion 0 8-bit conversion 1 10-bit conversion 2 12-bit conversion
| ADC_CFG_ADIV(2) // Input clock / 4
| ADC_CFG_ADSTS(0) // Sample period (ADC clocks) = 3 if ADLSMP=0b
| ADC_CFG_ADHSC // High speed operation
| ADC_CFG_ADTRG; // Hardware trigger selected
ADC2_CFG = ADC1_CFG;
// IOMUXC_SW_PAD_CTL_PAD_GPIO_AD_B1_02 &= ~ (1 << 12) ; // disable keeper pin 14, as per manual
// IOMUXC_SW_PAD_CTL_PAD_GPIO_AD_B1_03 &= ~ (1 << 12) ; // disable keeper pin 15, as per manual
// IOMUXC_SW_PAD_CTL_PAD_GPIO_AD_B1_07 &= ~ (1 << 12) ; // disable keeper pin 16, as per manual
// IOMUXC_SW_PAD_CTL_PAD_GPIO_AD_B1_06 &= ~ (1 << 12) ; // disable keeper pin 17, as per manual
// IOMUXC_SW_PAD_CTL_PAD_GPIO_AD_B1_01 &= ~ (1 << 12) ; // disable keeper pin 18, as per manual
// IOMUXC_SW_PAD_CTL_PAD_GPIO_AD_B1_00 &= ~ (1 << 12) ; // disable keeper pin 19, as per manual
//Calibration of ADC
// ADC1_GC |= ADC_GC_CAL; // begin cal ADC1
// while (ADC1_GC & ADC_GC_CAL) ;
// ADC2_GC |= ADC_GC_CAL; // begin cal ADC2
// while (ADC2_GC & ADC_GC_CAL) ;
ADC1_HC0 = 16; // ADC_ETC channel
ADC2_HC0 = 16;
}
void adc_etc_init() {
/* Must disable software reset first */
ADC_ETC_CTRL &= ~(1 << 31); // SOFTRST
/* Must clear ADC_ETC_CTRL_TSC_BYPASS bit if using ADC2 */
ADC_ETC_CTRL &= ~(1 << 30); // TSC_BYPASS
/* Enable the external XBAR trigger0 and trigger1. Trigger4 uses sync mode to get triggered */
ADC_ETC_CTRL = 1; // TRIG_ENABLE
/* ADC channel, pin numbers
7, // 14/A0 AD_B1_02
8, // 15/A1 AD_B1_03
12, // 16/A2 AD_B1_07
11, // 17/A3 AD_B1_06
6, // 18/A4 AD_B1_01
5, // 19/A5 AD_B1_00
12, // 16/A2 AD_B1_07 M1 Ia
8, // 15/A1 AD_B1_03 M1 Ib
6, // 18/A4 AD_B1_01 M1 Va
5, // 19/A5 AD_B1_00 M1 Vb
11, // 17/A3 AD_B1_06 Vbus
*/
ADC_ETC_TRIG0_CTRL = ADC_ETC_TRIG_CTRL_TRIG_CHAIN(2); //TRIG chain length (0->1, 1->2, etc)
ADC_ETC_TRIG0_CHAIN_1_0 =
ADC_ETC_TRIG_CHAIN_IE1(0) |
ADC_ETC_TRIG_CHAIN_B2B1 |
ADC_ETC_TRIG_CHAIN_HWTS1(1) |
ADC_ETC_TRIG_CHAIN_CSEL1(6) |
ADC_ETC_TRIG_CHAIN_IE0(0) |
ADC_ETC_TRIG_CHAIN_B2B0 |
ADC_ETC_TRIG_CHAIN_HWTS0(1) |
ADC_ETC_TRIG_CHAIN_CSEL0(12);
ADC_ETC_TRIG0_CHAIN_3_2 =
ADC_ETC_TRIG_CHAIN_IE0(1) |
ADC_ETC_TRIG_CHAIN_B2B0 |
ADC_ETC_TRIG_CHAIN_HWTS0(1) |
ADC_ETC_TRIG_CHAIN_CSEL0(11);
ADC_ETC_TRIG4_CTRL = ADC_ETC_TRIG_CTRL_TRIG_CHAIN(2) | ADC_ETC_TRIG_CTRL_SYNC_MODE; //TRIG chain length (0->1, 1->2, etc), turn on sync mode
ADC_ETC_TRIG4_CHAIN_1_0 =
ADC_ETC_TRIG_CHAIN_IE1(0) |
ADC_ETC_TRIG_CHAIN_B2B1 |
ADC_ETC_TRIG_CHAIN_HWTS1(1) |
ADC_ETC_TRIG_CHAIN_CSEL1(5) |
ADC_ETC_TRIG_CHAIN_IE0(0) |
ADC_ETC_TRIG_CHAIN_B2B0 |
ADC_ETC_TRIG_CHAIN_HWTS0(1) |
ADC_ETC_TRIG_CHAIN_CSEL0(8);
ADC_ETC_TRIG4_CHAIN_3_2 =
ADC_ETC_TRIG_CHAIN_IE0(2) |
ADC_ETC_TRIG_CHAIN_B2B0 |
ADC_ETC_TRIG_CHAIN_HWTS0(1) |
ADC_ETC_TRIG_CHAIN_CSEL0(5);
attachInterruptVector(IRQ_ADC_ETC0, adcetc0_isr);
NVIC_ENABLE_IRQ(IRQ_ADC_ETC0);
}
void flexpwm2_init() { //set PWM
FLEXPWM2_MCTRL |= FLEXPWM_MCTRL_CLDOK( 7 );// Clear Load Okay LDOK(SM) -> no reload of PWM settings
FLEXPWM2_SM0CTRL = FLEXPWM_SMCTRL_FULL | FLEXPWM_SMCTRL_HALF | FLEXPWM_SMCTRL_PRSC(0); //Fixed at no prescaler. Prescaler is only usefull for slow PWM
FLEXPWM2_SM1CTRL = FLEXPWM_SMCTRL_FULL | FLEXPWM_SMCTRL_HALF | FLEXPWM_SMCTRL_PRSC(0); //Fixed at no prescaler. Prescaler is only usefull for slow PWM
FLEXPWM2_SM2CTRL = FLEXPWM_SMCTRL_FULL | FLEXPWM_SMCTRL_HALF | FLEXPWM_SMCTRL_PRSC(0); //Fixed at no prescaler. Prescaler is only usefull for slow PWM
FLEXPWM2_SM0VAL1 = (uint32_t)((float)F_BUS_ACTUAL / f_pwm - 1) / 2; //Set the modulus value (dictates the frequency)
FLEXPWM2_SM1VAL1 = FLEXPWM2_SM0VAL1; //Set the modulus value (dictates the frequency)
FLEXPWM2_SM2VAL1 = FLEXPWM2_SM0VAL1; //Set the modulus value (dictates the frequency)
FLEXPWM2_SM0INIT = -FLEXPWM2_SM0VAL1; //Good for center aligned PWM, see manual
FLEXPWM2_SM1INIT = -FLEXPWM2_SM1VAL1; //Good for center aligned PWM, see manual
FLEXPWM2_SM2INIT = -FLEXPWM2_SM2VAL1; //Good for center aligned PWM, see manual
FLEXPWM2_SM0VAL3 = FLEXPWM2_SM0VAL1 / 2; //50% duty cycle
FLEXPWM2_SM0VAL2 = -FLEXPWM2_SM0VAL3; //50% duty cycle
FLEXPWM2_SM1VAL3 = FLEXPWM2_SM0VAL1 / 2; //50% duty cycle
FLEXPWM2_SM1VAL2 = -FLEXPWM2_SM0VAL3; //50% duty cycle
FLEXPWM2_SM2VAL3 = FLEXPWM2_SM0VAL1 / 2; //50% duty cycle
FLEXPWM2_SM2VAL2 = -FLEXPWM2_SM0VAL3; //50% duty cycle
FLEXPWM2_SM0VAL4 = 0; // adc trigger 1
FLEXPWM2_SM0VAL5 = FLEXPWM2_SM0VAL1; // adc trigger 2
FLEXPWM2_MCTRL |= FLEXPWM_MCTRL_LDOK( 7 );// Load Okay LDOK(SM) -> reload setting again
//This triggers twice per PWM cycle:
FLEXPWM2_SM0TCTRL = FLEXPWM_SMTCTRL_OUT_TRIG_EN(1 << 4) | FLEXPWM_SMTCTRL_OUT_TRIG_EN(1 << 5); // val 4 of Flexpwm sm0 as trigger;
//This triggers once per PWM cycle:
//FLEXPWM2_SM0TCTRL = FLEXPWM_SMTCTRL_OUT_TRIG_EN(1 << 5); // val 4 of Flexpwm sm0 as trigger; )
}
void xbar_connect(unsigned int input, unsigned int output)
{
if (input >= 88) return;
if (output >= 132) return;
volatile uint16_t *xbar = &XBARA1_SEL0 + (output / 2);
uint16_t val = *xbar;
if (!(output & 1)) {
val = (val & 0xFF00) | input;
} else {
val = (val & 0x00FF) | (input << 8);
}
*xbar = val;
}