help me ADC of LPC2148

#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