This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

TM4C123GH6PM: Tiva C triggering adc by pwm

Part Number: TM4C123GH6PM

Hello. I have custom board with TM4C123GH6PM MCU and drv835 for driving bldc motor. I need to measure current while low side mosfet is opend. I set up pwm in up-down counting mode. I think, PWM should generate trigger event for ADC then counter is equal to zero. There are my code of initialization:

void PWM_Init(){
    SysCtlPeripheralEnable(SYSCTL_PERIPH_PWM0);
    while(!SysCtlPeripheralReady(SYSCTL_PERIPH_PWM0));
    PWMGenConfigure(PWM0_BASE, PWM_GEN_0, PWM_GEN_MODE_UP_DOWN | PWM_GEN_MODE_NO_SYNC);
    PWMGenPeriodSet(PWM0_BASE, PWM_GEN_0, PWM_PERIOD);

    PWMGenConfigure(PWM0_BASE, PWM_GEN_2, PWM_GEN_MODE_UP_DOWN | PWM_GEN_MODE_NO_SYNC);
    PWMGenPeriodSet(PWM0_BASE, PWM_GEN_2, PWM_PERIOD);

    PWMGenConfigure(PWM0_BASE, PWM_GEN_3, PWM_GEN_MODE_UP_DOWN | PWM_GEN_MODE_NO_SYNC);
    PWMGenPeriodSet(PWM0_BASE, PWM_GEN_3, PWM_PERIOD);


    PWMGenIntTrigEnable(PWM0_BASE, PWM_GEN_0, PWM_INT_CNT_ZERO);

    PWMGenEnable(PWM0_BASE, PWM_GEN_0);
    PWMGenEnable(PWM0_BASE, PWM_GEN_2);
    PWMGenEnable(PWM0_BASE, PWM_GEN_3);


    PWMSyncTimeBase(PWM0_BASE, PWM_GEN_0_BIT | PWM_GEN_2_BIT | PWM_GEN_3_BIT);
    PWMOutputState(PWM0_BASE, (PWM_OUT_0_BIT | PWM_OUT_4_BIT | PWM_OUT_6_BIT), true);

}

void ADC_Init(){
    SysCtlPeripheralEnable(SYSCTL_PERIPH_ADC0);
    //
    // Wait for the ADC0 module to be ready.
    //
    while(!SysCtlPeripheralReady(SYSCTL_PERIPH_ADC0));
    //
    // Enable the first sample sequencer to capture the value of channel 0 when
    // the processor trigger occurs.
    //
    ADCSequenceConfigure(ADC0_BASE, 1, ADC_TRIGGER_PWM0, 0);
    ADCSequenceStepConfigure(ADC0_BASE, 1, 0, ADC_CTL_CH0);
    ADCSequenceStepConfigure(ADC0_BASE, 1, 1, ADC_CTL_CH1);
    ADCSequenceStepConfigure(ADC0_BASE, 1, 2, ADC_CTL_CH2 |
                             ADC_CTL_IE | ADC_CTL_END);

    ADCIntRegister(ADC0_BASE, 1, handler_ADC);

    ADCIntEnable(ADC0_BASE, 1);

    ADCSequenceEnable(ADC0_BASE, 1);

}
void handler_ADC(void)
{
    unsigned int state = ADCIntStatus(ADC0_BASE, 0, true);
    ADCIntClear(ADC0_BASE, 0);
    //TODO
}

So, PWM work as expected. But ADC doesn't. I wanna get interrupts, then ADC finished measuring, and load results from ADCs FIFO. I have no idea, how to fix it. And I have no found examples for this issue.