]> jspc29.x-matter.uni-frankfurt.de Git - mvd_firmware.git/commitdiff
can now read out ADC values of VREF, power/voltage readings and overcurrent status...
authorMichael Wiebusch <m.wiebusch@gsi.de>
Mon, 27 Jul 2015 08:54:46 +0000 (10:54 +0200)
committerMichael Wiebusch <m.wiebusch@gsi.de>
Mon, 27 Jul 2015 08:54:46 +0000 (10:54 +0200)
firmware/src/CB_functions.c
firmware/src/CB_functions.h
firmware/src/main.c
firmware/src/version.h

index b3b7c1da69a495da9cf4056ab64dc3fad67e8e66..aca56e149b59ba61328126f6fc760f31944a0261 100644 (file)
@@ -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
   
index 3a07f0bf79e7a55f063075fe642c32f9150a6ce8..15a58b0c144a3a2b5874c722b13b0de016ecce2f 100644 (file)
@@ -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);
 
 
index 14bb7f60cb0226a8ef48f37dfb987d9e5b281dd9..ed586bb7a18ea4e490874f3c88500ff15fb66013 100644 (file)
@@ -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();
       }
     }
     
index 3cb6fde324fd0514e9464fcc77f56d683c4c3318..f5c6c8cb422c4a24e01577034606ca442acdcdee 100644 (file)
 // (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);