code VD cho ADC va xuat ra UẢT port
Code:
// Used GPIO3.28 = AIN7 (ADC7:AD1.0) Measure Voltage // Display Result on UART0(9600,N,8,1) #include <LPC22xx.H> // LPC2214 MPU Register #include <stdio.h> // For Used Function printf void init_serial0 (void); // Used Initial UART0 From "Serial0.c" unsigned int val; // ADC Result (HEX) float volt; // ADC Result Volt int main(void) { init_serial0(); // Initial UART0 = 9600,N,8,1 printf("\nET-JR ARM7 LPC2214 --> TEST ADC-7(P3.28)\n"); // Call prinff Function //Initial ADC7 (GPIO-3.28) By Set PINSEL2[5:4=11] PINSEL2 |= 0x00000030; // Select ADC7 Pin Connect P3.28 // Initial ADC7 (ADCR=0x01210080) ADCR &= 0x00000000; // Clear All Bit Control ADCR |= 0x00000080; // Select ADC = AIN7 ADCR |= 0x00000600; // ADC Clock = VBP(PCLK) / 7 ADCR |= 0x00010000; // Busrt = 1 = Conversion Continue ADCR &= 0xFFF1FFFF; // CLKS = 000 = 10Bit : 11 Cycle Clock Conversion ADCR |= 0x00200000; // PDN = 1 = Active ADC Module ADCR &= 0xFF3FFFFF; // TEST[1:0] = 00 = Normal Mode ADCR &= 0xF7FFFFFF; // EDGE = 0 = Conversion on Falling Edge ADCR |= 0x01000000; // START = 001 = Start Conversion Now // Start Test Read ADC8 and Display on UART0 // while(1) // Loop Continue { do // Loop Read ADC7 { val = ADDR; // Read ADC Data Register } while ((val & 0x80000000) == 0); // Wait ADC Conversion Complete val = (val >> 6) & 0x03FF; // Shift ADC Result to Integer volt = val * 3.3 / 1023.0; // Volt = ADC Result x [3.3V / 1024] printf("\rADC7 Result = %1.3f Volt.",volt); // Display 3-Digit Result(0-3.3V) } } /****************************************************/ #include <LPC22xx.H> // LPC2214 definitions #define CR 0x0D /******************************/ /* Initial UART0 = 9600,N,8,1 */ /* VPB(pclk) = 29.4912 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 = 29.4912MHz / [16 x Baud] // = 29.4912MHz / [16 x 9600] // = 192 = 0x00C0 U0DLM = 0x00; // Program Divisor Latch(192) for 9600 Baud U0DLL = 0xC0; 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 = CR; // 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 }
Comment