Root/Examples/Beta1/src/ADCw.cpp

1#include "ADCw.h"
2
3ADCw::ADCw()
4{
5    BUFFER_OFFSET = 8; //Ignore first 16 samples
6    ADC_SPI_CLKDIV=ADC_SPI_CLKDIV_MAX; //Set clock to minimum speed
7    BUFFER_LEN=16;
8    MUX_CHANNELS =0;
9
10    ADCBuffer = jz_adc_init();
11
12    //Clean FPGA RAM memory
13    for (int i = 0; i < 512; i++) //RAMB16_s9_s9 has 2048 bytes 8-bit
14    {
15        ADCBuffer[i] = 0x00000000; //Clean 4 register by cicle
16    }
17
18    adcConfig(ADC_CMD_SET_SPI_CLKDIV);
19    adcConfig(ADC_CMD_SET_FAST_CONV);
20    printf("\nADC in Fast Convertion Mode (10us) and Fs=9.8KHz (Min)\n");
21}
22
23void ADCw::testADC()
24{
25    /******************************* TEST 1 ***********************************/
26    printf("\nINIT TEST1: Autoselft {(Vref+) - (Vref-)}/2 -> Return 0x0200 \n");
27    adcConfig(ADC_CMD_SET_AUTOSELFT_1);
28    adcConfig(ADC_CMD_READ_AUTOSELFT_1);
29    for(int i=BUFFER_OFFSET; i< BUFFER_LEN/2+BUFFER_OFFSET; i++)
30        printf("[%08X]", ADCBuffer[i]);
31    fflush (stdout);
32
33    /******************************* TEST 2 ***********************************/
34    printf("\n\nINIT TEST2: Autoselft (Vref-) -> Return 0x0000 \n");
35    adcConfig(ADC_CMD_SET_AUTOSELFT_2);
36    adcConfig(ADC_CMD_READ_AUTOSELFT_2);
37    for(int i=BUFFER_OFFSET; i< BUFFER_LEN/2+BUFFER_OFFSET; i++)
38        printf("[%08X]", ADCBuffer[i]);
39    fflush (stdout);
40
41    /******************************* TEST 3 ***********************************/
42    printf("\n\nINIT TEST3: Autoselft (Vref+) -> Return 0x03FF \n");
43    adcConfig(ADC_CMD_SET_AUTOSELFT_3);
44    adcConfig(ADC_CMD_READ_AUTOSELFT_3);
45    for(int i=BUFFER_OFFSET; i< BUFFER_LEN/2+BUFFER_OFFSET; i++)
46        printf("[%08X]", ADCBuffer[i]);
47    fflush (stdout);
48
49    printf("\n\nTESTS complete\n");
50}
51
52void ADCw::powerDownADC()
53{
54    adcConfig(ADC_CMD_SET_POWER_DOWN);
55    printf("\nADC in Power Down Mode \n");
56}
57
58JZ_REG* ADCw::takeSamplesADC(int CHANNEL)
59{
60    adcConfig(ADC_CMD_SET_CHANNEL0+CHANNEL);
61    adcConfig(ADC_CMD_READ_CHANNEL0+CHANNEL);
62    return (JZ_REG*)(ADCBuffer+BUFFER_OFFSET);
63}
64
65void ADCw::adcConfig(uchar CMD)
66{
67    ADCBuffer[0] = (((MUX_CHANNELS<<6) + CMD)<<24) + \
68                    ((BUFFER_LEN+BUFFER_OFFSET*2) << 8) + \
69                    (ADC_SPI_CLKDIV);
70    while(adcCheckBufferFull()) usleep (10);
71}
72
73int ADCw::adcCheckBufferFull()
74{
75    return ADCBuffer[0]&0x20000000;
76}
77

Archive Download this file

Branches:
master



interactive