From 7364f674eddf0751a3ab3696579bf7453cf55fe7 Mon Sep 17 00:00:00 2001 From: lopez_c Date: Thu, 22 Feb 2018 11:15:24 +0100 Subject: [PATCH] [JUNGFRAU] - 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. --- .../jungfrauDetectorServer/RegisterDefs.h | 116 +++++++++--------- .../bin/jungfrauDetectorServer_developer | Bin 110872 -> 110680 bytes .../jungfrauDetectorServer/gitInfo.txt | 10 +- .../jungfrauDetectorServer/gitInfoJungfrau.h | 8 +- .../slsDetectorServer_defs.h | 4 +- .../slsDetectorServer/blackfin.h | 5 +- 6 files changed, 72 insertions(+), 71 deletions(-) diff --git a/slsDetectorSoftware/jungfrauDetectorServer/RegisterDefs.h b/slsDetectorSoftware/jungfrauDetectorServer/RegisterDefs.h index ebd2d94b5..697f0eaf5 100644 --- a/slsDetectorSoftware/jungfrauDetectorServer/RegisterDefs.h +++ b/slsDetectorSoftware/jungfrauDetectorServer/RegisterDefs.h @@ -4,7 +4,7 @@ /* Definitions for FPGA*/ /* FPGA Version register */ -#define FPGA_VERSION_REG (0x00 << 11) +#define FPGA_VERSION_REG (0x00 << MEM_MAP_SHIFT) #define BOARD_REVISION_OFST (0) #define BOARD_REVISION_MSK (0x00FFFFFF << BOARD_REVISION_OFST) @@ -14,10 +14,10 @@ /* Fix pattern register */ -#define FIX_PATT_REG (0x01 << 11) +#define FIX_PATT_REG (0x01 << MEM_MAP_SHIFT) /* Status register */ -#define STATUS_REG (0x02 << 11) +#define STATUS_REG (0x02 << MEM_MAP_SHIFT) #define RUN_BUSY_OFST (0) #define RUN_BUSY_MSK (0x00000001 << RUN_BUSY_OFST) @@ -34,10 +34,10 @@ /* Look at me register */ -#define LOOK_AT_ME_REG (0x03 << 11) //Not used in firmware or software +#define LOOK_AT_ME_REG (0x03 << MEM_MAP_SHIFT) //Not used in firmware or software /* System Status register */ -#define SYSTEM_STATUS_REG (0x04 << 11) //Not used in software +#define SYSTEM_STATUS_REG (0x04 << MEM_MAP_SHIFT) //Not used in software #define DDR3_CAL_DONE_OFST (0) //Not used in software #define DDR3_CAL_DONE_MSK (0x00000001 << DDR3_CAL_DONE_OFST) //Not used in software @@ -54,7 +54,7 @@ /* Module Control Board Serial Number Register */ -#define MOD_SERIAL_NUM_REG (0x0A << 11) //Not used in software +#define MOD_SERIAL_NUM_REG (0x0A << MEM_MAP_SHIFT) //Not used in software #define HARDWARE_SERIAL_NUM_OFST (0) //Not used in software #define HARDWARE_SERIAL_NUM_MSK (0x000000FF << HARDWARE_SERIAL_NUM_OFST) //Not used in software @@ -63,7 +63,7 @@ /* API Version Register */ -#define API_VERSION_REG (0x0F << 11) +#define API_VERSION_REG (0x0F << MEM_MAP_SHIFT) #define API_VERSION_OFST (0) #define API_VERSION_MSK (0x00FFFFFF << API_VERSION_OFST) @@ -71,27 +71,27 @@ #define API_VERSION_DETECTOR_TYPE_MSK (0x000000FF << API_VERSION_DETECTOR_TYPE_OFST) //Not used in software /* Time from Start 64 bit register */ -#define TIME_FROM_START_LSB_REG (0x10 << 11) -#define TIME_FROM_START_MSB_REG (0x11 << 11) +#define TIME_FROM_START_LSB_REG (0x10 << MEM_MAP_SHIFT) +#define TIME_FROM_START_MSB_REG (0x11 << MEM_MAP_SHIFT) /* Get Delay 64 bit register */ -#define GET_DELAY_LSB_REG (0x12 << 11) -#define GET_DELAY_MSB_REG (0x13 << 11) +#define GET_DELAY_LSB_REG (0x12 << MEM_MAP_SHIFT) +#define GET_DELAY_MSB_REG (0x13 << MEM_MAP_SHIFT) /* Get Cycles 64 bit register */ -#define GET_CYCLES_LSB_REG (0x14 << 11) -#define GET_CYCLES_MSB_REG (0x15 << 11) +#define GET_CYCLES_LSB_REG (0x14 << MEM_MAP_SHIFT) +#define GET_CYCLES_MSB_REG (0x15 << MEM_MAP_SHIFT) /* Get Frames 64 bit register */ -#define GET_FRAMES_LSB_REG (0x16 << 11) -#define GET_FRAMES_MSB_REG (0x17 << 11) +#define GET_FRAMES_LSB_REG (0x16 << MEM_MAP_SHIFT) +#define GET_FRAMES_MSB_REG (0x17 << MEM_MAP_SHIFT) /* Get Period 64 bit register */ -#define GET_PERIOD_LSB_REG (0x18 << 11) -#define GET_PERIOD_MSB_REG (0x19 << 11) +#define GET_PERIOD_LSB_REG (0x18 << MEM_MAP_SHIFT) +#define GET_PERIOD_MSB_REG (0x19 << MEM_MAP_SHIFT) /** Get Temperature Carlos, incorrectl as get gates */ -#define GET_TEMPERATURE_TMP112_REG (0x1c << 11) // (after multiplying by 625) in 10ths of millidegrees of TMP112 +#define GET_TEMPERATURE_TMP112_REG (0x1c << MEM_MAP_SHIFT) // (after multiplying by 625) in 10ths of millidegrees of TMP112 #define TEMPERATURE_POLARITY_BIT (15) #define TEMPERATURE_POLARITY_MSK (0x00000001 << TEMPERATURE_POLARITY_BIT) @@ -100,15 +100,15 @@ /* Get Frames from Start 64 bit register (frames from start Run Control) */ -#define FRAMES_FROM_START_PG_LSB_REG (0x24 << 11) -#define FRAMES_FROM_START_PG_MSB_REG (0x25 << 11) +#define FRAMES_FROM_START_PG_LSB_REG (0x24 << MEM_MAP_SHIFT) +#define FRAMES_FROM_START_PG_MSB_REG (0x25 << MEM_MAP_SHIFT) /* Measurement Time 64 bit register (timestamp at a frame start until reset)*/ -#define START_FRAME_TIME_LSB_REG (0x26 << 11) -#define START_FRAME_TIME_MSB_REG (0x27 << 11) +#define START_FRAME_TIME_LSB_REG (0x26 << MEM_MAP_SHIFT) +#define START_FRAME_TIME_MSB_REG (0x27 << MEM_MAP_SHIFT) /* SPI (Serial Peripheral Interface) Register */ -#define SPI_REG (0x40 << 11) +#define SPI_REG (0x40 << MEM_MAP_SHIFT) #define DAC_SERIAL_DIGITAL_OUT_OFST (0) #define DAC_SERIAL_DIGITAL_OUT_MSK (0x00000001 << DAC_SERIAL_DIGITAL_OUT_OFST) @@ -125,7 +125,7 @@ /* ADC SPI (Serial Peripheral Interface) Register */ -#define ADC_SPI_REG (0x41 << 11) +#define ADC_SPI_REG (0x41 << MEM_MAP_SHIFT) #define ADC_SERIAL_CLK_OUT_OFST (0) #define ADC_SERIAL_CLK_OUT_MSK (0x00000001 << ADC_SERIAL_CLK_OUT_OFST) @@ -135,16 +135,16 @@ #define ADC_SERIAL_CS_OUT_MSK (0x0000000F << ADC_SERIAL_CS_OUT_OFST) /* ADC offset Register */ -#define ADC_OFST_REG (0x42 << 11) +#define ADC_OFST_REG (0x42 << MEM_MAP_SHIFT) /* ADC Port Invert Register */ -#define ADC_PORT_INVERT_REG (0x43 << 11) +#define ADC_PORT_INVERT_REG (0x43 << MEM_MAP_SHIFT) /* Receiver IP Address Register */ -#define RX_IP_REG (0x45 << 11) +#define RX_IP_REG (0x45 << MEM_MAP_SHIFT) /* UDP Port */ -#define UDP_PORT_REG (0x46 << 11) +#define UDP_PORT_REG (0x46 << MEM_MAP_SHIFT) #define UDP_PORT_RX_OFST (0) #define UDP_PORT_RX_MSK (0x0000FFFF << UDP_PORT_RX_OFST) @@ -152,8 +152,8 @@ #define UDP_PORT_TX_MSK (0x0000FFFF << UDP_PORT_TX_OFST) /* Receiver Mac Address 64 bit Register */ -#define RX_MAC_LSB_REG (0x47 << 11) -#define RX_MAC_MSB_REG (0x48 << 11) +#define RX_MAC_LSB_REG (0x47 << MEM_MAP_SHIFT) +#define RX_MAC_MSB_REG (0x48 << MEM_MAP_SHIFT) #define RX_MAC_LSB_OFST (0) #define RX_MAC_LSB_MSK (0xFFFFFFFF << RX_MAC_LSB_OFST) @@ -161,8 +161,8 @@ #define RX_MAC_MSB_MSK (0x0000FFFF << RX_MAC_MSB_OFST) /* Detector/ Transmitter Mac Address 64 bit Register */ -#define TX_MAC_LSB_REG (0x49 << 11) -#define TX_MAC_MSB_REG (0x4A << 11) +#define TX_MAC_LSB_REG (0x49 << MEM_MAP_SHIFT) +#define TX_MAC_MSB_REG (0x4A << MEM_MAP_SHIFT) #define TX_MAC_LSB_OFST (0) #define TX_MAC_LSB_MSK (0xFFFFFFFF << TX_MAC_LSB_OFST) @@ -170,16 +170,16 @@ #define TX_MAC_MSB_MSK (0x0000FFFF << TX_MAC_MSB_OFST) /* Detector/ Transmitter IP Address Register */ -#define TX_IP_REG (0x4B << 11) +#define TX_IP_REG (0x4B << MEM_MAP_SHIFT) /* Detector/ Transmitter IP Checksum Register */ -#define TX_IP_CHECKSUM_REG (0x4C << 11) +#define TX_IP_CHECKSUM_REG (0x4C << MEM_MAP_SHIFT) #define TX_IP_CHECKSUM_OFST (0) #define TX_IP_CHECKSUM_MSK (0x0000FFFF << TX_IP_CHECKSUM_OFST) /* Configuration Register */ -#define CONFIG_REG (0x4D << 11) +#define CONFIG_REG (0x4D << MEM_MAP_SHIFT) #define CONFIG_OPERATION_MODE_OFST (16) #define CONFIG_OPERATION_MODE_MSK (0x00000001 << CONFIG_OPERATION_MODE_OFST) @@ -199,13 +199,13 @@ /* External Signal Register */ -#define EXT_SIGNAL_REG (0x4E << 11) +#define EXT_SIGNAL_REG (0x4E << MEM_MAP_SHIFT) #define EXT_SIGNAL_OFST (0) #define EXT_SIGNAL_MSK (0x00000003 << EXT_SIGNAL_OFST) //enabled when both bits high /* Control Register */ -#define CONTROL_REG (0x4F << 11) +#define CONTROL_REG (0x4F << MEM_MAP_SHIFT) #define CONTROL_START_ACQ_OFST (0) #define CONTROL_START_ACQ_MSK (0x00000001 << CONTROL_START_ACQ_OFST) @@ -223,10 +223,10 @@ #define CONTROL_STORAGE_CELL_NUM_MSK (0x0000000F << CONTROL_STORAGE_CELL_NUM_OFST) /* Reconfiguratble PLL Paramater Register */ -#define PLL_PARAM_REG (0x50 << 11) +#define PLL_PARAM_REG (0x50 << MEM_MAP_SHIFT) /* Reconfiguratble PLL Control Regiser */ -#define PLL_CONTROL_REG (0x51 << 11) +#define PLL_CONTROL_REG (0x51 << MEM_MAP_SHIFT) #define PLL_CTRL_RECONFIG_RST_OFST (0) //parameter reset #define PLL_CTRL_RECONFIG_RST_MSK (0x00000001 << PLL_CTRL_RECONFIG_RST_OFST) //parameter reset @@ -238,7 +238,7 @@ #define PLL_CTRL_ADDR_MSK (0x0000003F << PLL_CTRL_ADDR_OFST) /* Sample Register (Obsolete) */ -#define SAMPLE_REG (0x59 << 11) +#define SAMPLE_REG (0x59 << MEM_MAP_SHIFT) #define SAMPLE_ADC_SAMPLE_SEL_OFST (0) #define SAMPLE_ADC_SAMPLE_SEL_MSK (0x00000007 << SAMPLE_ADC_SAMPLE_SEL_OFST) @@ -288,7 +288,7 @@ #define SAMPLE_DECMT_FACTOR_4_VAL ((0x2 << SAMPLE_DGTL_DECMT_FACTOR_OFST) & SAMPLE_DGTL_DECMT_FACTOR_MSK) /** Vref Comp Mod Register */ -#define VREF_COMP_MOD_REG (0x5C << 11) +#define VREF_COMP_MOD_REG (0x5C << MEM_MAP_SHIFT) #define VREF_COMP_MOD_OFST (0) #define VREF_COMP_MOD_MSK (0x00000FFF << VREF_COMP_MOD_OFST) @@ -297,10 +297,10 @@ /** DAQ Register */ -#define DAQ_REG (0x5D << 11) //TBD in firmware +#define DAQ_REG (0x5D << MEM_MAP_SHIFT) //TBD in firmware /** Chip Power Register */ -#define CHIP_POWER_REG (0x5E << 11) +#define CHIP_POWER_REG (0x5E << MEM_MAP_SHIFT) #define CHIP_POWER_ENABLE_OFST (0) #define CHIP_POWER_ENABLE_MSK (0x00000001 << CHIP_POWER_ENABLE_OFST) @@ -309,7 +309,7 @@ /** Temperature Control Register */ -#define TEMP_CTRL_REG (0x5F << 11) +#define TEMP_CTRL_REG (0x5F << MEM_MAP_SHIFT) #define TEMP_CTRL_PROTCT_THRSHLD_OFST (0) #define TEMP_CTRL_PROTCT_THRSHLD_MSK (0x000007FF << TEMP_CTRL_PROTCT_THRSHLD_OFST) @@ -321,31 +321,31 @@ /* Set Delay 64 bit register */ -#define SET_DELAY_LSB_REG (0x60 << 11) -#define SET_DELAY_MSB_REG (0x61 << 11) +#define SET_DELAY_LSB_REG (0x60 << MEM_MAP_SHIFT) +#define SET_DELAY_MSB_REG (0x61 << MEM_MAP_SHIFT) /* Set Cycles 64 bit register */ -#define SET_CYCLES_LSB_REG (0x62 << 11) -#define SET_CYCLES_MSB_REG (0x63 << 11) +#define SET_CYCLES_LSB_REG (0x62 << MEM_MAP_SHIFT) +#define SET_CYCLES_MSB_REG (0x63 << MEM_MAP_SHIFT) /* Set Frames 64 bit register */ -#define SET_FRAMES_LSB_REG (0x64 << 11) -#define SET_FRAMES_MSB_REG (0x65 << 11) +#define SET_FRAMES_LSB_REG (0x64 << MEM_MAP_SHIFT) +#define SET_FRAMES_MSB_REG (0x65 << MEM_MAP_SHIFT) /* Set Period 64 bit register */ -#define SET_PERIOD_LSB_REG (0x66 << 11) -#define SET_PERIOD_MSB_REG (0x67 << 11) +#define SET_PERIOD_LSB_REG (0x66 << MEM_MAP_SHIFT) +#define SET_PERIOD_MSB_REG (0x67 << MEM_MAP_SHIFT) /* Set Period 64 bit register */ -#define SET_EXPTIME_LSB_REG (0x68 << 11) -#define SET_EXPTIME_MSB_REG (0x69 << 11) +#define SET_EXPTIME_LSB_REG (0x68 << MEM_MAP_SHIFT) +#define SET_EXPTIME_MSB_REG (0x69 << MEM_MAP_SHIFT) /* Trigger Delay 32 bit register */ -#define SET_TRIGGER_DELAY_LSB_REG (0x70 << 11) -#define SET_TRIGGER_DELAY_MSB_REG (0x71 << 11) +#define SET_TRIGGER_DELAY_LSB_REG (0x70 << MEM_MAP_SHIFT) +#define SET_TRIGGER_DELAY_MSB_REG (0x71 << MEM_MAP_SHIFT) /* Module Coordinates Register 0 */ -#define COORD_0 (0x7C << 11) +#define COORD_0 (0x7C << MEM_MAP_SHIFT) #define COORD_0_Y_OFST (0) #define COORD_0_Y_MSK (0x0000FFFF << COORD_0_Y_OFST) @@ -353,7 +353,7 @@ #define COORD_0_X_MSK (0x0000FFFF << COORD_0_X_OFST) /* Module Coordinates Register 1 */ -#define COORD_1 (0x7D << 11) +#define COORD_1 (0x7D << MEM_MAP_SHIFT) #define COORD_0_Z_OFST (0) #define COORD_0_Z_MSK (0x0000FFFF << COORD_0_Z_OFST) diff --git a/slsDetectorSoftware/jungfrauDetectorServer/bin/jungfrauDetectorServer_developer b/slsDetectorSoftware/jungfrauDetectorServer/bin/jungfrauDetectorServer_developer index 692fbb0c361223560c43ece3c778c4ddc1b7e02d..236ebd9a2d6f05fc6982c4bab9a9c6fc55dc383a 100755 GIT binary patch delta 33230 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 x3|cpnir3cwXMlF2vcUpm0mZ-`fC3xN8rRZT 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%0DDtCP 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 diff --git a/slsDetectorSoftware/jungfrauDetectorServer/gitInfo.txt b/slsDetectorSoftware/jungfrauDetectorServer/gitInfo.txt index 5987000ab..fcd27ac13 100644 --- a/slsDetectorSoftware/jungfrauDetectorServer/gitInfo.txt +++ b/slsDetectorSoftware/jungfrauDetectorServer/gitInfo.txt @@ -1,9 +1,9 @@ Path: slsDetectorsPackage/slsDetectorSoftware/jungfrauDetectorServer URL: origin git@github.com:slsdetectorgroup/slsDetectorPackage.git Repository Root: origin git@github.com:slsdetectorgroup/slsDetectorPackage.git -Repsitory UUID: 3da6a6df6556312f7467407a8b5691bdc478424e -Revision: 119 +Repsitory UUID: a536f8ac9be2f064974da454273bfa828edb5bb1 +Revision: 121 Branch: developer -Last Changed Author: Dhanya_Thattil -Last Changed Rev: 3597 -Last Changed Date: 2018-02-07 10:44:06.000000002 +0100 ./RegisterDefs.h +Last Changed Author: Erik_Frojdh +Last Changed Rev: 3669 +Last Changed Date: 2018-02-22 10:31:42.834118468 +0100 ./blackfin.h~ diff --git a/slsDetectorSoftware/jungfrauDetectorServer/gitInfoJungfrau.h b/slsDetectorSoftware/jungfrauDetectorServer/gitInfoJungfrau.h index 826314e3a..b87a74e6b 100644 --- a/slsDetectorSoftware/jungfrauDetectorServer/gitInfoJungfrau.h +++ b/slsDetectorSoftware/jungfrauDetectorServer/gitInfoJungfrau.h @@ -1,6 +1,6 @@ #define GITURL "git@github.com:slsdetectorgroup/slsDetectorPackage.git" -#define GITREPUUID "3da6a6df6556312f7467407a8b5691bdc478424e" -#define GITAUTH "Dhanya_Thattil" -#define GITREV 0x3597 -#define GITDATE 0x20180207 +#define GITREPUUID "a536f8ac9be2f064974da454273bfa828edb5bb1" +#define GITAUTH "Erik_Frojdh" +#define GITREV 0x3669 +#define GITDATE 0x20180222 #define GITBRANCH "developer" diff --git a/slsDetectorSoftware/jungfrauDetectorServer/slsDetectorServer_defs.h b/slsDetectorSoftware/jungfrauDetectorServer/slsDetectorServer_defs.h index c3002121e..e9657d6a4 100644 --- a/slsDetectorSoftware/jungfrauDetectorServer/slsDetectorServer_defs.h +++ b/slsDetectorSoftware/jungfrauDetectorServer/slsDetectorServer_defs.h @@ -8,8 +8,8 @@ #define GOODBYE (-200) -#define MIN_REQRD_VRSN_T_RD_API 0x171113 -#define REQRD_FRMWR_VRSN 0x171113 +#define MIN_REQRD_VRSN_T_RD_API 0x171220 +#define REQRD_FRMWR_VRSN 0x171220 /* Struct Definitions */ diff --git a/slsDetectorSoftware/slsDetectorServer/blackfin.h b/slsDetectorSoftware/slsDetectorServer/blackfin.h index 0c962493e..312adfdc8 100755 --- a/slsDetectorSoftware/slsDetectorServer/blackfin.h +++ b/slsDetectorSoftware/slsDetectorServer/blackfin.h @@ -12,6 +12,7 @@ u_int32_t CSP0BASE = 0; #define CSP0 0x20200000 #define MEM_SIZE 0x100000 +#define MEM_MAP_SHIFT 1 @@ -103,7 +104,7 @@ int64_t set64BitReg(int64_t value, int aLSB, int aMSB){ * @retuns 32 bit data read */ u_int32_t readRegister(u_int32_t offset) { - return bus_r(offset << 11); + return bus_r(offset << MEM_MAP_SHIFT); } /** @@ -112,7 +113,7 @@ u_int32_t readRegister(u_int32_t offset) { * @param data 32 bit data */ u_int32_t writeRegister(u_int32_t offset, u_int32_t data) { - bus_w(offset << 11, data); + bus_w(offset << MEM_MAP_SHIFT, data); return readRegister(offset); }