/home/daqweb/fgddaq/c8051/Devices/adc_internal.c File Reference

#include "../mscbemb.h"
#include "adc_internal.h"

Functions

void adc_internal_init (void)
unsigned int adc_read (unsigned char channel, unsigned char gain)

Function Documentation

void adc_internal_init ( void   ) 

00017 {
00018 #ifdef CPU_C8051F120
00019   SFRPAGE = ADC0_PAGE;
00020   ADC0CN = 0xC0;   // ADC0 Enabled
00021                    // Tracking on request (ADBUSY)
00022                    // left-justified
00023   ADC0CF  = 0x80;  // ADC conversion 16 clocks
00024   ADC0CF |= 0x00;  // PGA gain = 1
00025 
00026   REF0CN = 0x07;   // Temperature, VREF0 Bias & Buffer enable
00027 #endif
00028 #ifdef CPU_C8051F310
00029   ADC0CN = 0xC0;   // ADC0 Enabled
00030                    // Tracking on request (ADBUSY)
00031                    // left-justified
00032   ADC0CF  = 0x80;  // ADC conversion 16 clocks
00033   REF0CN = 0x0E;   // External Vcc , Temperature, VREF0 Bias
00034 #endif
00035 }

unsigned int adc_read ( unsigned char  channel,
unsigned char  gain 
)

00039 {
00040 #ifdef CPU_C8051F120
00041   /* set MUX */
00042   SFRPAGE = ADC0_PAGE;
00043   AMX0SL = (channel & 0x0F);
00044   ADC0CF = ((ADC0CF&0xF8)|gain);
00045   AMX0CF = 0x00;   // Input 0.. 7 + Temperature in single ended mode
00046 #endif
00047 #ifdef CPU_C8051F310
00048   /* set MUX */
00049   AMX0P = (channel & 0x1F);
00050   AMX0N = 0xFF;   // Input 0.. 15 + Temperature in single ended mode
00051 #endif
00052 
00053   DISABLE_INTERRUPTS;
00054 
00055   AD0INT = 0;
00056   AD0BUSY = 1;
00057 
00058   AD0INT = 0;
00059   AD0BUSY = 1;
00060 
00061   while(AD0BUSY == 1);
00062 
00063   ENABLE_INTERRUPTS;
00064 
00065   return (((ADC0H & 0x03) << 8) + ADC0L);
00066 }


Generated on 10 Jun 2013 for FGDC8051 by  doxygen 1.4.7