Added Backend board FPGA temperature support

This commit is contained in:
l_brueckner_m 2015-04-20 18:20:02 +02:00
parent ee0c6c4a05
commit 39cd82f0b8
9 changed files with 51 additions and 6 deletions

View File

@ -609,3 +609,35 @@ int Beb_Test(unsigned int beb_number){
return 1;
}
// Returns the FPGA temperature from the xps sysmon ip core
// Temperature value is cropped and not well rounded
int Beb_GetBebFPGATemp()
{
int temperature=0;
volatile u_int32_t *ptr1;
int fd;
fd = open("/dev/mem", O_RDWR | O_SYNC, 0);
if (fd == -1)
{
printf("\nCan't find /dev/mem!\n");
return 0;
}
u_int32_t CSP0BASE = (u_int32_t)mmap(0, 0x1000, PROT_READ|PROT_WRITE, MAP_FILE|MAP_SHARED, fd, XPAR_SYSMON_0_BASEADDR );
if (CSP0BASE == (u_int32_t)MAP_FAILED)
{
printf("\nCan't map memmory area!!\n");
return 0;
}
ptr1=(u_int32_t*)(CSP0BASE + 0x200); // temperature register in xps sysmon core is at 0x200
close(fd);
temperature = ((((float)(*ptr1)/65536.0f)/0.00198421639f ) - 273.15f); // Static conversation, copied from xps sysmon standalone driver
return temperature;
}

View File

@ -80,6 +80,7 @@ struct BebInfo{
int Beb_Test(unsigned int beb_number);
int Beb_GetBebFPGATemp();
#endif

View File

@ -6,8 +6,6 @@
#include <stdio.h>
#include <unistd.h>
//#include <string.h>
#include <sys/mman.h>
#include <fcntl.h>
#include "HardwareMMappingDefs.h"

View File

@ -6,8 +6,6 @@
#include <stdio.h>
#include <unistd.h>
//#include <string.h>
#include <sys/mman.h>
#include <fcntl.h>
#include "HardwareMMappingDefs.h"

View File

@ -8,6 +8,10 @@
#include "HardwareIO.h"
#include <sys/types.h>
#include "ansi.h"
#include <sys/mman.h>
#include <fcntl.h>
/*class LocalLinkInterface: public HardwareIO{ //*/

View File

@ -1009,4 +1009,9 @@ int getAllTrimbits(){
return *((detectorModules->chanregs));
}
int getBebFPGATemp()
{
return Beb_GetBebFPGATemp();
}
#endif

View File

@ -131,6 +131,7 @@ int startReceiver(int d);
void setExternalGating(int enable[]);
void setAllTrimbits(int val);
int getAllTrimbits();
int getBebFPGATemp();
#endif

View File

@ -1244,7 +1244,7 @@ int set_dac(int file_des) {
int get_adc(int file_des) {
int retval;
int retval=-1;
int ret=OK,ret1=OK;
int arg[2];
enum dacIndex ind;
@ -1271,6 +1271,12 @@ int get_adc(int file_des) {
#endif
switch (ind) {
#ifdef EIGERD
case TEMPERATURE_FPGA: //dac = TEMP_FPGA;
retval=getBebFPGATemp();
printf("Temperature: %d°C\n",retval);
break;
#endif
#ifdef GOTTHARDD
case TEMPERATURE_FPGA: //dac = TEMP_FPGA;
break;
@ -1284,7 +1290,7 @@ int get_adc(int file_des) {
break;
}
#ifdef SLS_DETECTOR_FUNCTION_LIST
if (ret==OK) {
if ((ret==OK) && (retval==-1)) {
retval=getADC(idac,imod);
}
#endif