From: Michael Wiebusch Date: Mon, 27 Jul 2015 08:54:46 +0000 (+0200) Subject: can now read out ADC values of VREF, power/voltage readings and overcurrent status... X-Git-Url: https://jspc29.x-matter.uni-frankfurt.de/git/?a=commitdiff_plain;h=90516ba7f9ac48155736e0634290268fc814f15e;p=mvd_firmware.git can now read out ADC values of VREF, power/voltage readings and overcurrent status bits separately ... (reading VREF lines causes unwanted interference patterns on the MIMOSA26) --- diff --git a/firmware/src/CB_functions.c b/firmware/src/CB_functions.c index b3b7c1d..aca56e1 100644 --- a/firmware/src/CB_functions.c +++ b/firmware/src/CB_functions.c @@ -70,6 +70,12 @@ void report_all_registers(void) { uint16_t readAdc0(uint16_t cmd) { + + // sends "cmd" to ADC, but first answer + // and also the return value of the function + // relate to the last time this function was + // called + static uint32_t accu = 0; spi1_writeWord(cmd); accu += spi1_receivedWord(); @@ -85,6 +91,12 @@ uint16_t readAdc0(uint16_t cmd) { } uint16_t readAdc1(uint16_t cmd) { + + // sends "cmd" to ADC, but first answer + // and also the return value of the function + // relate to the last time this function was + // called + static uint32_t accu = 0; spi3_writeWord(cmd); accu += spi3_receivedWord(); @@ -100,7 +112,9 @@ uint16_t readAdc1(uint16_t cmd) { } -void adc0_read(void){ + + +void adc0_read_pwr(void){ uint8_t c = 0; // counter for spi buffer fill @@ -108,12 +122,7 @@ void adc0_read(void){ // 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); - - readAdc0(CH3VSGND | UNIPOLAR); // ignore received data // VDDDCUR + readAdc0(CH3VSGND | UNIPOLAR); // ignore received data // VDDDCUR SPI_DMA_Buffer_In[c++] = VDDDCUR; SPI_DMA_Buffer_In[c++] = readAdc0(CH4VSGND | UNIPOLAR); // VDDACUR SPI_DMA_Buffer_In[c++] = VDDACUR; @@ -125,7 +134,27 @@ void adc0_read(void){ SPI_DMA_Buffer_In[c++] = GNDSENSE; SPI_DMA_Buffer_In[c++] = readAdc0(CH0VSCH7 | UNIPOLAR); // TEMP vs GNDSENSE SPI_DMA_Buffer_In[c++] = TEMP; - SPI_DMA_Buffer_In[c++] = readAdc0(CH2VSGND | UNIPOLAR); // ZEROSING + SPI_DMA_Buffer_In[c++] = readAdc0(CH0VSCH7 | UNIPOLAR); // TEMP vs GNDSENSE + // (again as dummy command just to get data out) + + spi_dma_transfer(c); + +} + +void adc0_read_vref(void){ + + 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); + + readAdc0(CH2VSGND | UNIPOLAR); // ignore received data // ZEROSING SPI_DMA_Buffer_In[c++] = ZEROSING; SPI_DMA_Buffer_In[c++] = readAdc0(CH1VSGND | UNIPOLAR); // ZERODIFF @@ -178,7 +207,10 @@ void adc0_read(void){ } -void adc1_read(void){ + + + +void adc1_read_pwr(void){ uint8_t c = 0; // counter for spi buffer fill @@ -186,10 +218,6 @@ void adc1_read(void){ // 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); readAdc1(CH3VSGND | UNIPOLAR); // ignore received data // VDDDCUR SPI_DMA_Buffer_In[c++] = ADC1_OFFSET + VDDDCUR; @@ -203,7 +231,27 @@ void adc1_read(void){ SPI_DMA_Buffer_In[c++] = ADC1_OFFSET + GNDSENSE; SPI_DMA_Buffer_In[c++] = readAdc1(CH0VSCH7 | UNIPOLAR); // TEMP SPI_DMA_Buffer_In[c++] = ADC1_OFFSET + TEMP; - SPI_DMA_Buffer_In[c++] = readAdc1(CH2VSGND | UNIPOLAR); // ZEROSING + SPI_DMA_Buffer_In[c++] = readAdc1(CH0VSCH7 | UNIPOLAR); // TEMP + // (again as dummy command just to get data out) + + spi_dma_transfer(c); + +} + +void adc1_read_vref(void){ + + 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); + + readAdc1(CH2VSGND | UNIPOLAR); // ignore received data // ZEROSING SPI_DMA_Buffer_In[c++] = ADC1_OFFSET + ZEROSING; SPI_DMA_Buffer_In[c++] = readAdc1(CH1VSGND | UNIPOLAR); // ZERODIFF diff --git a/firmware/src/CB_functions.h b/firmware/src/CB_functions.h index 3a07f0b..15a58b0 100644 --- a/firmware/src/CB_functions.h +++ b/firmware/src/CB_functions.h @@ -71,8 +71,10 @@ void report_all_registers(void); void uart_byte_to_fpga(uint8_t byte); void debug_out(uint16_t debu); -void adc0_read(void); -void adc1_read(void); +void adc0_read_pwr(void); +void adc1_read_pwr(void); +void adc0_read_vref(void); +void adc1_read_vref(void); void SensorControlStatus(void); diff --git a/firmware/src/main.c b/firmware/src/main.c index 14bb7f6..ed586bb 100644 --- a/firmware/src/main.c +++ b/firmware/src/main.c @@ -67,7 +67,8 @@ int main(int argc, char *argv[]) { delay_ms(1000); CB_GPIO_Out_Hi(LED4); - uC_regs[0x0b] |= 1; // enable cyclic ADC readout by default + uC_regs[0x0b] |= (1<<0) | (0<<1) | (1<<2); // adc readout and converter board status is reported + // by default, but the readout of VDiscRef lines is disabled. write_timestamp(); // write compile time and date to dedicated registers @@ -78,10 +79,17 @@ int main(int argc, char *argv[]) { if(BufferOut(&UcRegAddr)){ decode_register(UcRegAddr); }else{ - if(uC_regs[0x0b] & 1){ // cycle ref bit set? - adc0_read(); - adc1_read(); - SensorControlStatus(); + if(uC_regs[0x0b] & (1<<0)){ // ReadPwr bit set? + adc0_read_pwr(); + adc1_read_pwr(); + } + if(uC_regs[0x0b] & (1<<1)){ // ReadVref bit set? + adc0_read_vref(); + adc1_read_vref(); + SensorControlStatus(); + } + if(uC_regs[0x0b] & (1<<2)){ // ReadStatus bit set? + SensorControlStatus(); } } diff --git a/firmware/src/version.h b/firmware/src/version.h index 3cb6fde..f5c6c8c 100644 --- a/firmware/src/version.h +++ b/firmware/src/version.h @@ -12,10 +12,10 @@ // (due to the makefile structure) #define COMPILE_YEAR 15 -#define COMPILE_MONTH 2 -#define COMPILE_DAY 9 +#define COMPILE_MONTH 4 +#define COMPILE_DAY 16 #define COMPILE_HOUR 17 -#define COMPILE_MINUTE 7 +#define COMPILE_MINUTE 10 void write_timestamp(void);