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); } }