From 516336963ea439406fd7d137beb0665957f1e5c8 Mon Sep 17 00:00:00 2001 From: Carlos Lopez Date: Fri, 27 Apr 2018 15:11:37 +0200 Subject: [PATCH] [CTB] - Modified memory map address shift for the interface between FPGA and Blackfin SOM. Shift has to be set to 1 since the basic AMC data transfers is 8-bit and not 16-bit. --- .../jctbDetectorServer/blackfin.h | 4 +- .../jctbDetectorServer/gitInfo.txt | 8 +- .../jctbDetectorServer/gitInfoMoench.h | 6 +- .../jctbDetectorServer_developer | Bin 118524 -> 118204 bytes .../jctbDetectorServer/registers_m.h | 282 +++++++++--------- .../jctbDetectorServer/server_funcs.c | 7 +- .../jctbDetectorServer/slow_adc.c | 1 + 7 files changed, 156 insertions(+), 152 deletions(-) mode change 100755 => 100644 slsDetectorSoftware/jctbDetectorServer/registers_m.h mode change 100755 => 100644 slsDetectorSoftware/jctbDetectorServer/server_funcs.c diff --git a/slsDetectorSoftware/jctbDetectorServer/blackfin.h b/slsDetectorSoftware/jctbDetectorServer/blackfin.h index 3284fe183..975244242 100644 --- a/slsDetectorSoftware/jctbDetectorServer/blackfin.h +++ b/slsDetectorSoftware/jctbDetectorServer/blackfin.h @@ -3,8 +3,10 @@ #define CSP0 0x20200000 #define MEM_SIZE 0x100000 +#define MEM_MAP_SHIFT 1 + +#include - #include int mapCSP0(void); u_int16_t bus_r16(u_int32_t offset); diff --git a/slsDetectorSoftware/jctbDetectorServer/gitInfo.txt b/slsDetectorSoftware/jctbDetectorServer/gitInfo.txt index e76daa760..20d141abf 100644 --- a/slsDetectorSoftware/jctbDetectorServer/gitInfo.txt +++ b/slsDetectorSoftware/jctbDetectorServer/gitInfo.txt @@ -1,9 +1,9 @@ Path: slsDetectorsPackage/slsDetectorSoftware/jctbDetectorServer URL: origin git@github.com:slsdetectorgroup/slsDetectorPackage.git Repository Root: origin git@github.com:slsdetectorgroup/slsDetectorPackage.git -Repsitory UUID: 807189a4923dc257d812c9974f1a4a4d143c2f70 -Revision: 23 +Repsitory UUID: c35203ebfb35ba605eaff601ce46e4d29c1f5690 +Revision: 24 Branch: developer Last Changed Author: Anna_Bergamaschi -Last Changed Rev: 3734 -Last Changed Date: 2018-04-17 12:35:10.000000002 +0200 ./firmware_funcs.c +Last Changed Rev: 3761 +Last Changed Date: 2018-04-27 14:46:10.176661554 +0200 ./server_funcs.h diff --git a/slsDetectorSoftware/jctbDetectorServer/gitInfoMoench.h b/slsDetectorSoftware/jctbDetectorServer/gitInfoMoench.h index c613be18a..3ef73212c 100644 --- a/slsDetectorSoftware/jctbDetectorServer/gitInfoMoench.h +++ b/slsDetectorSoftware/jctbDetectorServer/gitInfoMoench.h @@ -1,6 +1,6 @@ #define GITURL "git@github.com:slsdetectorgroup/slsDetectorPackage.git" -#define GITREPUUID "807189a4923dc257d812c9974f1a4a4d143c2f70" +#define GITREPUUID "c35203ebfb35ba605eaff601ce46e4d29c1f5690" #define GITAUTH "Anna_Bergamaschi" -#define GITREV 0x3734 -#define GITDATE 0x20180417 +#define GITREV 0x3761 +#define GITDATE 0x20180427 #define GITBRANCH "developer" diff --git a/slsDetectorSoftware/jctbDetectorServer/jctbDetectorServer_developer b/slsDetectorSoftware/jctbDetectorServer/jctbDetectorServer_developer index f0c79de231d0fcf3f37108ad2e367d80d97d0a8e..57590938c5c4a924bd5e0b2f72f021328953e85b 100755 GIT binary patch delta 50934 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
_<1X29Dh(qUBhVdXxm#|2A}NqQJuGx?V$ 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 bsIiBxlE!u?k_L8HkxF(Sq08jAro{gbDnhMU diff --git a/slsDetectorSoftware/jctbDetectorServer/registers_m.h b/slsDetectorSoftware/jctbDetectorServer/registers_m.h old mode 100755 new mode 100644 index 3351f9a8a..996d50cbc --- a/slsDetectorSoftware/jctbDetectorServer/registers_m.h +++ b/slsDetectorSoftware/jctbDetectorServer/registers_m.h @@ -20,7 +20,7 @@ #define FPGA_INIT_ADDR 0xb0000000 //#ifdef JUNGFRAU_DHANYA -#define POWER_ON_REG 0x5e<<11 +#define POWER_ON_REG 0x5e << MEM_MAP_SHIFT // Pwr_I2C_SDA <= PowerReg_s(1) when PowerReg_s(3)='1' else 'Z'; // Pwr_I2C_SCL <= PowerReg_s(0) when PowerReg_s(2)='1' else 'Z'; @@ -29,71 +29,71 @@ #define PWR_I2C_SCL_EN_BIT 2 #define PWR_I2C_SDA_EN_BIT 3 -#define POWER_STATUS_REG 41<<11 +#define POWER_STATUS_REG 41 << MEM_MAP_SHIFT #define ADCREG1 0x08 #define ADCREG2 0x14//20 #define ADCREG3 0x4 #define ADCREG4 0x5 #define ADCREG_VREFS 24 -#define DBIT_PIPELINE_REG 89<<11 //0x59 same PATTERN_N_LOOP2_REG -#define MEM_MACHINE_FIFOS_REG 79<<11 //from gotthard -#define CONFGAIN_REG 93<<11 //from gotthard -#define ADC_PIPELINE_REG 66<<11 //0x42 same as ADC_OFFSET_REG +#define DBIT_PIPELINE_REG 89 << MEM_MAP_SHIFT //0x59 same PATTERN_N_LOOP2_REG +#define MEM_MACHINE_FIFOS_REG 79 << MEM_MAP_SHIFT //from gotthard +#define CONFGAIN_REG 93 << MEM_MAP_SHIFT //from gotthard +#define ADC_PIPELINE_REG 66 << MEM_MAP_SHIFT //0x42 same as ADC_OFFSET_REG //#endif -//#define ADC_OFFSET_REG 93<<11 //same as DAQ_REG -#define ADC_INVERSION_REG 67<<11 +//#define ADC_OFFSET_REG 93 << MEM_MAP_SHIFT //same as DAQ_REG +#define ADC_INVERSION_REG 67 << MEM_MAP_SHIFT -#define DAC_REG 64<<11//0x17<<11// control the dacs +#define DAC_REG 64 << MEM_MAP_SHIFT//0x17 << MEM_MAP_SHIFT// control the dacs //ADC -#define ADC_WRITE_REG 65<<11//0x18<<11 -//#define ADC_SYNC_REG 66<<11//0x19<<11 -//#define HV_REG 67<<11//0x20<<11 +#define ADC_WRITE_REG 65 << MEM_MAP_SHIFT//0x18 << MEM_MAP_SHIFT +//#define ADC_SYNC_REG 66 << MEM_MAP_SHIFT//0x19 << MEM_MAP_SHIFT +//#define HV_REG 67 << MEM_MAP_SHIFT//0x20 << MEM_MAP_SHIFT -//#define MUTIME_REG 0x1a<<11 +//#define MUTIME_REG 0x1a << MEM_MAP_SHIFT //temperature -#define TEMP_IN_REG 0x1b<<11 -#define TEMP_OUT_REG 0x1c<<11 +#define TEMP_IN_REG 0x1b << MEM_MAP_SHIFT +#define TEMP_OUT_REG 0x1c << MEM_MAP_SHIFT //configure MAC -#define TSE_CONF_REG 0x1d<<11 -#define ENET_CONF_REG 0x1e<<11 -//#define WRTSE_SHAD_REG 0x1f<<11 +#define TSE_CONF_REG 0x1d << MEM_MAP_SHIFT +#define ENET_CONF_REG 0x1e << MEM_MAP_SHIFT +//#define WRTSE_SHAD_REG 0x1f << MEM_MAP_SHIFT //HV -#define DUMMY_REG 68<<11//0x21<<11 -#define FPGA_VERSION_REG 0<<11 //0x22<<11 -#define PCB_REV_REG 0<<11 -#define FIX_PATT_REG 1<<11 //0x23<<11 -#define CONTROL_REG 79<<11//0x24<<11 -#define STATUS_REG 2<<11 //0x25<<11 -#define CONFIG_REG 77<<11//0x26<<11 -#define EXT_SIGNAL_REG 78<<11// 0x27<<11 -//#define FPGA_SVN_REG 0x29<<11 +#define DUMMY_REG 68 << MEM_MAP_SHIFT//0x21 << MEM_MAP_SHIFT +#define FPGA_VERSION_REG 0 << MEM_MAP_SHIFT //0x22 << MEM_MAP_SHIFT +#define PCB_REV_REG 0 << MEM_MAP_SHIFT +#define FIX_PATT_REG 1 << MEM_MAP_SHIFT //0x23 << MEM_MAP_SHIFT +#define CONTROL_REG 79 << MEM_MAP_SHIFT//0x24 << MEM_MAP_SHIFT +#define STATUS_REG 2 << MEM_MAP_SHIFT //0x25 << MEM_MAP_SHIFT +#define CONFIG_REG 77 << MEM_MAP_SHIFT//0x26 << MEM_MAP_SHIFT +#define EXT_SIGNAL_REG 78 << MEM_MAP_SHIFT// 0x27 << MEM_MAP_SHIFT +//#define FPGA_SVN_REG 0x29 << MEM_MAP_SHIFT -#define CHIP_OF_INTRST_REG 0x2A<<11 +#define CHIP_OF_INTRST_REG 0x2A << MEM_MAP_SHIFT //FIFO -#define LOOK_AT_ME_REG 3<<11 //0x28<<11 -#define SYSTEM_STATUS_REG 4<<11 +#define LOOK_AT_ME_REG 3 << MEM_MAP_SHIFT //0x28 << MEM_MAP_SHIFT +#define SYSTEM_STATUS_REG 4 << MEM_MAP_SHIFT -#define FIFO_DATA_REG 6<<11 -#define FIFO_STATUS_REG 7<<11 +#define FIFO_DATA_REG 6 << MEM_MAP_SHIFT +#define FIFO_STATUS_REG 7 << MEM_MAP_SHIFT // constant FifoDigitalInReg_c : integer := 60; -#define FIFO_DIGITAL_DATA_LSB_REG 60<<11 -#define FIFO_DIGITAL_DATA_MSB_REG 61<<11 +#define FIFO_DIGITAL_DATA_LSB_REG 60 << MEM_MAP_SHIFT +#define FIFO_DIGITAL_DATA_MSB_REG 61 << MEM_MAP_SHIFT -#define FIFO_DATA_REG_OFF 0x50<<11 /////// +#define FIFO_DATA_REG_OFF 0x50 << MEM_MAP_SHIFT /////// //to read back dac registers -//#define MOD_DACS1_REG 0x65<<11 -//#define MOD_DACS2_REG 0x66<<11 -//#define MOD_DACS3_REG 0x67<<11 +//#define MOD_DACS1_REG 0x65 << MEM_MAP_SHIFT +//#define MOD_DACS2_REG 0x66 << MEM_MAP_SHIFT +//#define MOD_DACS3_REG 0x67 << MEM_MAP_SHIFT //user entered @@ -102,135 +102,135 @@ -#define GET_ACTUAL_TIME_LSB_REG 16<<11 -#define GET_ACTUAL_TIME_MSB_REG 17<<11 +#define GET_ACTUAL_TIME_LSB_REG 16 << MEM_MAP_SHIFT +#define GET_ACTUAL_TIME_MSB_REG 17 << MEM_MAP_SHIFT -#define GET_MEASUREMENT_TIME_LSB_REG 38<<11 -#define GET_MEASUREMENT_TIME_MSB_REG 39<<11 +#define GET_MEASUREMENT_TIME_LSB_REG 38 << MEM_MAP_SHIFT +#define GET_MEASUREMENT_TIME_MSB_REG 39 << MEM_MAP_SHIFT -#define SET_DELAY_LSB_REG 96<<11 //0x68<<11 -#define SET_DELAY_MSB_REG 97<<11 //0x69<<11 -#define GET_DELAY_LSB_REG 18<<11//0x6a<<11 -#define GET_DELAY_MSB_REG 19<<11//0x6b<<11 +#define SET_DELAY_LSB_REG 96 << MEM_MAP_SHIFT //0x68 << MEM_MAP_SHIFT +#define SET_DELAY_MSB_REG 97 << MEM_MAP_SHIFT //0x69 << MEM_MAP_SHIFT +#define GET_DELAY_LSB_REG 18 << MEM_MAP_SHIFT//0x6a << MEM_MAP_SHIFT +#define GET_DELAY_MSB_REG 19 << MEM_MAP_SHIFT//0x6b << MEM_MAP_SHIFT -#define SET_CYCLES_LSB_REG 98<<11//0x6c<<11 -#define SET_CYCLES_MSB_REG 99<<11//0x6d<<11 -#define GET_CYCLES_LSB_REG 20<<11//0x6e<<11 -#define GET_CYCLES_MSB_REG 21<<11//0x6f<<11 +#define SET_CYCLES_LSB_REG 98 << MEM_MAP_SHIFT//0x6c << MEM_MAP_SHIFT +#define SET_CYCLES_MSB_REG 99 << MEM_MAP_SHIFT//0x6d << MEM_MAP_SHIFT +#define GET_CYCLES_LSB_REG 20 << MEM_MAP_SHIFT//0x6e << MEM_MAP_SHIFT +#define GET_CYCLES_MSB_REG 21 << MEM_MAP_SHIFT//0x6f << MEM_MAP_SHIFT -#define SET_FRAMES_LSB_REG 100<<11//0x70<<11 -#define SET_FRAMES_MSB_REG 101<<11//0x71<<11 -#define GET_FRAMES_LSB_REG 22<<11//0x72<<11 -#define GET_FRAMES_MSB_REG 23<<11//0x73<<11 +#define SET_FRAMES_LSB_REG 100 << MEM_MAP_SHIFT//0x70 << MEM_MAP_SHIFT +#define SET_FRAMES_MSB_REG 101 << MEM_MAP_SHIFT//0x71 << MEM_MAP_SHIFT +#define GET_FRAMES_LSB_REG 22 << MEM_MAP_SHIFT//0x72 << MEM_MAP_SHIFT +#define GET_FRAMES_MSB_REG 23 << MEM_MAP_SHIFT//0x73 << MEM_MAP_SHIFT -#define SET_PERIOD_LSB_REG 102<<11//0x74<<11 -#define SET_PERIOD_MSB_REG 103<<11//0x75<<11 -#define GET_PERIOD_LSB_REG 24<<11//0x76<<11 -#define GET_PERIOD_MSB_REG 25<<11//0x77<<11 +#define SET_PERIOD_LSB_REG 102 << MEM_MAP_SHIFT//0x74 << MEM_MAP_SHIFT +#define SET_PERIOD_MSB_REG 103 << MEM_MAP_SHIFT//0x75 << MEM_MAP_SHIFT +#define GET_PERIOD_LSB_REG 24 << MEM_MAP_SHIFT//0x76 << MEM_MAP_SHIFT +#define GET_PERIOD_MSB_REG 25 << MEM_MAP_SHIFT//0x77 << MEM_MAP_SHIFT -//#define PATTERN_WAIT0_TIME_REG_LSB 114<<11 -//#define PATTERN_WAIT0_TIME_REG_MSB 115<<11 -#define SET_EXPTIME_LSB_REG 114<<11//0x78<<11 -#define SET_EXPTIME_MSB_REG 115<<11//0x79<<11 -#define GET_EXPTIME_LSB_REG 26<<11//0x7a<<11 -#define GET_EXPTIME_MSB_REG 27<<11//0x7b<<11 +//#define PATTERN_WAIT0_TIME_REG_LSB 114 << MEM_MAP_SHIFT +//#define PATTERN_WAIT0_TIME_REG_MSB 115 << MEM_MAP_SHIFT +#define SET_EXPTIME_LSB_REG 114 << MEM_MAP_SHIFT//0x78 << MEM_MAP_SHIFT +#define SET_EXPTIME_MSB_REG 115 << MEM_MAP_SHIFT//0x79 << MEM_MAP_SHIFT +#define GET_EXPTIME_LSB_REG 26 << MEM_MAP_SHIFT//0x7a << MEM_MAP_SHIFT +#define GET_EXPTIME_MSB_REG 27 << MEM_MAP_SHIFT//0x7b << MEM_MAP_SHIFT -#define SET_GATES_LSB_REG 106<<11//0x7c<<11 -#define SET_GATES_MSB_REG 107<<11//0x7d<<11 -#define GET_GATES_LSB_REG 28<<11//0x7e<<11 -#define GET_GATES_MSB_REG 29<<11//0x7f<<11 +#define SET_GATES_LSB_REG 106 << MEM_MAP_SHIFT//0x7c << MEM_MAP_SHIFT +#define SET_GATES_MSB_REG 107 << MEM_MAP_SHIFT//0x7d << MEM_MAP_SHIFT +#define GET_GATES_LSB_REG 28 << MEM_MAP_SHIFT//0x7e << MEM_MAP_SHIFT +#define GET_GATES_MSB_REG 29 << MEM_MAP_SHIFT//0x7f << MEM_MAP_SHIFT -#define DATA_IN_LSB_REG 30<<11 -#define DATA_IN_MSB_REG 31<<11 +#define DATA_IN_LSB_REG 30 << MEM_MAP_SHIFT +#define DATA_IN_MSB_REG 31 << MEM_MAP_SHIFT -#define PATTERN_OUT_LSB_REG 32<<11 -#define PATTERN_OUT_MSB_REG 33<<11 +#define PATTERN_OUT_LSB_REG 32 << MEM_MAP_SHIFT +#define PATTERN_OUT_MSB_REG 33 << MEM_MAP_SHIFT -#define FRAMES_FROM_START_LSB_REG 34<<11 -#define FRAMES_FROM_START_MSB_REG 35<<11 +#define FRAMES_FROM_START_LSB_REG 34 << MEM_MAP_SHIFT +#define FRAMES_FROM_START_MSB_REG 35 << MEM_MAP_SHIFT -#define FRAMES_FROM_START_PG_LSB_REG 36<<11 -#define FRAMES_FROM_START_PG_MSB_REG 37<<11 +#define FRAMES_FROM_START_PG_LSB_REG 36 << MEM_MAP_SHIFT +#define FRAMES_FROM_START_PG_MSB_REG 37 << MEM_MAP_SHIFT -#define SLOW_ADC_REG 43<<11 +#define SLOW_ADC_REG 43 << MEM_MAP_SHIFT -#define PLL_PARAM_REG 80<<11//0x37<<11 -#define PLL_PARAM_OUT_REG 5<<11 //0x38<<11 -#define PLL_CNTRL_REG 81<<11//0x34<<11 +#define PLL_PARAM_REG 80 << MEM_MAP_SHIFT//0x37 << MEM_MAP_SHIFT +#define PLL_PARAM_OUT_REG 5 << MEM_MAP_SHIFT //0x38 << MEM_MAP_SHIFT +#define PLL_CNTRL_REG 81 << MEM_MAP_SHIFT//0x34 << MEM_MAP_SHIFT #ifdef NEW_GBE_INTERFACE -#define GBE_PARAM_OUT_REG 40<<11 -#define GBE_PARAM_REG 69<<11 -#define GBE_CNTRL_REG 70<<11 +#define GBE_PARAM_OUT_REG 40 << MEM_MAP_SHIFT +#define GBE_PARAM_REG 69 << MEM_MAP_SHIFT +#define GBE_CNTRL_REG 70 << MEM_MAP_SHIFT #else -#define RX_UDP_AREG 69<<11 //rx_udpip_AReg_c : integer:= 69; *\/ -#define UDPPORTS_AREG 70<<11// udpports_AReg_c : integer:= 70; *\/ -#define RX_UDPMACL_AREG 71<<11//rx_udpmacL_AReg_c : integer:= 71; *\/ -#define RX_UDPMACH_AREG 72<<11//rx_udpmacH_AReg_c : integer:= 72; *\/ -#define DETECTORMACL_AREG 73<<11//detectormacL_AReg_c : integer:= 73; *\/ -#define DETECTORMACH_AREG 74<<11//detectormacH_AReg_c : integer:= 74; *\/ -#define DETECTORIP_AREG 75<<11//detectorip_AReg_c : integer:= 75; *\/ -#define IPCHKSUM_AREG 76<<11//ipchksum_AReg_c : integer:= 76; *\/ */ +#define RX_UDP_AREG 69 << MEM_MAP_SHIFT //rx_udpip_AReg_c : integer:= 69; *\/ +#define UDPPORTS_AREG 70 << MEM_MAP_SHIFT// udpports_AReg_c : integer:= 70; *\/ +#define RX_UDPMACL_AREG 71 << MEM_MAP_SHIFT//rx_udpmacL_AReg_c : integer:= 71; *\/ +#define RX_UDPMACH_AREG 72 << MEM_MAP_SHIFT//rx_udpmacH_AReg_c : integer:= 72; *\/ +#define DETECTORMACL_AREG 73 << MEM_MAP_SHIFT//detectormacL_AReg_c : integer:= 73; *\/ +#define DETECTORMACH_AREG 74 << MEM_MAP_SHIFT//detectormacH_AReg_c : integer:= 74; *\/ +#define DETECTORIP_AREG 75 << MEM_MAP_SHIFT//detectorip_AReg_c : integer:= 75; *\/ +#define IPCHKSUM_AREG 76 << MEM_MAP_SHIFT//ipchksum_AReg_c : integer:= 76; *\/ */ #endif -#define PATTERN_CNTRL_REG 82<<11 -#define PATTERN_LIMITS_AREG 83<<11 +#define PATTERN_CNTRL_REG 82 << MEM_MAP_SHIFT +#define PATTERN_LIMITS_AREG 83 << MEM_MAP_SHIFT -#define PATTERN_LOOP0_AREG 84<<11 -#define PATTERN_N_LOOP0_REG 85<<11 +#define PATTERN_LOOP0_AREG 84 << MEM_MAP_SHIFT +#define PATTERN_N_LOOP0_REG 85 << MEM_MAP_SHIFT -#define PATTERN_LOOP1_AREG 86<<11 -#define PATTERN_N_LOOP1_REG 87<<11 +#define PATTERN_LOOP1_AREG 86 << MEM_MAP_SHIFT +#define PATTERN_N_LOOP1_REG 87 << MEM_MAP_SHIFT -#define PATTERN_LOOP2_AREG 88<<11 -#define PATTERN_N_LOOP2_REG 89<<11 +#define PATTERN_LOOP2_AREG 88 << MEM_MAP_SHIFT +#define PATTERN_N_LOOP2_REG 89 << MEM_MAP_SHIFT -#define PATTERN_WAIT0_AREG 90<<11 -#define PATTERN_WAIT1_AREG 91<<11 -#define PATTERN_WAIT2_AREG 92<<11 +#define PATTERN_WAIT0_AREG 90 << MEM_MAP_SHIFT +#define PATTERN_WAIT1_AREG 91 << MEM_MAP_SHIFT +#define PATTERN_WAIT2_AREG 92 << MEM_MAP_SHIFT -//#define DAQ_REG 93<<11 //unused -#define NSAMPLES_REG 93<<11 +//#define DAQ_REG 93 << MEM_MAP_SHIFT //unused +#define NSAMPLES_REG 93 << MEM_MAP_SHIFT -#define HV_REG 95<<11 +#define HV_REG 95 << MEM_MAP_SHIFT -#define PATTERN_IOCTRL_REG_LSB 108<<11 -#define PATTERN_IOCTRL_REG_MSB 109<<11 +#define PATTERN_IOCTRL_REG_LSB 108 << MEM_MAP_SHIFT +#define PATTERN_IOCTRL_REG_MSB 109 << MEM_MAP_SHIFT -#define PATTERN_IOCLKCTRL_REG_LSB 110<<11 -#define PATTERN_IOCLKCTRL_REG_MSB 111<<11 -#define PATTERN_IN_REG_LSB 112<<11 -#define PATTERN_IN_REG_MSB 113<<11 -#define PATTERN_WAIT0_TIME_REG_LSB 114<<11 -#define PATTERN_WAIT0_TIME_REG_MSB 115<<11 -#define PATTERN_WAIT1_TIME_REG_LSB 116<<11 -#define PATTERN_WAIT1_TIME_REG_MSB 117<<11 -#define PATTERN_WAIT2_TIME_REG_LSB 118<<11 -#define PATTERN_WAIT2_TIME_REG_MSB 119<<11 +#define PATTERN_IOCLKCTRL_REG_LSB 110 << MEM_MAP_SHIFT +#define PATTERN_IOCLKCTRL_REG_MSB 111 << MEM_MAP_SHIFT +#define PATTERN_IN_REG_LSB 112 << MEM_MAP_SHIFT +#define PATTERN_IN_REG_MSB 113 << MEM_MAP_SHIFT +#define PATTERN_WAIT0_TIME_REG_LSB 114 << MEM_MAP_SHIFT +#define PATTERN_WAIT0_TIME_REG_MSB 115 << MEM_MAP_SHIFT +#define PATTERN_WAIT1_TIME_REG_LSB 116 << MEM_MAP_SHIFT +#define PATTERN_WAIT1_TIME_REG_MSB 117 << MEM_MAP_SHIFT +#define PATTERN_WAIT2_TIME_REG_LSB 118 << MEM_MAP_SHIFT +#define PATTERN_WAIT2_TIME_REG_MSB 119 << MEM_MAP_SHIFT //#define DAC_REG_OFF 120 -//#define DAC_0_1_VAL_REG 120<<11 -//#define DAC_2_3_VAL_REG 121<<11 -//#define DAC_4_5_VAL_REG 122<<11 -//#define DAC_6_7_VAL_REG 123<<11 -//#define DAC_8_9_VAL_REG 124<<11 -//#define DAC_10_11_VAL_REG 125<<11 -//#define DAC_12_13_VAL_REG 126<<11 -//#define DAC_14_15_VAL_REG 127<<11 -#define DAC_VAL_REG 121<<11 -#define DAC_NUM_REG 122<<11 -#define DAC_VAL_OUT_REG 42<<11 -#define ADC_LATCH_DISABLE_REG 120<<11 +//#define DAC_0_1_VAL_REG 120 << MEM_MAP_SHIFT +//#define DAC_2_3_VAL_REG 121 << MEM_MAP_SHIFT +//#define DAC_4_5_VAL_REG 122 << MEM_MAP_SHIFT +//#define DAC_6_7_VAL_REG 123 << MEM_MAP_SHIFT +//#define DAC_8_9_VAL_REG 124 << MEM_MAP_SHIFT +//#define DAC_10_11_VAL_REG 125 << MEM_MAP_SHIFT +//#define DAC_12_13_VAL_REG 126 << MEM_MAP_SHIFT +//#define DAC_14_15_VAL_REG 127 << MEM_MAP_SHIFT +#define DAC_VAL_REG 121 << MEM_MAP_SHIFT +#define DAC_NUM_REG 122 << MEM_MAP_SHIFT +#define DAC_VAL_OUT_REG 42 << MEM_MAP_SHIFT +#define ADC_LATCH_DISABLE_REG 120 << MEM_MAP_SHIFT @@ -241,27 +241,27 @@ /* registers defined in FPGA */ #define GAIN_REG 0 -//#define FLOW_CONTROL_REG 0x11<<11 -//#define FLOW_STATUS_REG 0x12<<11 -//#define FRAME_REG 0x13<<11 +//#define FLOW_CONTROL_REG 0x11 << MEM_MAP_SHIFT +//#define FLOW_STATUS_REG 0x12 << MEM_MAP_SHIFT +//#define FRAME_REG 0x13 << MEM_MAP_SHIFT #define MULTI_PURPOSE_REG 0 -//#define TIME_FROM_START_REG 0x16<<11 +//#define TIME_FROM_START_REG 0x16 << MEM_MAP_SHIFT -#define ROI_REG 0 // 0x35<<11 -#define OVERSAMPLING_REG 0 // 0x36<<11 -#define MOENCH_CNTR_REG 0 // 0x31<<11 -#define MOENCH_CNTR_OUT_REG 0 // 0x33<<11 -#define MOENCH_CNTR_CONF_REG 0 // 0x32<<11 +#define ROI_REG 0 // 0x35 << MEM_MAP_SHIFT +#define OVERSAMPLING_REG 0 // 0x36 << MEM_MAP_SHIFT +#define MOENCH_CNTR_REG 0 // 0x31 << MEM_MAP_SHIFT +#define MOENCH_CNTR_OUT_REG 0 // 0x33 << MEM_MAP_SHIFT +#define MOENCH_CNTR_CONF_REG 0 // 0x32 << MEM_MAP_SHIFT //image -#define DARK_IMAGE_REG 0 // 0x81<<11 -#define GAIN_IMAGE_REG 0 // 0x82<<11 +#define DARK_IMAGE_REG 0 // 0x81 << MEM_MAP_SHIFT +#define GAIN_IMAGE_REG 0 // 0x82 << MEM_MAP_SHIFT //counter block memory -#define COUNTER_MEMORY_REG 0 // 0x85<<11 +#define COUNTER_MEMORY_REG 0 // 0x85 << MEM_MAP_SHIFT //not used diff --git a/slsDetectorSoftware/jctbDetectorServer/server_funcs.c b/slsDetectorSoftware/jctbDetectorServer/server_funcs.c old mode 100755 new mode 100644 index 341310dea..acf839458 --- a/slsDetectorSoftware/jctbDetectorServer/server_funcs.c +++ b/slsDetectorSoftware/jctbDetectorServer/server_funcs.c @@ -7,8 +7,9 @@ #include "slow_adc.h" #include "registers_m.h" #include "gitInfoMoench.h" +#include "blackfin.h" -#define FIFO_DATA_REG_OFF 0x50<<11 +#define FIFO_DATA_REG_OFF 0x50 << MEM_MAP_SHIFT // Global variables @@ -866,7 +867,7 @@ int write_register(int file_des) { if(ret!=FAIL){ - address=(addr<<11); + address=(addr << MEM_MAP_SHIFT); if((address==FIFO_DATA_REG_OFF)||(address==CONTROL_REG)) ret = bus_w16(address,val); else @@ -932,7 +933,7 @@ int read_register(int file_des) { //#endif if(ret!=FAIL){ - address=(addr<<11); + address=(addr << MEM_MAP_SHIFT); if((address==FIFO_DATA_REG_OFF)||(address==CONTROL_REG)) retval=bus_r16(address); else diff --git a/slsDetectorSoftware/jctbDetectorServer/slow_adc.c b/slsDetectorSoftware/jctbDetectorServer/slow_adc.c index 34138159d..6f1b764b0 100644 --- a/slsDetectorSoftware/jctbDetectorServer/slow_adc.c +++ b/slsDetectorSoftware/jctbDetectorServer/slow_adc.c @@ -1,6 +1,7 @@ #include "firmware_funcs.h" #include "registers_m.h" #include "server_defs.h" +#include "blackfin.h" int prepareSlowADCSeq() {