import spidev
import RPi.GPIO as GPIO
import time
import numpy as np
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
def StartUp():
GPIO.setmode(GPIO.BCM)
PRESET = 25
IO4 = 26
GPIO.setup(PRESET,GPIO.OUT)
GPIO.setup(IO4,GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
print "Reset 25 - Low 1s"
GPIO.output(PRESET,GPIO.LOW)
time.sleep(3)
print "Reset 25 - High 0.2s"
GPIO.output(PRESET,GPIO.HIGH)
time.sleep(0.2)
spi = spidev.SpiDev()
spi.open(0,1)
spi.mode = 0b01
print "spi.cshigh is " + str(spi.cshigh)
print "spi mode is " + str(spi.mode)
spi.max_speed_hz = 2000000
print "spi maxspeed is "+str(spi.max_speed_hz)+"hz"
return spi
def TestSPI(spi,ncycles):
i = 0
while i < ncycles:
WriteFPGA(spi,0xEB,0x01)
time.sleep(0.5)
WriteFPGA(spi,0xEB,0x00)
time.sleep(0.5)
i = i+1
def LoopSPI(spi):
while 1:
WriteFPGA(spi,0xEB,0x01)
WriteFPGA(spi,0xEB,0x00)
def LoopAcq(spi):
while 1:
WriteFPGA(spi,0xEB,0x00)
WriteFPGA(spi,0xEF,0x01)
WriteFPGA(spi,0xEA,0x01)
time.sleep(0.1)
def ClearMem(spi):
WriteFPGA(spi,0xEF,0x01)
def ConfigSPI(spi):
WriteFPGA(spi,0xE0,0x14)
WriteFPGA(spi,0xE1,0x00)
WriteFPGA(spi,0xE2,0x35)
WriteFPGA(spi,0xE3,0x00)
WriteFPGA(spi,0xE4,0x05)
WriteFPGA(spi,0xE5,0x32)
WriteFPGA(spi,0xE6,0xC8)
WriteFPGA(spi,0xE7,0x00)
WriteFPGA(spi,0xE8,0xC3)
WriteFPGA(spi,0xE9,0x50)
WriteFPGA(spi,0xEB,0x00)
WriteFPGA(spi,0xEC,0x11)
WriteFPGA(spi,0xED,0x03)
WriteFPGA(spi,0xEE,0xA0)
print "Config FPGA done!"
def WriteFPGA(spi,adress,value):
spi.xfer([0xAA] )
spi.xfer([adress] )
spi.xfer([value] )
spi = StartUp()
ConfigSPI(spi)
N = 0
Reset 25 - Low 1s
Reset 25 - High 0.2s
spi.cshigh is False
spi mode is 1
spi maxspeed is 2000000hz
Config FPGA done!
TestSPI(spi,3)
POn = 200
HPon = POn/10
print hex(HPon)
WriteFPGA(spi,0xE0,HPon)
DeltaPP = 100
HPP =DeltaPP/10
print hex(HPP)
WriteFPGA(spi,0xD0,HPP)
sEEPoff = 2000
POff = sEEPoff/10
POffMSB, POffLSB = 0xFF00&POff/0xFF,0x00FF&POff
print "Poff:", hex(POffMSB),hex(POffLSB)
WriteFPGA(spi,0xE1,POffMSB)
WriteFPGA(spi,0xE2,POffLSB)
DeltaAcq = 7000
hDA = DeltaAcq/10
hDAMSB, hDALSB = hDA/255 , 0x00FF&hDA
print "hDA:", hex(hDAMSB),hex(hDALSB)
WriteFPGA(spi,0xE3,hDAMSB)
WriteFPGA(spi,0xE4,hDALSB)
LAcq = 130
LAcqNs = LAcq*1000/10
LAcqMSB, LAcqLSB = LAcqNs/256,0x00FF&LAcqNs
print "Acq:", hex(LAcqMSB),hex(LAcqLSB)
WriteFPGA(spi,0xE5,hDAMSB)
WriteFPGA(spi,0xE6,hDALSB)
lEPeriod = 1000
lEPNs = lEPeriod*1000/10
EPNsMSB, EPNs, EPNsLSB = 0x00FF&lEPNs/(256*256),0x00FF&lEPNs/256,0x0000FF&lEPNs
print "Period:", hex(EPNsMSB),hex(EPNs),hex(EPNsLSB)
WriteFPGA(spi,0xE7,EPNsMSB)
WriteFPGA(spi,0xE8,EPNs)
WriteFPGA(spi,0xE9,EPNsLSB)
NAcTrig = 10
WriteFPGA(spi,0xEE,NAcTrig)
0x14
0xa
Poff: 0x0 0xc8
hDA: 0x2 0xbc
Acq: 0x32 0xc8
Period: 0x1 0x86 0xa0
f = 0x01
LAcq = 130
WriteFPGA(spi,0xED,f)
VGA = 0x44
NAcTrig = 200
WriteFPGA(spi,0xEC,VGA)
WriteFPGA(spi,0xEB,0x01)
WriteFPGA(spi,0xEE,NAcTrig)
WriteFPGA(spi,0xEF,0x01)
WriteFPGA(spi,0xEA,0x01)
time.sleep(0.2)
Fech = int(64/((1+f)))
print Fech
Nacq = LAcq * Fech * NAcTrig
print "-> "+str(Nacq) + ' samples'
10
-> 260000 samples
LAcq * Fech
1300
spi.max_speed_hz = 9000000
A = []
limit = 2*Nacq-10
x = 20000
print limit
print limit/x
for i in range(limit):
A.append ( spi.xfer([0x00] )[0] )
if not(i%x):
print len(A)/x
a = np.asarray(A).astype(int)
print 'acq done'
np.savetxt( "FI-"+str(NAcTrig)+"-"+str(N)+"-VGA@"+str(hex(VGA))+"-spimode"+str(spi.mode)+"-"+str(Fech)+"msps.csv", a.astype(int), fmt='%i', delimiter=";")
N = N+1
519990
25
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
acq done
519990/2
259995
spi.close()
f = 0x02
WriteFPGA(spi,0xED,f)
VGA = 0x22
WriteFPGA(spi,0xEC,VGA)
WriteFPGA(spi,0xEB,0x00)
WriteFPGA(spi,0xEF,0x01)
WriteFPGA(spi,0xEA,0x01)
time.sleep(0.2)
Fech = int(64/((1+f)))
print Fech
Nacq = LAcq * Fech
print "-> "+str(Nacq) + ' samples'
21
-> 2730 samples
A = []
for i in range(2*Nacq-10):
A.append ( spi.xfer([0x00] )[0] )
a = np.asarray(A).astype(int)
np.savetxt( "One-"+str(N)+"-VGA@"+str(hex(VGA))+"-spimode"+str(spi.mode)+"-"+str(Fech)+"msps.csv", a, delimiter=";")
N = N+1
LAcq * 64.0/3
2773.3333333333335