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

Multi Channel ADC not working

I am trying to implement the multi channel ADC in LPC1768 by interfacing it with the 3axis accelerometer.Basically am fetching the data from the sensor and sending it to a android application using a serial bluetooth module.
It works perfectly fine whenever I use only a single channel of ADC but doesn't work in the case of mutli channel ADC.I am not able to figure out what's the problem

Here is the code :-

#include<lpc17xx.h>
#include "stdutils.h"
#include "cmsis_os.h"

#define SBIT_BURST      16u
#define SBIT_START      24u
#define SBIT_PDN        21u
#define SBIT_EDGE       27u
#define SBIT_DONE       0u
#define SBIT_RESULT     4u
#define SBIT_CLCKDIV    8u
#define SBIT_ADGINTEN    8u

#define SBIT_WordLenght    0x00u
#define SBIT_DLAB          0x07u
#define SBIT_FIFO          0x00u
#define SBIT_RxFIFO        0x01u
#define SBIT_TxFIFO        0x02u

#define SBIT_RDR           0x00u
#define SBIT_THRE          0x05u

uint16_t v_adcResult1,v_adcResult2,v_adcResult3;
char analogvalarray1[5],analogvalarray2[5],analogvalarray3[5];

void dec_to_str (char* str, uint32_t val, int digits)
{
  int i=1u;

  for(i=1; i<=digits; i++)
  {
    str[digits-i] = (char)((val % 10u) + '0');
    val/=10u;
  }
}

void uart_init(uint32_t baudrate)
{
    uint32_t var_UartPclk_u32,var_Pclk_u32,var_RegValue_u32;

    LPC_PINCON->PINSEL0 &= ~0x000000F0;
    LPC_PINCON->PINSEL0 |= 0x00000050;

    LPC_UART0->FCR = (1<<SBIT_FIFO) | (1<<SBIT_RxFIFO) | (1<<SBIT_TxFIFO);
    LPC_UART0->LCR = (0x03<<SBIT_WordLenght) | (1<<SBIT_DLAB);

    var_UartPclk_u32 = (LPC_SC->PCLKSEL0 >> 6) & 0x03;

    switch( var_UartPclk_u32 )
    {
    case 0x00:
        var_Pclk_u32 = SystemCoreClock/4;
        break;
    case 0x01:
        var_Pclk_u32 = SystemCoreClock;
        break;
    case 0x02:
        var_Pclk_u32 = SystemCoreClock/2;
        break;
    case 0x03:
        var_Pclk_u32 = SystemCoreClock/8;
        break;
    }


    var_RegValue_u32 = ( var_Pclk_u32 / (16 * baudrate ));
    LPC_UART0->DLL =  var_RegValue_u32 & 0xFF;
    LPC_UART0->DLM = (var_RegValue_u32 >> 0x08) & 0xFF;

    util_BitClear(LPC_UART0->LCR,(SBIT_DLAB));
}



void uart_TxChar(char data)
{
    while(util_IsBitCleared(LPC_UART0->LSR,SBIT_THRE));
    LPC_UART0->THR=data;
}


int main(void)
{
SystemInit();
uart_init(9600);


LPC_SC->PCONP |= (1 << 12);
LPC_PINCON->PINSEL1 = 0X000A8000;
LPC_ADC->ADINTEN|= (0<<SBIT_ADGINTEN);
LPC_ADC->ADCR |= ((10<<SBIT_CLCKDIV)|(0x0<<SBIT_START)|(1<<SBIT_BURST)|(0X7<<0)|((1<<SBIT_PDN)));

while(1)
{

osDelay(200);

if(((LPC_ADC->ADSTAT>>0)&0X1)==1)
{
v_adcResult1 = (LPC_ADC->ADDR0 >> SBIT_RESULT) & 0xfff;
dec_to_str(analogvalarray1,v_adcResult1,4);
}
if(((LPC_ADC->ADSTAT>>1)&0X1)==1)
{
v_adcResult2 = (LPC_ADC->ADDR1 >> SBIT_RESULT) & 0xfff;
dec_to_str(analogvalarray2,v_adcResult2,4);
}
if(((LPC_ADC->ADSTAT>>2)&0X1)==1)
{
v_adcResult3 = (LPC_ADC->ADDR2 >> SBIT_RESULT) & 0xfff;
dec_to_str(analogvalarray3,v_adcResult3,4);
}

uart_TxChar(analogvalarray1[0]);
uart_TxChar(analogvalarray1[1]);
uart_TxChar(analogvalarray1[2]);
uart_TxChar(analogvalarray1[3]);
uart_TxChar(' ');
uart_TxChar(analogvalarray2[0]);
uart_TxChar(analogvalarray2[1]);
uart_TxChar(analogvalarray2[2]);
uart_TxChar(analogvalarray2[3]);
uart_TxChar(' ');
uart_TxChar(analogvalarray3[0]);
uart_TxChar(analogvalarray3[1]);
uart_TxChar(analogvalarray3[2]);
uart_TxChar(analogvalarray3[3]);
osDelay(2000);
}
}