Continue to Site

Welcome to EDAboard.com

Welcome to our site! EDAboard.com is an international Electronics Discussion Forum focused on EDA software, circuits, schematics, books, theory, papers, asic, pld, 8051, DSP, Network, RF, Analog Design, PCB, Service Manuals... and a whole lot more! To participate you need to register. Registration is free. Click here to register now.

HELP ADC in ARM7 lpc2148

Status
Not open for further replies.

hbaocr

Full Member level 4
Joined
May 13, 2007
Messages
232
Helped
25
Reputation
48
Reaction score
4
Trophy points
1,298
Location
Hochiminh City university of technology (VietNam)
Activity points
2,765
lpc2148 adc example

Code:
#include "LPC214x.H"    // LPC2148 MPU Register
#include <stdio.h>                                 // For Used Function printf

/* pototype  section */
void init_serial0 (void);                            // Initil UART-0
int putchar (int ch);                                // Put Char to UART-0
int getchar (void);                                // Get Char From Uart-0
void delay(unsigned long int);                        // Delay Time Function

unsigned int val;                                    // ADC Result (HEX)
float volt;                                       // ADC Result Volt
int main(void)
{ 
  init_serial0();                                    // Initial UART0 = 9600,N,8,1
  printf("Input Voltage 0-3.3V to P0.6 For Test\n");       // Call prinff Function
  // xxxx xxxx xxxx xxxx xx11 xxxx xxxx xxxx
  PINSEL0 |= 0x00003000;// chon ADC1.0 Connect P0.6(pin30)
  // Initial ADC8 (ADCR=0x01210601)   
  AD1CR &= 0x00000000;// reset all cotrol bit
  AD1CR |= 0x00000001;// chon ADC1.0
  AD1CR |= 0x00000600;// ADC Clock = VBP(PCLK) / 7
  AD1CR |= 0x00010000;// Busrt = 1 cho phep lap lai convert A->D voi CLK adc da chon o tren
  AD1CR &= 0xFFF1FFFF;// CLKS = 000 = 10Bit : 11 Cycle Clock Conversion
  AD1CR |= 0x00200000;// PDN = 1 cho phep ADC Module tich cuc
  AD1CR &= 0xF7FFFFFF;// EDGE = 0 = Conversion on Falling Edge 
  // Start Test Read ADC8 and Display on UART0 //
  while(1)                                       // Loop Continue 
  {
   AD1CR  |= 0x01000000; //now start conversation
   while((AD1DR0 & 0x80000000) == 0); // wait ADC convert complete
   val = ((AD1DR0 >> 6) & 0x03FF);
  printf("gia tri tra ve: %o",val);
  }
}

/******************************/
/* Initial UART0 = 9600,N,8,1 */
/* VPB(pclk) = 60.00 MHz      */
/******************************/
void init_serial0 (void) 
{
  PINSEL0 &= 0xFFFFFFF0;                           // Reset P0.0,P0.1 Pin Config
  PINSEL0 |= 0x00000001;                           // Select P0.0 = TxD(UART0)
  PINSEL0 |= 0x00000004;                           // Select P0.1 = RxD(UART0)

  U0LCR &= 0xFC;                                 // Reset Word Select(1:0)
  U0LCR |= 0x03;                                 // Data Bit = 8 Bit
  U0LCR &= 0xFB;                                 // Stop Bit = 1 Bit
  U0LCR &= 0xF7;                                 // Parity = Disable
  U0LCR &= 0xBF;                                 // Disable Break Control
  U0LCR |= 0x80;                                 // Enable Programming of Divisor Latches

  // U0DLM:U0DLL = 60.00 MHz / [16 x Baud]
  //             = 60.00 MHz / [16 x 9600]
  //             = 390.6 = 391 = 0187H
  U0DLM = 0x01;                                    // Program Divisor Latch(391) for 9600 Baud
  U0DLL = 0x87;

  U0LCR &= 0x7F;                                 // Disable Programming of Divisor Latches

  U0FCR |= 0x01;                                 // FIF0 Enable
  U0FCR |= 0x02;                                 // RX FIFO Reset
  U0FCR |= 0x04;                                 // TX FIFO Reset
  U0FCR &= 0x3F;                     
}

/****************************/
/* Write Character To UART0 */
/****************************/
int putchar (int ch) 
{                 
  if (ch == '\n') 
  {
    while (!(U0LSR & 0x20));                          // Wait TXD Buffer Empty
    U0THR = 0x0D;                                         // Write CR
  }
  while (!(U0LSR & 0x20));                           // Wait TXD Buffer Empty
  return (U0THR = ch);                              // Write Character
}

/*****************************/
/* Read Character From UART0 */
/*****************************/
int getchar (void) 
{                   
  while (!(U0LSR & 0x01));                           // Wait RXD Receive Data Ready
  return (U0RBR);                                 // Get Receice Data & Return
}

/***********************/
/* Delay Time Function */
/*    1-4294967296     */
/***********************/
void delay(unsigned long int count1)
{
  while(count1 > 0) {count1--;}                        // Loop Decrease Counter   
}
on my code propram loop forever at row which is bold below? Why my program do that when AD1GDR still display the result voltage on P0.6 and DONE bit on this register =1.
while((AD1DR0 & 0x80000000) == 0); // wait ADC convert complete
 

lpc2148 adc

Try turning off BURST mode, you're starting conversions as soon as you set this bit.
 

Status
Not open for further replies.

Similar threads

Part and Inventory Search

Welcome to EDABoard.com

Sponsor

Back
Top