<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.iac.isu.edu/index.php?action=history&amp;feed=atom&amp;title=V1495Lib.c</id>
	<title>V1495Lib.c - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.iac.isu.edu/index.php?action=history&amp;feed=atom&amp;title=V1495Lib.c"/>
	<link rel="alternate" type="text/html" href="https://wiki.iac.isu.edu/index.php?title=V1495Lib.c&amp;action=history"/>
	<updated>2026-05-08T21:02:12Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.35.2</generator>
	<entry>
		<id>https://wiki.iac.isu.edu/index.php?title=V1495Lib.c&amp;diff=45181&amp;oldid=prev</id>
		<title>Oborn at 17:24, 29 June 2009</title>
		<link rel="alternate" type="text/html" href="https://wiki.iac.isu.edu/index.php?title=V1495Lib.c&amp;diff=45181&amp;oldid=prev"/>
		<updated>2009-06-29T17:24:57Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;a href=&quot;https://wiki.iac.isu.edu/index.php?title=V1495Lib.c&amp;amp;diff=45181&amp;amp;oldid=45180&quot;&gt;Show changes&lt;/a&gt;</summary>
		<author><name>Oborn</name></author>
	</entry>
	<entry>
		<id>https://wiki.iac.isu.edu/index.php?title=V1495Lib.c&amp;diff=45180&amp;oldid=prev</id>
		<title>Oborn: Created page with '&lt;pre&gt;  /* v1495Lib.c - CAEN v1495 logic unit library + VFAT user interface library        --------------------------------------------------------------------------              ...'</title>
		<link rel="alternate" type="text/html" href="https://wiki.iac.isu.edu/index.php?title=V1495Lib.c&amp;diff=45180&amp;oldid=prev"/>
		<updated>2009-06-24T22:36:40Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;#039;&amp;lt;pre&amp;gt;  /* v1495Lib.c - CAEN v1495 logic unit library + VFAT user interface library        --------------------------------------------------------------------------              ...&amp;#039;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/* v1495Lib.c - CAEN v1495 logic unit library + VFAT user interface library&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    --------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
                   --- CAEN SpA - Front End Electronics  ---&lt;br /&gt;
&lt;br /&gt;
    --------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
    Name        :   V1495Upgrade.c&lt;br /&gt;
&lt;br /&gt;
    Project     :   V1495Upgrade&lt;br /&gt;
&lt;br /&gt;
    Description :   V1495 Upgrade Software&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	  This program writes the configuration file (Altera RBF Format) into the&lt;br /&gt;
	  flash memory of the Module V1495. This allows to upgrade the firmware&lt;br /&gt;
	  for either the VME_INT and the USER fpga from the VME.&lt;br /&gt;
	  The program is based on the CAEN Bridge (V1718 or V2718).&lt;br /&gt;
	  The software can be compiled for other VME CPUs, changing the functions&lt;br /&gt;
      in the custom VME functions (VME_Init(),VME_Write(), VME_Read()).&lt;br /&gt;
      Comment away CAENVMElib.h include in this case.&lt;br /&gt;
&lt;br /&gt;
    Date        :   March 2006&lt;br /&gt;
    Release     :   1.0&lt;br /&gt;
    Author      :   C.Tintori&lt;br /&gt;
&lt;br /&gt;
    --------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    --------------------------------------------------------------------------&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
&lt;br /&gt;
  Revision History:&lt;br /&gt;
  1.0    CT     First release&lt;br /&gt;
  1.1    LC     USER Flash page map changed. Only STD update allowed.&lt;br /&gt;
