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.

CCS/TM4C129ENCPDT: Problem with dma configuration for using both ADC

Part Number: TM4C129ENCPDT

Tool/software: Code Composer Studio

Hi

I do not know why while using this code the program gets stuck in the IntDefaultHandler(void) in the start up file, i know that is because an unexpected interruption was called, what I want to know is what is wrong with this code:

void ADCconfigure(uint32_t sysclock)

{
    SysCtlPeripheralEnable(SYSCTL_PERIPH_ADC0);
    SysCtlPeripheralSleepEnable(SYSCTL_PERIPH_ADC0);
    ADCClockConfigSet(ADC0_BASE,ADC_CLOCK_SRC_PIOSC | ADC_CLOCK_RATE_FULL, 1);          //Clock source (Precision Internal Clock)

    ADCSequenceConfigure(ADC0_BASE, 1, ADC_TRIGGER_TIMER, 0);  // SS0-SS3 priorities must always be different
    ADCSequenceStepConfigure(ADC0_BASE, 1, 0, ADC_CTL_CH0);
    ADCSequenceStepConfigure(ADC0_BASE, 1, 1, ADC_CTL_CH1);
    ADCSequenceStepConfigure(ADC0_BASE, 1, 2, ADC_CTL_CH2);
    ADCSequenceStepConfigure(ADC0_BASE, 1, 3, ADC_CTL_CH3 | ADC_CTL_END | ADC_CTL_IE);
    ADCSequenceDMAEnable(ADC0_BASE, 1);

    uDMAChannelAttributeDisable(UDMA_CHANNEL_ADC1,
                                    UDMA_ATTR_ALTSELECT | UDMA_ATTR_USEBURST |
                                    UDMA_ATTR_HIGH_PRIORITY |
                                    UDMA_ATTR_REQMASK);

    uDMAChannelControlSet(UDMA_CHANNEL_ADC1 | UDMA_PRI_SELECT,
                            UDMA_SIZE_16 | UDMA_SRC_INC_NONE | UDMA_DST_INC_16 |
                              UDMA_ARB_1);

    uDMAChannelControlSet(UDMA_CHANNEL_ADC1 | UDMA_ALT_SELECT,
                            UDMA_SIZE_16 | UDMA_SRC_INC_NONE | UDMA_DST_INC_16 |
                              UDMA_ARB_1);
    /**/
    uDMAChannelTransferSet(UDMA_CHANNEL_ADC1 | UDMA_PRI_SELECT,
                               UDMA_MODE_PINGPONG,
                               (void *)(ADC0_BASE + ADC_O_SSFIFO1),
                               g_ui8RxBufA[0], MEM_BUFFER_SIZE);

    uDMAChannelTransferSet(UDMA_CHANNEL_ADC1 | UDMA_ALT_SELECT,
                                UDMA_MODE_PINGPONG,
                                (void *)(ADC0_BASE + ADC_O_SSFIFO1),
                                g_ui8RxBufB[0], MEM_BUFFER_SIZE);

    uDMAChannelEnable(UDMA_CHANNEL_ADC1);
    ADCIntEnableEx(ADC0_BASE, ADC_INT_DMA_SS1);
    IntEnable(INT_ADC0SS1);

    SysCtlPeripheralEnable(SYSCTL_PERIPH_ADC1);
    SysCtlPeripheralSleepEnable(SYSCTL_PERIPH_ADC1);
    ADCClockConfigSet(ADC1_BASE,ADC_CLOCK_SRC_PIOSC | ADC_CLOCK_RATE_FULL, 1);

    ADCSequenceConfigure(ADC1_BASE, 1, ADC_TRIGGER_TIMER, 1);
    ADCSequenceStepConfigure(ADC1_BASE, 1, 0, ADC_CTL_CH16);
    ADCSequenceStepConfigure(ADC1_BASE, 1, 1, ADC_CTL_CH17);
    ADCSequenceStepConfigure(ADC1_BASE, 1, 2, ADC_CTL_CH18);
    ADCSequenceStepConfigure(ADC1_BASE, 1, 3, ADC_CTL_CH19 | ADC_CTL_END | ADC_CTL_IE);   // ADC_CTL_IE fires every 8 samples
    ADCPhaseDelaySet(ADC1_BASE, ADC_PHASE_0);
    ADCSequenceDMAEnable(ADC1_BASE, 1);

    uDMAChannelAttributeDisable(UDMA_CH25_ADC1_1,
                                    UDMA_ATTR_ALTSELECT | UDMA_ATTR_USEBURST |
                                    UDMA_ATTR_HIGH_PRIORITY |
                                    UDMA_ATTR_REQMASK);

    uDMAChannelControlSet(UDMA_CH25_ADC1_1 | UDMA_PRI_SELECT,
                            UDMA_SIZE_16 | UDMA_SRC_INC_NONE | UDMA_DST_INC_16 |
                              UDMA_ARB_8);

    uDMAChannelControlSet(UDMA_CH25_ADC1_1 | UDMA_ALT_SELECT,
                            UDMA_SIZE_16 | UDMA_SRC_INC_NONE | UDMA_DST_INC_16 |
                              UDMA_ARB_8);

    uDMAChannelTransferSet(UDMA_CH25_ADC1_1 | UDMA_PRI_SELECT,
                               UDMA_MODE_PINGPONG,
                               (void *)(ADC1_BASE + ADC_O_SSFIFO1),
                               g_ui8RxBufA[1], MEM_BUFFER_SIZE);

    uDMAChannelTransferSet(UDMA_CH25_ADC1_1 | UDMA_ALT_SELECT,
                                UDMA_MODE_PINGPONG,
                                (void *)(ADC1_BASE + ADC_O_SSFIFO1),
                                g_ui8RxBufB[1], MEM_BUFFER_SIZE);

    uDMAChannelAssign(UDMA_CH25_ADC1_1);
    uDMAChannelEnable(UDMA_CH25_ADC1_1);
    ADCIntEnableEx(ADC1_BASE, ADC_INT_DMA_SS1);
    IntEnable(INT_ADC1SS1);
//--------------------------------------------------------------------
    SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER0);
    TimerConfigure(TIMER0_BASE, TIMER_CFG_A_PERIODIC);
    TimerLoadSet(TIMER0_BASE, TIMER_A, sysclock/(125000)/*(48000*8*2)*/);
    TimerControlTrigger(TIMER0_BASE, TIMER_A, true);
    TimerEnable(TIMER0_BASE, TIMER_A);
    ADCSequenceEnable(ADC0_BASE, 1);
    ADCSequenceEnable(ADC1_BASE, 1);
}

