void adc0_read(void){
- uint8_t c = 0;
-
+ uint8_t c = 0; // counter for spi buffer fill
+
+ // the received data is always one transfer cycle
+ // later than the corresponding commands requesting
+ // for the data
+
+ // set external multiplexers for zero calibration
+ CB_GPIO_Out_Hi(ZEROCALIB);
+ CB_GPIO_Out_Lo(MUXADDR0);
+ CB_GPIO_Out_Lo(MUXADDR1);
spi1_writeWord(CH3VSGND | UNIPOLAR); // VDDDCUR
// ignore received data
spi1_writeWord(CH1VSGND | UNIPOLAR); // ZERODIFF
SPI_DMA_Buffer_In[c++] = ZEROSING;
SPI_DMA_Buffer_In[c++] = spi1_receivedWord();
- spi1_writeWord(CH1VSGND | UNIPOLAR); // dummy
+
+
+ // set external multiplexers to read VDISCREFA/VDISCREF2A
+ CB_GPIO_Out_Lo(ZEROCALIB);
+ CB_GPIO_Out_Hi(MUXADDR0);
+ CB_GPIO_Out_Hi(MUXADDR1);
+
+ spi1_writeWord(CH2VSGND | UNIPOLAR); // VDISCREF2A
SPI_DMA_Buffer_In[c++] = ZERODIFF;
SPI_DMA_Buffer_In[c++] = spi1_receivedWord();
-
+ spi1_writeWord(CH1VSGND | UNIPOLAR); // VDISCREFA
+ SPI_DMA_Buffer_In[c++] = VDISCREF2A;
+ SPI_DMA_Buffer_In[c++] = spi1_receivedWord();
+
+
+ // set external multiplexers to read VDISCREFB/VDISCREF2B
+ CB_GPIO_Out_Lo(ZEROCALIB);
+ CB_GPIO_Out_Lo(MUXADDR0);
+ CB_GPIO_Out_Lo(MUXADDR1);
+
+ spi1_writeWord(CH2VSGND | UNIPOLAR); // VDISCREF2B
+ SPI_DMA_Buffer_In[c++] = VDISCREFA;
+ SPI_DMA_Buffer_In[c++] = spi1_receivedWord();
+ spi1_writeWord(CH1VSGND | UNIPOLAR); // VDISCREFB
+ SPI_DMA_Buffer_In[c++] = VDISCREF2B;
+ SPI_DMA_Buffer_In[c++] = spi1_receivedWord();
+
+
+ // set external multiplexers to read VDISCREFC/VDISCREF2C
+ CB_GPIO_Out_Lo(ZEROCALIB);
+ CB_GPIO_Out_Hi(MUXADDR0);
+ CB_GPIO_Out_Lo(MUXADDR1);
+
+ spi1_writeWord(CH2VSGND | UNIPOLAR); // VDISCREF2C
+ SPI_DMA_Buffer_In[c++] = VDISCREFB;
+ SPI_DMA_Buffer_In[c++] = spi1_receivedWord();
+ spi1_writeWord(CH1VSGND | UNIPOLAR); // VDISCREFC
+ SPI_DMA_Buffer_In[c++] = VDISCREF2C;
+ SPI_DMA_Buffer_In[c++] = spi1_receivedWord();
+
+ // set external multiplexers to read VDISCREFD/VDISCREF2D
+ CB_GPIO_Out_Lo(ZEROCALIB);
+ CB_GPIO_Out_Lo(MUXADDR0);
+ CB_GPIO_Out_Hi(MUXADDR1);
+
+ spi1_writeWord(CH2VSGND | UNIPOLAR); // VDISCREF2D
+ SPI_DMA_Buffer_In[c++] = VDISCREFC;
+ SPI_DMA_Buffer_In[c++] = spi1_receivedWord();
+ spi1_writeWord(CH1VSGND | UNIPOLAR); // VDISCREFD
+ SPI_DMA_Buffer_In[c++] = VDISCREF2D;
+ SPI_DMA_Buffer_In[c++] = spi1_receivedWord();
+
+ spi1_writeWord(CH1VSGND | UNIPOLAR); // dummy command
+ SPI_DMA_Buffer_In[c++] = VDISCREFD;
+ SPI_DMA_Buffer_In[c++] = spi1_receivedWord();
+ debug_out(c);
spi_dma_transfer(c);
-// debug_out(++debug_counter);
}