&lt;br /&gt;
Adjustment for Motorola VME controllers: Sergey Boyarinov April 23 2007&lt;br /&gt;
&lt;br /&gt;
*/&lt;br /&gt;
/*&lt;br /&gt;
&lt;br /&gt;
  example:&lt;br /&gt;
&lt;br /&gt;
download module&lt;br /&gt;
ld &amp;lt; /usr/local/clas/devel/coda/src/rol/VXWORKS_ppc/obj/v1495.o&lt;br /&gt;
&lt;br /&gt;
goto directory where your firmware is stored&lt;br /&gt;
cd &amp;quot;/usr/local/clas/devel/coda/src/rol/code.s&amp;quot;&lt;br /&gt;
&lt;br /&gt;
download user firmware&lt;br /&gt;
v1495firmware(0xfa510000,&amp;quot;v1495USER1.0.rbf&amp;quot;,0,0)&lt;br /&gt;
&lt;br /&gt;
download VME firmware (BE CAREFUL !!!)&lt;br /&gt;
v1495firmware(0xfa510000,&amp;quot;v1495V2LB_rev03_build_8321.rbf&amp;quot;,0,1)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;string.h&amp;gt;&lt;br /&gt;
#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
#include &amp;lt;time.h&amp;gt;&lt;br /&gt;
#include &amp;lt;vxWorks.h&amp;gt;&lt;br /&gt;
#include &amp;lt;stdioLib.h&amp;gt;&lt;br /&gt;
#include &amp;lt;usrLib.h&amp;gt;&lt;br /&gt;
#include &amp;lt;taskLib.h&amp;gt;&lt;br /&gt;
#include &amp;lt;semLib.h&amp;gt;&lt;br /&gt;
#include &amp;lt;intLib.h&amp;gt;&lt;br /&gt;
#include &amp;lt;cacheLib.h&amp;gt;&lt;br /&gt;
#include &amp;lt;iv.h&amp;gt;&lt;br /&gt;
#include &amp;lt;math.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;quot;v1495Lib.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/*sergey*/&lt;br /&gt;
#define EIEIO    __asm__ volatile (&amp;quot;eieio&amp;quot;)&lt;br /&gt;
#define SYNC     __asm__ volatile (&amp;quot;sync&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
/* Parameters for the access to the Flash Memory */&lt;br /&gt;
#define VME_FIRST_PAGE_STD    768    /* first page of the image STD */&lt;br /&gt;
#define VME_FIRST_PAGE_BCK    1408   /* first page of the image BCK */&lt;br /&gt;
#define USR_FIRST_PAGE_STD    48     /* first page of the image STD */&lt;br /&gt;
#define USR_FIRST_PAGE_BCK    1048   /* first page of the image BCK */&lt;br /&gt;
#define PAGE_SIZE       264 /* Number of bytes per page in the target flash */&lt;br /&gt;
&lt;br /&gt;
/* flash memory Opcodes */&lt;br /&gt;
#define MAIN_MEM_PAGE_READ          0x00D2&lt;br /&gt;
#define MAIN_MEM_PAGE_PROG_TH_BUF1  0x0082&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//#define EIEIO()				__asm__ volatile(&amp;quot;eieio&amp;quot;)&lt;br /&gt;
//#define SYNC()				__asm__ volatile(&amp;quot;sync&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
#define SYSTIME_TO_MS(t)	((t)*60/1000000)&lt;br /&gt;
#define SYSTIME_TO_US(t)	((t)*60/1000)&lt;br /&gt;
#define NUM_VFATS		6&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#define NUM_WORDS		14 // these are the number of words in the V1495ReadoutStatus struct&lt;br /&gt;
typedef struct&lt;br /&gt;
{&lt;br /&gt;
	volatile unsigned int TotalBytes;&lt;br /&gt;
	volatile unsigned int TotalFrames;&lt;br /&gt;
	volatile unsigned int DeltaBytes;&lt;br /&gt;
	volatile unsigned int DeltaFrames;&lt;br /&gt;
	volatile unsigned int LastSize;&lt;br /&gt;
	volatile unsigned int LengthDataFIFO;&lt;br /&gt;
	volatile unsigned int LengthSizeFIFO;&lt;br /&gt;
	volatile unsigned int Sent;&lt;br /&gt;
	volatile unsigned short LastCapture[12];&lt;br /&gt;
} V1495ReadoutStatus;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//volatile UINT32 practiceArray[168];&lt;br /&gt;
&lt;br /&gt;
/* Define Global structs */&lt;br /&gt;
volatile V1495ReadoutCtrlRegs * v1495;&lt;br /&gt;
volatile V1495ReadoutStatus v1495Channels[6];&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// Binary codes&lt;br /&gt;
/*&lt;br /&gt;
const unsigned int START_FILE  = 0x1A02C741;        // Start File &lt;br /&gt;
const unsigned int END_FILE    = 0x05C12170;        // End File&lt;br /&gt;
const unsigned int FILE_INFO   = 0x10B22EAB;        // File Info&lt;br /&gt;
const unsigned int START_EVENT = 0xE1AC021D;        // Start Event&lt;br /&gt;
const unsigned int END_EVENT   = 0x14173aAD;        // End Event &lt;br /&gt;
const unsigned short int ZERO  = 0x0000;            // Zero for padding&lt;br /&gt;
&lt;br /&gt;
FILE *bin_file;&lt;br /&gt;
unsigned int file_num = 1;&lt;br /&gt;
&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/****************************************************************************&lt;br /&gt;
 write_flash_page&lt;br /&gt;
    flag=0 for USER flash (default)&lt;br /&gt;
        =1 for VME flash&lt;br /&gt;
****************************************************************************/&lt;br /&gt;
int&lt;br /&gt;
write_flash_page1(unsigned int addr, unsigned char *page, int pagenum, int flag)&lt;br /&gt;
{&lt;br /&gt;
  volatile V1495 *v1495 = (V1495 *) addr;&lt;br /&gt;
  int i, flash_addr, data;&lt;br /&gt;
  unsigned char addr0, addr1, addr2;&lt;br /&gt;
  int res = 0;&lt;br /&gt;
  unsigned short *Sel_Flash; /* VME Address of the FLASH SELECTION REGISTER */&lt;br /&gt;
  unsigned short *RW_Flash;  /* VME Address of the FLASH Read/Write REGISTER */&lt;br /&gt;
&lt;br /&gt;
  if(flag==1)&lt;br /&gt;
  {&lt;br /&gt;
    Sel_Flash = (short *)&amp;amp;(v1495-&amp;gt;selflashVME);&lt;br /&gt;
    RW_Flash = (short *)&amp;amp;(v1495-&amp;gt;flashVME);&lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
    Sel_Flash = (short *)&amp;amp;(v1495-&amp;gt;selflashUSER);&lt;br /&gt;
    RW_Flash = (short *)&amp;amp;(v1495-&amp;gt;flashUSER);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  EIEIO;&lt;br /&gt;
  SYNC;&lt;br /&gt;
  flash_addr = pagenum &amp;lt;&amp;lt; 9;&lt;br /&gt;
  addr0 = (unsigned char)flash_addr;&lt;br /&gt;
  addr1 = (unsigned char)(flash_addr&amp;gt;&amp;gt;8);&lt;br /&gt;
  addr2 = (unsigned char)(flash_addr&amp;gt;&amp;gt;16);&lt;br /&gt;
&lt;br /&gt;
  EIEIO;&lt;br /&gt;
  SYNC;&lt;br /&gt;
  /* enable flash (NCS = 0) */&lt;br /&gt;
  data = 0;&lt;br /&gt;
  *Sel_Flash = data;&lt;br /&gt;
&lt;br /&gt;
  EIEIO;&lt;br /&gt;
  SYNC;&lt;br /&gt;
  /* write opcode */&lt;br /&gt;
  data = MAIN_MEM_PAGE_PROG_TH_BUF1;&lt;br /&gt;
  *RW_Flash = data;&lt;br /&gt;
&lt;br /&gt;
  EIEIO;&lt;br /&gt;
  SYNC;&lt;br /&gt;
  /* write address */&lt;br /&gt;
  data = addr2;&lt;br /&gt;
  *RW_Flash = data;&lt;br /&gt;
  data = addr1;&lt;br /&gt;
  *RW_Flash = data;&lt;br /&gt;
  data = addr0;&lt;br /&gt;
  *RW_Flash = data;&lt;br /&gt;
&lt;br /&gt;
  EIEIO;&lt;br /&gt;
  SYNC;&lt;br /&gt;
  /* write flash page */&lt;br /&gt;
  for(i=0; i&amp;lt;PAGE_SIZE; i++)&lt;br /&gt;
  {&lt;br /&gt;
    data = page[i];&lt;br /&gt;
    *RW_Flash = data;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  EIEIO;&lt;br /&gt;
  SYNC;&lt;br /&gt;
  /* wait 20ms (max time required by the flash to complete the writing) */&lt;br /&gt;
  taskDelay(10); /* 1 tick = 10ms */&lt;br /&gt;
&lt;br /&gt;
  EIEIO;&lt;br /&gt;
  SYNC;&lt;br /&gt;
  /* disable flash (NCS = 1) */&lt;br /&gt;
  data = 1;&lt;br /&gt;
  *Sel_Flash = data;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  EIEIO;&lt;br /&gt;
  SYNC;&lt;br /&gt;
  /* wait 20ms (max time required by the flash to complete the writing) */&lt;br /&gt;
  taskDelay(20);&lt;br /&gt;
  EIEIO;&lt;br /&gt;
  SYNC;&lt;br /&gt;
&lt;br /&gt;
  return(res);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/****************************************************************************&lt;br /&gt;
 read_flash_page&lt;br /&gt;
****************************************************************************/&lt;br /&gt;
int&lt;br /&gt;
read_flash_page1(unsigned int addr, unsigned char *page, int pagenum, int flag)&lt;br /&gt;
{&lt;br /&gt;
  volatile V1495 *v1495 = (V1495 *) addr;&lt;br /&gt;
  int i, flash_addr, data;&lt;br /&gt;
  /*volatile*/ unsigned short data16;&lt;br /&gt;
  unsigned char addr0,addr1,addr2;&lt;br /&gt;
  int res = 0;&lt;br /&gt;
  unsigned short *Sel_Flash; /* VME Address of the FLASH SELECTION REGISTER */&lt;br /&gt;
  unsigned short *RW_Flash;  /* VME Address of the FLASH Read/Write REGISTER */&lt;br /&gt;
&lt;br /&gt;
  if(flag==1)&lt;br /&gt;
  {&lt;br /&gt;
    Sel_Flash = (short *)&amp;amp;(v1495-&amp;gt;selflashVME);&lt;br /&gt;
    RW_Flash = (short *)&amp;amp;(v1495-&amp;gt;flashVME);&lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
    Sel_Flash = (short *)&amp;amp;(v1495-&amp;gt;selflashUSER);&lt;br /&gt;
    RW_Flash = (short *)&amp;amp;(v1495-&amp;gt;flashUSER);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  EIEIO;&lt;br /&gt;
  SYNC;&lt;br /&gt;
  flash_addr = pagenum &amp;lt;&amp;lt; 9;&lt;br /&gt;
  addr0 = (unsigned char)flash_addr;&lt;br /&gt;
  addr1 = (unsigned char)(flash_addr&amp;gt;&amp;gt;8);&lt;br /&gt;
  addr2 = (unsigned char)(flash_addr&amp;gt;&amp;gt;16);&lt;br /&gt;
&lt;br /&gt;
  EIEIO;&lt;br /&gt;
  SYNC;&lt;br /&gt;
  /* enable flash (NCS = 0) */&lt;br /&gt;
  data = 0;&lt;br /&gt;
  *Sel_Flash = data;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  EIEIO;&lt;br /&gt;
  SYNC;&lt;br /&gt;
  /* write opcode */&lt;br /&gt;
  data = MAIN_MEM_PAGE_READ;&lt;br /&gt;
  *RW_Flash = data;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  EIEIO;&lt;br /&gt;
  SYNC;&lt;br /&gt;
  /* write address */&lt;br /&gt;
  data = addr2;&lt;br /&gt;
  *RW_Flash = data;&lt;br /&gt;
  data = addr1;&lt;br /&gt;
  *RW_Flash = data;&lt;br /&gt;
  data = addr0;&lt;br /&gt;
  *RW_Flash = data;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  EIEIO;&lt;br /&gt;
  SYNC;&lt;br /&gt;
  /* additional don't care bytes */&lt;br /&gt;
  data = 0;&lt;br /&gt;
  for(i=0; i&amp;lt;4; i++)&lt;br /&gt;
  {&lt;br /&gt;
    *RW_Flash = data;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  EIEIO;&lt;br /&gt;
  SYNC;&lt;br /&gt;
  /* read flash page */&lt;br /&gt;
  for(i=0; i&amp;lt;PAGE_SIZE; i++)&lt;br /&gt;
  {&lt;br /&gt;
    data16 = *RW_Flash;&lt;br /&gt;
    page[i] = (unsigned char)data16;&lt;br /&gt;
  }&lt;br /&gt;
  EIEIO;&lt;br /&gt;
  SYNC;&lt;br /&gt;
&lt;br /&gt;
  /* disable flash (NCS = 1) */&lt;br /&gt;
  data = 1;&lt;br /&gt;
  *Sel_Flash = data;&lt;br /&gt;
  EIEIO;&lt;br /&gt;
  SYNC;&lt;br /&gt;
&lt;br /&gt;
  return(res);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
int&lt;br /&gt;
v1495test(unsigned int baseaddr)&lt;br /&gt;
{&lt;br /&gt;
  // the address location below starts at the USER FPGA access location which is &lt;br /&gt;
  //0x8000 lower in memory than the dial switches for the module address location.&lt;br /&gt;
&lt;br /&gt;
  // if SW3=0 SW4=8 SW7=1 SW8=1 =&amp;gt; 0x80118000 is the 32 bit address and 0x90118000 is the 24 bit adresss&lt;br /&gt;
&lt;br /&gt;
  // then try v1495test(0x80110000)&lt;br /&gt;
  volatile V1495 *v1495 = (V1495 *) baseaddr;&lt;br /&gt;
  unsigned short *data16 = (unsigned short *)&amp;amp;(v1495-&amp;gt;control);&lt;br /&gt;
&lt;br /&gt;
  printf(&amp;quot;Control      [0x%08x] = 0x%04x\n&amp;quot;,&amp;amp;(v1495-&amp;gt;control),v1495-&amp;gt;control);&lt;br /&gt;
  printf(&amp;quot;firmwareRev  [0x%08x] = 0x%04x\n&amp;quot;,&amp;amp;(v1495-&amp;gt;firmwareRev),v1495-&amp;gt;firmwareRev);&lt;br /&gt;
  printf(&amp;quot;selflashVME  [0x%08x] = 0x%04x\n&amp;quot;,&amp;amp;(v1495-&amp;gt;selflashVME),v1495-&amp;gt;selflashVME);&lt;br /&gt;
  printf(&amp;quot;flashVME     [0x%08x] = 0x%04x\n&amp;quot;,&amp;amp;(v1495-&amp;gt;flashVME),v1495-&amp;gt;flashVME);&lt;br /&gt;
  printf(&amp;quot;selflashUSER [0x%08x] = 0x%04x\n&amp;quot;,&amp;amp;(v1495-&amp;gt;selflashUSER),v1495-&amp;gt;selflashUSER);&lt;br /&gt;
  printf(&amp;quot;flashUSER    [0x%08x] = 0x%04x\n&amp;quot;,&amp;amp;(v1495-&amp;gt;flashUSER),v1495-&amp;gt;flashUSER);&lt;br /&gt;
  printf(&amp;quot;configROM    [0x%08x] = 0x%04x\n&amp;quot;,&amp;amp;(v1495-&amp;gt;configROM[0]),v1495-&amp;gt;configROM[0]);&lt;br /&gt;
&lt;br /&gt;
  return(0);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int&lt;br /&gt;
v1495test1()&lt;br /&gt;
{&lt;br /&gt;
  volatile V1495 *v1495 = (V1495 *) 0x80110000;&lt;br /&gt;
  unsigned short *data16 = (unsigned short *)&amp;amp;(v1495-&amp;gt;control);&lt;br /&gt;
&lt;br /&gt;
  printf(&amp;quot;Control      [0x%08x] = 0x%04x\n&amp;quot;,&amp;amp;(v1495-&amp;gt;control),v1495-&amp;gt;control);&lt;br /&gt;
  printf(&amp;quot;firmwareRev  [0x%08x] = 0x%04x\n&amp;quot;,&amp;amp;(v1495-&amp;gt;firmwareRev),v1495-&amp;gt;firmwareRev);&lt;br /&gt;
  printf(&amp;quot;selflashVME  [0x%08x] = 0x%04x\n&amp;quot;,&amp;amp;(v1495-&amp;gt;selflashVME),v1495-&amp;gt;selflashVME);&lt;br /&gt;
  printf(&amp;quot;flashVME     [0x%08x] = 0x%04x\n&amp;quot;,&amp;amp;(v1495-&amp;gt;flashVME),v1495-&amp;gt;flashVME);&lt;br /&gt;
  printf(&amp;quot;selflashUSER [0x%08x] = 0x%04x\n&amp;quot;,&amp;amp;(v1495-&amp;gt;selflashUSER),v1495-&amp;gt;selflashUSER);&lt;br /&gt;
  printf(&amp;quot;flashUSER    [0x%08x] = 0x%04x\n&amp;quot;,&amp;amp;(v1495-&amp;gt;flashUSER),v1495-&amp;gt;flashUSER);&lt;br /&gt;
  printf(&amp;quot;configROM    [0x%08x] = 0x%04x\n&amp;quot;,&amp;amp;(v1495-&amp;gt;configROM[0]),v1495-&amp;gt;configROM[0]);&lt;br /&gt;
&lt;br /&gt;
  return(0);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/*int&lt;br /&gt;
v1495reload()&lt;br /&gt;
{&lt;br /&gt;
  volatile V1495 *v1495 = (V1495 *)0xfa510000;&lt;br /&gt;
  unsigned short *Conf_Flash;&lt;br /&gt;
  Conf_Flash = (short *)&amp;amp;(v1495-&amp;gt;configUSER);&lt;br /&gt;
&lt;br /&gt;
  printf(&amp;quot;Reloading user FPGA firmware...&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
  EIEIO;&lt;br /&gt;
  SYNC;&lt;br /&gt;
  *Conf_Flash = 1;&lt;br /&gt;
  EIEIO;&lt;br /&gt;
  SYNC;&lt;br /&gt;
&lt;br /&gt;
  printf(&amp;quot;done!\n&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
  return 0;&lt;br /&gt;
}*/&lt;br /&gt;
&lt;br /&gt;
int&lt;br /&gt;
v1495reload(unsigned int baseaddr)&lt;br /&gt;
{&lt;br /&gt;
  volatile V1495 *v1495 = (V1495 *)baseaddr;&lt;br /&gt;
  unsigned short *Conf_Flash;&lt;br /&gt;
  Conf_Flash = (short *)&amp;amp;(v1495-&amp;gt;configUSER);&lt;br /&gt;
&lt;br /&gt;
  printf(&amp;quot;Reloading user FPGA firmware...&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
  EIEIO;&lt;br /&gt;
  SYNC;&lt;br /&gt;
  *Conf_Flash = 1;&lt;br /&gt;
  EIEIO;&lt;br /&gt;
  SYNC;&lt;br /&gt;
&lt;br /&gt;
  printf(&amp;quot;done!\n&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
  return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/*****************************************************************************&lt;br /&gt;
   MAIN&lt;br /&gt;
&lt;br /&gt;
     baseaddr: full board address (for example 0x80510000)&lt;br /&gt;
     filename: RBF file name&lt;br /&gt;
     page: =0 for standard, =1 for backup&lt;br /&gt;
     user_vme: Firmware to update selector = 0 =&amp;gt; USER, 1 =&amp;gt; VME&lt;br /&gt;
&lt;br /&gt;
*****************************************************************************/&lt;br /&gt;
int&lt;br /&gt;
v1495firmware(unsigned int baseaddr, char *filename, int page, int user_vme)&lt;br /&gt;
{&lt;br /&gt;
  int finish,i;&lt;br /&gt;
  int bp, bcnt, pa;&lt;br /&gt;
  char c;&lt;br /&gt;
  unsigned char pdw[PAGE_SIZE], pdr[PAGE_SIZE];&lt;br /&gt;
  unsigned long vboard_base_address;&lt;br /&gt;
  FILE *cf;&lt;br /&gt;
&lt;br /&gt;
  /*page = 0;     ONLY STD !!!!!!!!!!!!! */&lt;br /&gt;
  /*user_vme = 0; ONLY USER !!!!!!!!!!!! */&lt;br /&gt;
&lt;br /&gt;
  printf(&amp;quot;\n&amp;quot;);&lt;br /&gt;
  printf(&amp;quot;********************************************************\n&amp;quot;);&lt;br /&gt;
  printf(&amp;quot;* CAEN SpA - Front-End Division                        *\n&amp;quot;);&lt;br /&gt;
  printf(&amp;quot;* ---------------------------------------------------- *\n&amp;quot;);&lt;br /&gt;
  printf(&amp;quot;* Firmware Upgrade of the V1495                        *\n&amp;quot;);&lt;br /&gt;
  printf(&amp;quot;* Version 1.1 (27/07/06)                               *\n&amp;quot;);&lt;br /&gt;
  printf(&amp;quot;*   Sergey Boyarinov: CLAS version 23-Apr-2007         *\n&amp;quot;);&lt;br /&gt;
  printf(&amp;quot;********************************************************\n\n&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
  /* open the configuration file */&lt;br /&gt;
  cf = fopen(filename,&amp;quot;rb&amp;quot;);&lt;br /&gt;
  if(cf==NULL)&lt;br /&gt;
  {&lt;br /&gt;
    printf(&amp;quot;\n\nCan't open v1495 firmware file &amp;gt;%s&amp;lt; - exit\n&amp;quot;,filename);&lt;br /&gt;
    exit(1);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  if(user_vme == 0) /* FPGA &amp;quot;User&amp;quot; */&lt;br /&gt;
  {&lt;br /&gt;
    if(page == 0)&lt;br /&gt;
    {&lt;br /&gt;
      pa = USR_FIRST_PAGE_STD;&lt;br /&gt;
    }&lt;br /&gt;
    else if(page == 1)&lt;br /&gt;
    {&lt;br /&gt;
      printf(&amp;quot;Backup image not supported for USER FPGA\n&amp;quot;);&lt;br /&gt;
      exit(0);&lt;br /&gt;
	}&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
      printf(&amp;quot;Bad Image.\n&amp;quot;);&lt;br /&gt;
	  exit(0);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    printf(&amp;quot;Updating firmware of the FPGA USER with the file %s\n&amp;quot;,filename);&lt;br /&gt;
  }&lt;br /&gt;
  else if(user_vme == 1) /* FPGA &amp;quot;VME_Interface&amp;quot; */&lt;br /&gt;
  {&lt;br /&gt;
    if(page == 0)&lt;br /&gt;
    {&lt;br /&gt;
      printf(&amp;quot;Writing STD page of the VME FPGA\n&amp;quot;);&lt;br /&gt;
      pa = VME_FIRST_PAGE_STD;&lt;br /&gt;
	}&lt;br /&gt;
    else if(page == 1)&lt;br /&gt;
    {&lt;br /&gt;
      printf(&amp;quot;Writing BCK page of the VME FPGA\n&amp;quot;);&lt;br /&gt;
      pa = VME_FIRST_PAGE_BCK;&lt;br /&gt;
	}&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
      printf(&amp;quot;Bad Image.\n&amp;quot;);&lt;br /&gt;
      exit(0);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
    printf(&amp;quot;Updating firmware of the FPGA VME with the file %s\n&amp;quot;, filename);&lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
    printf(&amp;quot;Bad FPGA Target.\n&amp;quot;);&lt;br /&gt;
	exit(0);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  bcnt = 0; /* byte counter */&lt;br /&gt;
  bp = 0;   /* byte pointer in the page */&lt;br /&gt;
  finish = 0;&lt;br /&gt;
&lt;br /&gt;
  /* while loop */&lt;br /&gt;
  while(!finish)&lt;br /&gt;
  {&lt;br /&gt;
    c = (unsigned char) fgetc(cf); /* read one byte from file */&lt;br /&gt;
&lt;br /&gt;
    /* mirror byte (lsb becomes msb) */&lt;br /&gt;
    pdw[bp] = 0;&lt;br /&gt;
    for(i=0; i&amp;lt;8; i++)&lt;br /&gt;
    {&lt;br /&gt;
	if(c &amp;amp; (1&amp;lt;&amp;lt;i))&lt;br /&gt;
	{&lt;br /&gt;
        pdw[bp] = pdw[bp] | (0x80&amp;gt;&amp;gt;i);&lt;br /&gt;
	}&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    bp++;&lt;br /&gt;
    bcnt++;&lt;br /&gt;
    if(feof(cf))&lt;br /&gt;
    {&lt;br /&gt;
      printf(&amp;quot;End of file: bp=%d bcnt=%d\n&amp;quot;,bp,bcnt);&lt;br /&gt;
      finish = 1;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /* write and verify a page */&lt;br /&gt;
    if((bp == PAGE_SIZE) || finish)&lt;br /&gt;
    {&lt;br /&gt;
      write_flash_page1(baseaddr, pdw, pa, user_vme);&lt;br /&gt;
      read_flash_page1(baseaddr, pdr, pa, user_vme);&lt;br /&gt;
      for(i=0; i&amp;lt;PAGE_SIZE; i++)&lt;br /&gt;
      {&lt;br /&gt;
        if(pdr[i] != pdw[i])&lt;br /&gt;
        {&lt;br /&gt;
          printf(&amp;quot;[%3d] written 0x%02x, read back 0x%02x&amp;quot;,i,pdw[i],pdr[i]);&lt;br /&gt;
          printf(&amp;quot; -&amp;gt; Flash writing failure (byte %d of page %d)!\n&amp;quot;,i,pa);&lt;br /&gt;
          printf(&amp;quot;\nFirmware not loaded !\n&amp;quot;);&lt;br /&gt;
          exit(0);&lt;br /&gt;
        }&lt;br /&gt;
	  }&lt;br /&gt;
      bp=0;&lt;br /&gt;
      pa++;&lt;br /&gt;
    }&lt;br /&gt;
  } /* end of while loop */&lt;br /&gt;
&lt;br /&gt;
  fclose(cf);&lt;br /&gt;
  printf(&amp;quot;\nFirmware loaded successfully. Written %d bytes\n&amp;quot;, bcnt);&lt;br /&gt;
//  printf(&amp;quot;Write 1 at address 0x8016 to reload updated version of the User FPGA\n&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
  printf(&amp;quot;\n&amp;quot;);&lt;br /&gt;
  v1495reload(baseaddr);&lt;br /&gt;
&lt;br /&gt;
  return(0);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//&amp;lt;---------- Old v1495ReadoutCtrl.c&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
void&lt;br /&gt;
v1495CRCCalc(void)&lt;br /&gt;
{&lt;br /&gt;
	int i, nShorts = 12, nShifts = 16;&lt;br /&gt;
&lt;br /&gt;
	USHORT Message[12] = { 0xABFF, 0xC100, 0xE6EC, 0x0000, 0x0000, 0x0000, 0x0000,&lt;br /&gt;
				0x0000, 0x0000, 0x0000, 0x0000, 0x0000 };&lt;br /&gt;
&lt;br /&gt;
	USHORT result, Poly = 0x8811, CRC = 0x291A;&lt;br /&gt;
&lt;br /&gt;
	result = CRC;&lt;br /&gt;
	for(i=0;i&amp;lt;nShorts;i++)&lt;br /&gt;
	{&lt;br /&gt;
		for(j=0;j&amp;lt;nShifts;j++)&lt;br /&gt;
		{&lt;br /&gt;
			result = (Poly|result)^(Message[i]&amp;lt;&amp;lt;j);		&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(result == CRC)&lt;br /&gt;
		printf(&amp;quot;Your checksum matches\n&amp;quot;);&lt;br /&gt;
	else&lt;br /&gt;
		printf(&amp;quot;Your checksum does not match\n&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
	return;&lt;br /&gt;
}&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
void&lt;br /&gt;
v1495ResetPractice(void)&lt;br /&gt;
{&lt;br /&gt;
	int i;&lt;br /&gt;
&lt;br /&gt;
	for(i=0;i&amp;lt;14*NUM_VFATS;i++)&lt;br /&gt;
		practiceArray[i] = i;&lt;br /&gt;
&lt;br /&gt;
	return;&lt;br /&gt;
}&lt;br /&gt;
*/&lt;br /&gt;
/*&lt;br /&gt;
void&lt;br /&gt;
v1495ReadOutPractice(void)&lt;br /&gt;
{&lt;br /&gt;
	int i, j;&lt;br /&gt;
&lt;br /&gt;
	printf(&amp;quot;practiceArray addr: 0x%04X \n&amp;quot;,practiceArray);&lt;br /&gt;
&lt;br /&gt;
	for(i=0;i&amp;lt;NUM_VFATS;i++)&lt;br /&gt;
	{&lt;br /&gt;
		for(j=0;j&amp;lt;4;j++)&lt;br /&gt;
				printf(&amp;quot;%08X &amp;quot;, practiceArray[14*i+j]);&lt;br /&gt;
&lt;br /&gt;
		printf(&amp;quot;\n&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
		for(j;j&amp;lt;8;j++)&lt;br /&gt;
				printf(&amp;quot;%08X &amp;quot;, practiceArray[14*i+j]);&lt;br /&gt;
&lt;br /&gt;
		printf(&amp;quot;\n&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
		for(j;j&amp;lt;14;j++)&lt;br /&gt;
			printf(&amp;quot;%08X &amp;quot;, practiceArray[14*i+j]);&lt;br /&gt;
&lt;br /&gt;
		printf(&amp;quot;\n\n&amp;quot;);&lt;br /&gt;
	}&lt;br /&gt;
	return;&lt;br /&gt;
}&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
void&lt;br /&gt;
v1495Release(void)&lt;br /&gt;
{&lt;br /&gt;
	v1495 = NULL;&lt;br /&gt;
&lt;br /&gt;
	return;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int&lt;br /&gt;
v1495DataReady(void)&lt;br /&gt;
{&lt;br /&gt;
	int i, FIFOBigSize = 0, EventBigSize = 0;&lt;br /&gt;
&lt;br /&gt;
	if(v1495 == NULL) {&lt;br /&gt;
    		printf(&amp;quot;v1495Sprint: ERROR : v1495 not initialized \n&amp;quot;);&lt;br /&gt;
    		return(-1);&lt;br /&gt;
  	}&lt;br /&gt;
&lt;br /&gt;
	for(i=0;i&amp;lt;NUM_VFATS;i++)&lt;br /&gt;
		if(FIFOBigSize &amp;lt; (v1495-&amp;gt;FIFOLength[i])&amp;amp; 0x3F)&lt;br /&gt;
			FIFOBigSize = v1495-&amp;gt;FIFOLength[i]&amp;amp;0x3F;&lt;br /&gt;
/*&lt;br /&gt;
	for(i=0;i&amp;lt;6;i++)&lt;br /&gt;
		if(v1495-&amp;gt;EventsSentH[i] || EventBigSize &amp;lt; v1495-&amp;gt;EventsSentL[i])&lt;br /&gt;
			EventBigSize = v1495-&amp;gt;EventsSentL[i];&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
	if(FIFOBigSize != EventBigSize)&lt;br /&gt;
	{&lt;br /&gt;
		printf(&amp;quot;v1495DataReady: Error: Number of words in sizeFIFO does not equal EventSize.\n&amp;quot;);&lt;br /&gt;
		return(ERROR);&lt;br /&gt;
	}&lt;br /&gt;
*/&lt;br /&gt;
	return FIFOBigSize;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
STATUS&lt;br /&gt;
v1495Sprint(void) // this function prints out myfav registers&lt;br /&gt;
{&lt;br /&gt;
	&lt;br /&gt;
	int i;&lt;br /&gt;
	unsigned short NumData, NumSize;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	if(v1495 == NULL) {&lt;br /&gt;
    		printf(&amp;quot;v1495Sprint: ERROR : v1495 not initialized \n&amp;quot;);&lt;br /&gt;
    		return(-1);&lt;br /&gt;
  	}&lt;br /&gt;
	&lt;br /&gt;
	for(i=0;i&amp;lt;NUM_VFATS;i++)&lt;br /&gt;
	{&lt;br /&gt;
		NumData = (v1495-&amp;gt;FIFOLength[i]&amp;gt;&amp;gt;6) &amp;amp; FIFO_WORDS_MASK;&lt;br /&gt;
		NumSize = v1495-&amp;gt;FIFOLength[i] &amp;amp; FIFO_WORDS_MASK;&lt;br /&gt;
&lt;br /&gt;
		//printf(&amp;quot;A0_FIFOSIZE Addr: 0x%08x Data: 0x%04x \n&amp;quot;,&amp;amp;(v1495-&amp;gt;FIFOLength[0]),v1495-&amp;gt;FIFOLength[0]);&lt;br /&gt;
		printf(&amp;quot;Number of words in GEM[%i]dataFIFO : %04u, 0x%04X \n&amp;quot;,i,NumData,NumData);	&lt;br /&gt;
		printf(&amp;quot;Number of words in GEM[%i]sizeFIFO : %04u \n&amp;quot;,i,NumSize);&lt;br /&gt;
	&lt;br /&gt;
		printf(&amp;quot;GEM[%i]_EVENTSSENTH Addr: 0x%08x Data: 0x%04x \n&amp;quot;&lt;br /&gt;
			,i,&amp;amp;(v1495-&amp;gt;EventsSentH[i]),v1495-&amp;gt;EventsSentH[i]);&lt;br /&gt;
		printf(&amp;quot;GEM[%i]_EVENTSSENTL Addr: 0x%08x Data: 0x%04x \n&amp;quot;&lt;br /&gt;
			,i,&amp;amp;(v1495-&amp;gt;EventsSentL[i]),v1495-&amp;gt;EventsSentL[i]);&lt;br /&gt;
		printf(&amp;quot;\n&amp;quot;);&lt;br /&gt;
	&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
	printf(&amp;quot;\n&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
	return(OK);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
STATUS&lt;br /&gt;
v1495Reset(void)&lt;br /&gt;
{&lt;br /&gt;
	int i;&lt;br /&gt;
&lt;br /&gt;
	if(v1495 == NULL) {&lt;br /&gt;
    		printf(&amp;quot;v1495Reset: ERROR : v1495 not initialized \n&amp;quot;);&lt;br /&gt;
    		return(-1);&lt;br /&gt;
  	}	&lt;br /&gt;
&lt;br /&gt;
	v1495-&amp;gt;Reset = 0;&lt;br /&gt;
&lt;br /&gt;
	printf(&amp;quot;v1495 module has been reset: \n\n&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	//v1495Sprint();&lt;br /&gt;
&lt;br /&gt;
	/*&lt;br /&gt;
	for(i=0;i&amp;lt;NUM_VFATS;i++) {&lt;br /&gt;
		if(v1495-&amp;gt;EventsSentH[i] &amp;gt; 0 || v1495-&amp;gt;EventsSentL[i] &amp;gt; 0)&lt;br /&gt;
			printf(&amp;quot;GEM[%i] is not present. EventsSentL:0x%04X\n&amp;quot;,i,v1495-&amp;gt;EventsSentL[i]);&lt;br /&gt;
		else if (v1495-&amp;gt;EventsSentL[i] == 0)&lt;br /&gt;
			printf(&amp;quot;GEM[%i] is present. \n&amp;quot;,i);&lt;br /&gt;
		else&lt;br /&gt;
			printf(&amp;quot;v1495Reset: ERROR: GEM[%i] has reported invalid value for .EventsSentL 					\n&amp;quot;,i);	&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	printf(&amp;quot;\n&amp;quot;);&lt;br /&gt;
	*/&lt;br /&gt;
&lt;br /&gt;
	return(OK);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
STATUS &lt;br /&gt;
v1495Init(UINT32 Addr)&lt;br /&gt;
{&lt;br /&gt;
	UINT32 laddr;&lt;br /&gt;
	USHORT  boardID = 0;&lt;br /&gt;
	UCHAR BIDH, BIDL;&lt;br /&gt;
	int res, rdata; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	/* A32 Addressing */&lt;br /&gt;
&lt;br /&gt;
#ifdef VXWORKS68K51&lt;br /&gt;
	printf(&amp;quot;v1495Init: ERROR: 68K Based CPU cannot support A32 addressing (use A24)\n&amp;quot;);&lt;br /&gt;
    	return(ERROR);&lt;br /&gt;
#endif&lt;br /&gt;
&lt;br /&gt;
    	/* get the v1495 address */&lt;br /&gt;
	res = sysBusToLocalAdrs(0x09,(char *)Addr,(char **)&amp;amp;laddr);&lt;br /&gt;
    	if (res != 0) {&lt;br /&gt;
		printf(&amp;quot;v1495Init: ERROR in sysBusToLocalAdrs(0x09,0x%x,&amp;amp;laddr) \n&amp;quot;,Addr);&lt;br /&gt;
	return(ERROR);&lt;br /&gt;
    	}&lt;br /&gt;
    	//cv1495MemOffset = laddr - addr;&lt;br /&gt;
	v1495 = (V1495ReadoutCtrlRegs *) laddr;&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
      	/* Check if Board exists at that address */&lt;br /&gt;
    	res = vxMemProbe((char *) v1495,0,2,(char *)&amp;amp;rdata);&lt;br /&gt;
    	if(res &amp;lt; 0) {	&lt;br /&gt;
		printf(&amp;quot;c1495Init: ERROR: No addressable board at addr=0x%x\n&amp;quot;,(UINT32) v1495);&lt;br /&gt;
		v1495 = NULL;&lt;br /&gt;
		return(ERROR);&lt;br /&gt;
	} else {&lt;br /&gt;
      	/* Check if this is a Model v1495 */&lt;br /&gt;
      		BIDH = *((UCHAR *)v1495 + BOARD_ID_OFFSET_H);&lt;br /&gt;
		BIDL = *((UCHAR *)v1495 + BOARD_ID_OFFSET_L);&lt;br /&gt;
	      	boardID = BIDH&amp;lt;&amp;lt;8 | BIDL;&lt;br /&gt;
	      	if(boardID != V1495_BOARD_ID) {&lt;br /&gt;
			printf(&amp;quot; ERROR: Board ID 0x%X does not match 0x%04X \n&amp;quot;,V1495_BOARD_ID, boardID);&lt;br /&gt;
			printf(&amp;quot; BIDH: 0x%X ; BIDL: 0x%X \n&amp;quot;,BIDH, BIDL);&lt;br /&gt;
			return(ERROR);&lt;br /&gt;
	      	}&lt;br /&gt;
	}    	&lt;br /&gt;
    	&lt;br /&gt;
	printf(&amp;quot;v1495Init: v1495 Module has been successfully initialized.\n\n&amp;quot;,BIDH, BIDL);&lt;br /&gt;
&lt;br /&gt;
	/* Disable/Clear v1495 */&lt;br /&gt;
	v1495Reset();&lt;br /&gt;
		&lt;br /&gt;
	return(OK);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// takes in one Hex word and converts it to four Hex words representing binary&lt;br /&gt;
void &lt;br /&gt;
v1495HextoBin(USHORT LastCapture, USHORT * HextoBin)&lt;br /&gt;
{&lt;br /&gt;
	USHORT i, j, shift, temp[4] = {0x11,0x10,0x01,0x00};&lt;br /&gt;
&lt;br /&gt;
//	printf(&amp;quot;\nReceived 0x%04X : \n&amp;quot;, LastCapture);&lt;br /&gt;
&lt;br /&gt;
	for(i=0;i&amp;lt;4;i++) {&lt;br /&gt;
		shift = i&amp;lt;&amp;lt;2; &lt;br /&gt;
		temp[i] = (LastCapture &amp;amp; (0xF000 &amp;gt;&amp;gt; (shift))) &amp;gt;&amp;gt; (12-shift);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	for(i=0;i&amp;lt;4;i++) 	{&lt;br /&gt;
		for(j=0;j&amp;lt;4;j++)&lt;br /&gt;
			temp[i] |= (temp[i]&amp;amp;(0x1&amp;lt;&amp;lt;(3-j)))&amp;lt;&amp;lt;(3*(3-j));&lt;br /&gt;
		temp[i] &amp;amp;= 0xFFF1;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	for(i=0;i&amp;lt;4;i++)&lt;br /&gt;
		HextoBin[i] = temp[i];&lt;br /&gt;
&lt;br /&gt;
	return;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
int&lt;br /&gt;
v1495ReadEvent(void)&lt;br /&gt;
{&lt;br /&gt;
	int i, j, k, m, nWords = NUM_WORDS*NUM_VFATS; &lt;br /&gt;
	UINT32 fifo_len[NUM_VFATS], dCnt;&lt;br /&gt;
	unsigned short NumData = 0, ChannelsNum[2];&lt;br /&gt;
	UCHAR HeaderOK = 1, Header[3] = {0xA, 0xC, 0xE};&lt;br /&gt;
	USHORT HextoBin[4] = {0x0000, 0x0001, 0x0010, 0x0011};&lt;br /&gt;
	//volatile unsigned short * p;&lt;br /&gt;
	//UINT32 Addr = 0x80110000;&lt;br /&gt;
	&lt;br /&gt;
	if(v1495 == NULL) {&lt;br /&gt;
    		printf(&amp;quot;v1495ReadEvent: ERROR : v1495 not initialized \n&amp;quot;);&lt;br /&gt;
    		return(ERROR);&lt;br /&gt;
  	}&lt;br /&gt;
	&lt;br /&gt;
	// Check to see if there are any words stored in any of the dataFIFOs&lt;br /&gt;
	for(i=0;i&amp;lt;NUM_VFATS;i++)&lt;br /&gt;
	{&lt;br /&gt;
		fifo_len[i] = (v1495-&amp;gt;FIFOLength[i]&amp;gt;&amp;gt;6) &amp;amp; FIFO_WORDS_MASK;&lt;br /&gt;
		NumData |= fifo_len[i];&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	if(NumData)&lt;br /&gt;
	{&lt;br /&gt;
		&lt;br /&gt;
		for(i=0;i&amp;lt;NUM_VFATS;i++) // Initialize v1495Channels members to 0.&lt;br /&gt;
		{&lt;br /&gt;
			v1495Channels[i].TotalBytes = 0;&lt;br /&gt;
			v1495Channels[i].TotalFrames = 0;&lt;br /&gt;
			v1495Channels[i].DeltaBytes = 0;&lt;br /&gt;
			v1495Channels[i].DeltaFrames = 0;&lt;br /&gt;
			v1495Channels[i].LastSize = 0;&lt;br /&gt;
			v1495Channels[i].LengthSizeFIFO = 0;&lt;br /&gt;
			v1495Channels[i].LengthDataFIFO = 0;&lt;br /&gt;
			v1495Channels[i].Sent = 0;&lt;br /&gt;
			for(j=0;j&amp;lt;12;j++)&lt;br /&gt;
				v1495Channels[i].LastCapture[j] = 0;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		for(i=0;i&amp;lt;NUM_VFATS;i++)&lt;br /&gt;
		{&lt;br /&gt;
			&lt;br /&gt;
			if(!v1495Channels[i].LengthDataFIFO)&lt;br /&gt;
			{&lt;br /&gt;
				v1495Channels[i].LengthSizeFIFO = v1495-&amp;gt;FIFOLength[i] &amp;amp; FIFO_WORDS_MASK;&lt;br /&gt;
				v1495Channels[i].LengthDataFIFO = fifo_len[i];&lt;br /&gt;
			}&lt;br /&gt;
			if(v1495Channels[i].LengthDataFIFO)&lt;br /&gt;
			{&lt;br /&gt;
				v1495Channels[i].Sent =&lt;br /&gt;
					( v1495-&amp;gt;EventsSentH[i]&amp;lt;&amp;lt;16 )| v1495-&amp;gt;EventsSentL[i];&lt;br /&gt;
				v1495Channels[i].LengthDataFIFO--;&lt;br /&gt;
				v1495Channels[i].DeltaFrames++;&lt;br /&gt;
				v1495Channels[i].TotalFrames++;&lt;br /&gt;
				v1495Channels[i].LastSize = v1495-&amp;gt;EventSize[i] &amp;amp; EVENT_SIZE_MASK;&lt;br /&gt;
&lt;br /&gt;
			&lt;br /&gt;
		   for(j=0; j&amp;lt;v1495Channels[i].LastSize; j++) {&lt;br /&gt;
			v1495Channels[i].LastCapture[j] = v1495-&amp;gt;EventData[i][0];&lt;br /&gt;
			if(j==2) {&lt;br /&gt;
				if((v1495Channels[i].LastCapture[j]&amp;amp;0xF000) == 0xE000)	&lt;br /&gt;
					v1495Channels[i].LastCapture[j] = (v1495Channels[i].LastCapture[j] &amp;amp; 0x0FFF) | ((USHORT)i&amp;lt;&amp;lt;12);&lt;br /&gt;
				else {&lt;br /&gt;
					printf(&amp;quot;v1495ReadEvent: Error: header for word 3 from data packet != 0xE\n&amp;quot;);&lt;br /&gt;
					return(ERROR);&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		   }&lt;br /&gt;
	&lt;br /&gt;
		   v1495Channels[i].DeltaBytes += 2 * v1495Channels[i].LastSize;&lt;br /&gt;
		   v1495Channels[i].TotalBytes += 2 * v1495Channels[i].LastSize;&lt;br /&gt;
				&lt;br /&gt;
		   //printf(&amp;quot;v1495ReadEvent: Data entered into v1495Channel[%i]\n&amp;quot;,i);&lt;br /&gt;
		   &lt;br /&gt;
/*		   for(j=3; j&amp;lt;11; j=j+2) {&lt;br /&gt;
			ChannelsNum[0] = (((j&amp;gt;&amp;gt;1)-1)&amp;lt;&amp;lt;5)+1;&lt;br /&gt;
			ChannelsNum[1] =  (j&amp;gt;&amp;gt;1)&amp;lt;&amp;lt;5;&lt;br /&gt;
			printf(&amp;quot;Channels %d -&amp;gt; %d: &amp;quot;,ChannelsNum[0], ChannelsNum[1]);&lt;br /&gt;
			for(k=0;k&amp;lt;2;k++) {&lt;br /&gt;
				v1495HextoBin(v1495Channels[i].LastCapture[j+k],HextoBin);&lt;br /&gt;
				for(m=0;m&amp;lt;4;m++)&lt;br /&gt;
					printf(&amp;quot;%04X &amp;quot;,HextoBin[m]);		&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			printf(&amp;quot;\n&amp;quot;);&lt;br /&gt;
		   }&lt;br /&gt;
*/&lt;br /&gt;
		}&lt;br /&gt;
	   }&lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
	else&lt;br /&gt;
	{&lt;br /&gt;
		printf(&amp;quot;v1495ReadEvent: dataFIFO is empty\n&amp;quot;);&lt;br /&gt;
		nWords = 0;&lt;br /&gt;
	}	&lt;br /&gt;
	return(nWords);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int&lt;br /&gt;
v1495FillData(UINT32 * data)&lt;br /&gt;
{&lt;br /&gt;
	int i, nWords = 0;	&lt;br /&gt;
&lt;br /&gt;
//	printf(&amp;quot;Data addr: 0x%08X\n&amp;quot;, data);&lt;br /&gt;
&lt;br /&gt;
	if(data == NULL) {&lt;br /&gt;
    		printf(&amp;quot;v1495FillData: ERROR : data not initialized \n&amp;quot;);&lt;br /&gt;
    		return(-1);&lt;br /&gt;
  	}&lt;br /&gt;
&lt;br /&gt;
	nWords = v1495ReadEvent();&lt;br /&gt;
&lt;br /&gt;
	//printf(&amp;quot;v1495ReadEvent: filling %d words into data[0x%Xkk]\n&amp;quot;,nWords,data);	&lt;br /&gt;
	for(i=0; i&amp;lt; nWords; i++)&lt;br /&gt;
	{&lt;br /&gt;
	   data[i] = *((UINT32 *)(v1495Channels) + i);		&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
//	if(nWords)&lt;br /&gt;
//		printf(&amp;quot;v1495ReadEvent: %d words copied into data[]\n&amp;quot;,nWords);	&lt;br /&gt;
	&lt;br /&gt;
	return nWords;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void v1495StatusPrint(void)//UINT32 * buf)&lt;br /&gt;
{&lt;br /&gt;
	unsigned int i, j, sent, ChipID[NUM_VFATS], EventID[NUM_VFATS];&lt;br /&gt;
	//UINT32 Addr = 0x80110000;&lt;br /&gt;
	//volatile V1495ReadoutCtrlRegs * pV1495ReadoutCtrl = (V1495ReadoutCtrlRegs *) Addr;&lt;br /&gt;
&lt;br /&gt;
	//v1495Channels = (V1495ReadoutStatus *)buf;&lt;br /&gt;
&lt;br /&gt;
	for(i=0; i&amp;lt;NUM_VFATS; i++)&lt;br /&gt;
	{&lt;br /&gt;
		&lt;br /&gt;
		printf(&amp;quot;V1495[%d]: #B[%u] #F[%u/%u] B/s[%u] F/s[%u]\n&amp;quot;, // LstEvtCnt[%u] LstWrdCnt[%u]\n&amp;quot;,&lt;br /&gt;
			i, v1495Channels[i].TotalBytes, v1495Channels[i].TotalFrames, v1495Channels[i].Sent, 				v1495Channels[i].DeltaBytes, v1495Channels[i].DeltaFrames);//, 					//v1495Channels[i].LastEventCount, v1495Channels[i].LastWordCount);&lt;br /&gt;
		&lt;br /&gt;
		&lt;br /&gt;
		v1495Channels[i].DeltaBytes = 0;&lt;br /&gt;
		v1495Channels[i].DeltaFrames = 0;&lt;br /&gt;
&lt;br /&gt;
		printf(&amp;quot;  LastCap[%u]: &amp;quot;, v1495Channels[i].LastSize);&lt;br /&gt;
		for(j = 0; j &amp;lt; v1495Channels[i].LastSize; j++)&lt;br /&gt;
			printf(&amp;quot;%04X &amp;quot;, v1495Channels[i].LastCapture[j]);&lt;br /&gt;
		printf(&amp;quot;\n&amp;quot;);&lt;br /&gt;
		if(v1495Channels[i].LastSize)&lt;br /&gt;
		{&lt;br /&gt;
			EventID[i] = (v1495Channels[i].LastCapture[1] &amp;amp; 0x0FF0)&amp;gt;&amp;gt;4;&lt;br /&gt;
			ChipID[i] = v1495Channels[i].LastCapture[2] &amp;amp; 0x0FFF;&lt;br /&gt;
			printf(&amp;quot;Event Count: %d ; Chip ID : 0x%X\n&amp;quot;, EventID[i], ChipID[i]);&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Oborn</name></author>
	</entry>
</feed>