After using the IntEnable(INT_ADC0SS1); the problem appears, I was using before this code, that use Seq 0 and everything works well:

void ADCconfigure(uint32_t sysclock)

{
    SysCtlPeripheralEnable(SYSCTL_PERIPH_ADC0);
    SysCtlPeripheralSleepEnable(SYSCTL_PERIPH_ADC0);
    ADCClockConfigSet(ADC0_BASE,ADC_CLOCK_SRC_PIOSC | ADC_CLOCK_RATE_FULL, 1);          //Clock source (Precision Internal Clock)

    ADCSequenceConfigure(ADC0_BASE, 0, ADC_TRIGGER_TIMER, 0);  // SS0-SS3 priorities must always be different
    ADCSequenceStepConfigure(ADC0_BASE, 0, 0, ADC_CTL_CH0);         // PE3
    ADCSequenceStepConfigure(ADC0_BASE, 0, 1, ADC_CTL_CH1);         // PE2
    ADCSequenceStepConfigure(ADC0_BASE, 0, 2, ADC_CTL_CH2);         // PE1
    ADCSequenceStepConfigure(ADC0_BASE, 0, 3, ADC_CTL_CH3);         // PE0
    ADCSequenceStepConfigure(ADC0_BASE, 0, 4, ADC_CTL_CH0);
    ADCSequenceStepConfigure(ADC0_BASE, 0, 5, ADC_CTL_CH1);
    ADCSequenceStepConfigure(ADC0_BASE, 0, 6, ADC_CTL_CH2);
    ADCSequenceStepConfigure(ADC0_BASE, 0, 7, ADC_CTL_CH3 | ADC_CTL_END | ADC_CTL_IE);
    ADCSequenceDMAEnable(ADC0_BASE, 0);

    uDMAChannelAttributeDisable(UDMA_CHANNEL_ADC0,
                                    UDMA_ATTR_ALTSELECT | UDMA_ATTR_USEBURST |
                                    UDMA_ATTR_HIGH_PRIORITY |
                                    UDMA_ATTR_REQMASK);

    uDMAChannelControlSet(UDMA_CHANNEL_ADC0 | UDMA_PRI_SELECT,
                            UDMA_SIZE_16 | UDMA_SRC_INC_NONE | UDMA_DST_INC_16 |
                              UDMA_ARB_1);

    uDMAChannelControlSet(UDMA_CHANNEL_ADC0 | UDMA_ALT_SELECT,
                            UDMA_SIZE_16 | UDMA_SRC_INC_NONE | UDMA_DST_INC_16 |
                              UDMA_ARB_1);
    /**/
    uDMAChannelTransferSet(UDMA_CHANNEL_ADC0 | UDMA_PRI_SELECT,
                               UDMA_MODE_PINGPONG,
                               (void *)(ADC0_BASE + ADC_O_SSFIFO0),
                               g_ui8RxBufA[0], MEM_BUFFER_SIZE);

    uDMAChannelTransferSet(UDMA_CHANNEL_ADC0 | UDMA_ALT_SELECT,
                                UDMA_MODE_PINGPONG,
                                (void *)(ADC0_BASE + ADC_O_SSFIFO0),
                                g_ui8RxBufB[0], MEM_BUFFER_SIZE);

    uDMAChannelEnable(UDMA_CHANNEL_ADC0);
    ADCIntEnableEx(ADC0_BASE, ADC_INT_DMA_SS0);
    IntEnable(INT_ADC0SS0);

    SysCtlPeripheralEnable(SYSCTL_PERIPH_ADC1);
    SysCtlPeripheralSleepEnable(SYSCTL_PERIPH_ADC1);
    ADCClockConfigSet(ADC1_BASE,ADC_CLOCK_SRC_PIOSC | ADC_CLOCK_RATE_FULL, 1);

    ADCSequenceConfigure(ADC1_BASE, 0, ADC_TRIGGER_TIMER, 1);
    ADCSequenceStepConfigure(ADC1_BASE, 0, 0, ADC_CTL_CH16);        //PK1
    ADCSequenceStepConfigure(ADC1_BASE, 0, 1, ADC_CTL_CH17);        //PK2
    ADCSequenceStepConfigure(ADC1_BASE, 0, 2, ADC_CTL_CH18);        //PK3
    ADCSequenceStepConfigure(ADC1_BASE, 0, 3, ADC_CTL_CH19);        //PK0
    ADCSequenceStepConfigure(ADC1_BASE, 0, 4, ADC_CTL_CH16);
    ADCSequenceStepConfigure(ADC1_BASE, 0, 5, ADC_CTL_CH17);
    ADCSequenceStepConfigure(ADC1_BASE, 0, 6, ADC_CTL_CH18);
    ADCSequenceStepConfigure(ADC1_BASE, 0, 7, ADC_CTL_CH19 | ADC_CTL_END | ADC_CTL_IE);   // ADC_CTL_IE fires every 8 samples
    ADCPhaseDelaySet(ADC1_BASE, ADC_PHASE_0);
    ADCSequenceDMAEnable(ADC1_BASE, 0);

    uDMAChannelAttributeDisable(UDMA_CH24_ADC1_0,
                                    UDMA_ATTR_ALTSELECT | UDMA_ATTR_USEBURST |
                                    UDMA_ATTR_HIGH_PRIORITY |
                                    UDMA_ATTR_REQMASK);

    uDMAChannelControlSet(UDMA_CH24_ADC1_0 | UDMA_PRI_SELECT,
                            UDMA_SIZE_16 | UDMA_SRC_INC_NONE | UDMA_DST_INC_16 |
                              UDMA_ARB_8);

    uDMAChannelControlSet(UDMA_CH24_ADC1_0 | UDMA_ALT_SELECT,
                            UDMA_SIZE_16 | UDMA_SRC_INC_NONE | UDMA_DST_INC_16 |
                              UDMA_ARB_8);

    uDMAChannelTransferSet(UDMA_CH24_ADC1_0 | UDMA_PRI_SELECT,
                               UDMA_MODE_PINGPONG,
                               (void *)(ADC1_BASE + ADC_O_SSFIFO0),
                               g_ui8RxBufA[1], MEM_BUFFER_SIZE);

    uDMAChannelTransferSet(UDMA_CH24_ADC1_0 | UDMA_ALT_SELECT,
                                UDMA_MODE_PINGPONG,
                                (void *)(ADC1_BASE + ADC_O_SSFIFO0),
                                g_ui8RxBufB[1], MEM_BUFFER_SIZE);

    uDMAChannelAssign(UDMA_CH24_ADC1_0);
    uDMAChannelEnable(UDMA_CH24_ADC1_0);
    ADCIntEnableEx(ADC1_BASE, ADC_INT_DMA_SS0);
    IntEnable(INT_ADC1SS0);
//--------------------------------------------------------------------
    SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER0);
    TimerConfigure(TIMER0_BASE, TIMER_CFG_A_PERIODIC);
    TimerLoadSet(TIMER0_BASE, TIMER_A, sysclock/(125000)/*(48000*8*2)*/);
    TimerControlTrigger(TIMER0_BASE, TIMER_A, true);
    TimerEnable(TIMER0_BASE, TIMER_A);

    ADCSequenceEnable(ADC0_BASE, 0);
    ADCSequenceEnable(ADC1_BASE, 0);
}

What could be wrong with my ADC Seq1 DMA configuration????