Fast AnalogIn module which asks for a single non blocking reading and causes and interrupt when done.

Revision:
0:058d32b78e5d
Child:
1:2666729acca1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/NbAnalogIn.cpp	Mon Mar 27 11:35:25 2017 +0000
@@ -0,0 +1,51 @@
+#include "NbAnalogIn.h"
+
+NbAnalogIn::NbAnalogIn(){
+    
+    NVIC_EnableIRQ(ADC_IRQn);
+    
+    LPC_SC->PCONP |= (1 << 12); // turn power for ADC on
+    
+    // set peripheral clock registers to provide clock for ADC (bits 24 & 25)
+    // set to 00 for PCLK = CCLK
+    LPC_SC->PCLKSEL0 &= ~(0x3 << 24); // clear bits
+    LPC_SC->PCLKSEL0 |= (0x1 << 24);  // set bits
+    
+    //set P1.30 as AD0.4
+    LPC_PINCON->PINSEL3 |= (3<<28);
+    
+
+    //Set PINMODE of AD0.4 as no pull-up/down resistors
+    LPC_PINCON->PINMODE3 &= ~(3<<28);
+    LPC_PINCON->PINMODE3 |=  (2<<28);
+    
+    
+    /* set the A/D control register */
+    
+    // select 4, clkdiv = 7, enable, don't start yet
+    LPC_ADC->ADCR  = (1 << 4) | (7 << 8) | (1 << 21) | (0 << 24) ;
+    
+    printf("constructed \n");
+    
+}
+
+
+unsigned int NbAnalogIn::read() {
+    
+    /* disable interrupts */
+    LPC_ADC->ADINTEN &= ~(1 << 4);
+    LPC_ADC->ADINTEN = 0;
+    
+    LPC_ADC->ADCR  |= (1 << 24) ; // start conversion
+    
+    while((LPC_ADC->ADSTAT & (1<<4)) == 0);
+    
+    return (unsigned int)((LPC_ADC->ADGDR >> 4) & 0xFFF);
+}
+
+void NbAnalogIn::readNb(){
+    /* enable interrupts */
+    LPC_ADC->ADINTEN = (1 << 4);
+    
+    LPC_ADC->ADCR  |= (1 << 24) ; // start conversion
+}
\ No newline at end of file