]> rtime.felk.cvut.cz Git - fpga/lx-cpu1/lx-rocon.git/commitdiff
RoCoN: add measurement of input voltage in milli-Volts.
authorPavel Pisa <ppisa@pikron.com>
Thu, 15 Jan 2015 09:07:59 +0000 (10:07 +0100)
committerPavel Pisa <ppisa@pikron.com>
Thu, 15 Jan 2015 09:07:59 +0000 (10:07 +0100)
Signed-off-by: Pavel Pisa <ppisa@pikron.com>
sw/app/rocon/appl_pxmc.c
sw/app/rocon/appl_pxmc.h
sw/app/rocon/appl_pxmccmds.c

index f2f919da0d90e0902bf22fa08ffee141e7a5040e..17f6e2bdd78d022ac611be316a51e6264b8ce683 100644 (file)
@@ -79,6 +79,33 @@ pxmc_rocon_state_t *pxmc_state2rocon_state(pxmc_state_t *mcs)
   return mcsrc;
 }
 
+uint32_t pxmc_rocon_vin_adc_last;
+int pxmc_rocon_vin_act;
+int pxmc_rocon_vin_ofs = 20978;
+int pxmc_rocon_vin_mul = 32905;
+int pxmc_rocon_vin_shr = 14;
+
+static inline
+void pxmc_rocon_vin_compute(void)
+{
+  volatile uint32_t *vin_adc_reg;
+  uint32_t vin_adc;
+  int      vin_act;
+
+  vin_adc_reg = fpga_lx_master_receiver_base;
+  vin_adc_reg += LX_MASTER_DATA_OFFS + 1 + 8 * 2;
+
+  vin_adc = *vin_adc_reg;
+
+  vin_act = (int16_t)(vin_adc - pxmc_rocon_vin_adc_last);
+  pxmc_rocon_vin_adc_last = vin_adc;
+
+  vin_act = (pxmc_rocon_vin_ofs - vin_act) * pxmc_rocon_vin_mul;
+  vin_act >>= pxmc_rocon_vin_shr;
+
+  pxmc_rocon_vin_act = vin_act;
+}
+
 const uint8_t onesin10bits[1024]={
   0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5,
   1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,
@@ -1199,6 +1226,8 @@ IRQ_HANDLER_FNC(pxmc_rocon_rx_done_isr)
     hal_gpio_set_value(T2MAT1_PIN, 0);
     hal_gpio_set_value(T2MAT0_PIN, 0);
 
+    pxmc_rocon_vin_compute();
+
     if (pxmc_rocon_rx_data_hist_buff >= pxmc_rocon_rx_data_hist_buff_end)
       pxmc_rocon_rx_data_hist_buff = NULL;
 
index f425c479f51adb9064061ddef7c3a53c1752e05b..9c3517538e254457824a9d25906714c96f6c3707 100644 (file)
@@ -38,5 +38,6 @@ typedef struct pxmc_rocon_state_t {
                 (((size_t)&((pxmc_rocon_state_t *)0L)->_fld) - \
                  ((size_t)&((pxmc_rocon_state_t *)0L)->base))
 
+extern int pxmc_rocon_vin_act;
 
 #endif /*_APPL_PXMC_H_*/
index 1bcf667f488b67b0d7a0a66be64a46c5c1763dc2..698235f3bc22136196703290663da909425af912 100644 (file)
@@ -51,6 +51,11 @@ cmd_des_t const cmd_des_regcurhold={0, CDESM_OPCHR|CDESM_RW,
                         {(char*)pxmc_rocon_state_offs(cur_hold),
                          0}};
 
+cmd_des_t const cmd_des_vin={0, CDESM_OPCHR|CDESM_RD,
+                        "VIN","read actual input voltage value", cmd_do_rw_int,
+                        {(char*)&pxmc_rocon_vin_act,
+                         0}};
+
 
 cmd_des_t const *cmd_appl_pxmc[] =
 {
@@ -59,5 +64,6 @@ cmd_des_t const *cmd_appl_pxmc[] =
   &cmd_des_regcurqp,
   &cmd_des_regcurqi,
   &cmd_des_regcurhold,
+  &cmd_des_vin,
   NULL
 };