From fdcc8f9d2b3c8084632ff67ac1ef36575a1b8558 Mon Sep 17 00:00:00 2001 From: Michael Wiebusch Date: Wed, 8 Jan 2014 18:48:33 +0100 Subject: [PATCH] adc readout works, but somehow i don't get vdiscref readings and the digital current is just sometimes there --- firmware/src/CB_functions.c | 69 ++++++++++++++++++++++++++++++++++--- firmware/src/CB_functions.h | 3 +- firmware/src/main.c | 4 +++ firmware/src/spi1.c | 4 +-- firmware/src/spi2.c | 1 - 5 files changed, 72 insertions(+), 9 deletions(-) diff --git a/firmware/src/CB_functions.c b/firmware/src/CB_functions.c index 0c4b9e7..f51ed39 100644 --- a/firmware/src/CB_functions.c +++ b/firmware/src/CB_functions.c @@ -68,8 +68,16 @@ void report_all_registers(void) { 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 @@ -94,13 +102,64 @@ void adc0_read(void){ 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); } diff --git a/firmware/src/CB_functions.h b/firmware/src/CB_functions.h index 496f49f..a31fa16 100644 --- a/firmware/src/CB_functions.h +++ b/firmware/src/CB_functions.h @@ -18,4 +18,5 @@ void report_register(uint8_t addr); void report_all_registers(void); void uart_byte_to_fpga(uint8_t byte); -void debug_out(uint16_t debu); \ No newline at end of file +void debug_out(uint16_t debu); +void adc0_read(void); \ No newline at end of file diff --git a/firmware/src/main.c b/firmware/src/main.c index 20539dd..a5dcecd 100644 --- a/firmware/src/main.c +++ b/firmware/src/main.c @@ -81,6 +81,10 @@ int main(int argc, char *argv[]) { if(BufferOut(&UcRegAddr)){ decode_register(UcRegAddr); + }else{ + if(uC_regs[0x0b] & 1){ + adc0_read(); + } } } diff --git a/firmware/src/spi1.c b/firmware/src/spi1.c index 8453bc3..2c7cd43 100644 --- a/firmware/src/spi1.c +++ b/firmware/src/spi1.c @@ -188,7 +188,7 @@ inline void adc_conv0_pulse(void){ -void read_adc0_block0(void){ +void read_adc0_block0(void){// do not use, remove soon // power supply voltages/currents, temperature + zero calib @@ -207,7 +207,7 @@ void read_adc0_block0(void){ } -void read_adc0_block1(void){ +void read_adc0_block1(void){ // do not use, remove soon // VDiscRef differential + VDiscRef2 single ended diff --git a/firmware/src/spi2.c b/firmware/src/spi2.c index e69c7fd..3862c2c 100644 --- a/firmware/src/spi2.c +++ b/firmware/src/spi2.c @@ -113,7 +113,6 @@ void init_SPI2(void) { void spi_dma_transfer(uint8_t count) { - debug_out(++debug_counter | spi_dma_busyFlag<<8); while(spi_dma_busyFlag){}; -- 2.43.0