This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

Problem using multiple ADC Channels in LPC2378

I am facing problem using ADC channel 0 & 1 simultaneously.

//////////////////////////////////////////////////
//My ADC Initilisation:
/* Power enable, Setup pin, enable and setup AD converter interrupt */

PCONP |= (1 << 12); // Enable power to AD block
PINSEL1 = 0x00014000; /* AD0.1 pin function select */
AD0INTEN= 0x0003; /* CH0 & CH1 enable interrupt */
AD0CR = 0x00200303; /* Power up, PCLK/4, sel AD0.0*/
VICVectAddr18 = (unsigned long)ADC_IRQHandler;
/* Set Interrupt Vector */
VICVectCntl18 = 14; /* use it for ADC Interrupt */
VICIntEnable = (1 << 18);//Enable ADC Interrupt

//////////////////////////////////////////////////
// my handler

__irq void ADC_IRQHandler(void)
{ AD_last = (AD0DR1 >> 6) & 0x3FF; //Read Conversion

avg_val = avg_val + AD_last;

++avgcnt;

if(avgcnt == 15) //take average

{ avgcnt = 0;

calc_val = avg_val/15;

avg_val = 0;

} VOLT_last = (AD0DR0 >> 6) & 0x3FF; //Read Conversion

VICVectAddr = 0; /* Acknowledge Interrupt
}

//////////////////////////////////////////////////

AD0CR |= 0x01000000; /* Start A/D Conversion

This i have done in ISR.

AD0.1 is fine, but AD0.0 stops ????
please ! can anyone help me ??????

  • do you think you code is readable? if not, reply using the proper tags!

  • /* My ADC Initilisation: */

    PCONP |= (1 << 12); // Enable power to AD block
    PINSEL1 = 0x00014000; //AD0.1 pin function select
    AD0INTEN= 0x0003; //CH0 & CH1 enable interrupt
    AD0CR = 0x00200303; //Power up,PCLK/4,sel AD0.0
    VICVectAddr18 = (unsigned long)ADC_IRQHandler;
    VICVectCntl18 = 14;
    VICIntEnable = (1 << 18);//Enable ADC Interrupt

    /* my interrupt handler */

    __irq void ADC_IRQHandler(void)
    {

    AD_last = (AD0DR1 >> 6) & 0x3FF; //Read Conversion

    VOLT_last = (AD0DR0 >> 6) & 0x3FF; //Read Conversion

    VICVectAddr = 0; //Acknowledge Interrupt

    }

    AD0CR |= 0x01000000; // Start A/D Conversion
    This i have done in ISR.

    sorry for that, but spaces are not included when i posted my code.

  • sorry!

    /* My ADC Initilisation: */
    
    PCONP |= (1 << 12);       // Enable power to AD block
    PINSEL1 = 0x00014000;     //AD0.1 pin function select
    AD0INTEN= 0x0003;         //CH0 & CH1 enable interrupt
    AD0CR = 0x00200303;       //Power up,PCLK/4,sel AD0.0
    VICVectAddr18 = (unsigned long)ADC_IRQHandler;
    VICVectCntl18 = 14;
    VICIntEnable = (1 << 18);//Enable ADC Interrupt
    
    /* my interrupt handler */
    
    __irq void ADC_IRQHandler(void)
    {
        AD_last = (AD0DR1 >> 6) & 0x3FF;   //Read Conversion
        VOLT_last = (AD0DR0 >> 6) & 0x3FF; //Read Conversion
        VICVectAddr = 0;                   //Acknowledge Interrupt
    }
    
    AD0CR |= 0x01000000;                   // Start A/D Conversion
    This i have done in ISR.