import mpsse
import usbio
+from usbio import int2str
-def int2str(value, width):
- if (width % 8) != 0:
- raise Exception, 'width must be multiple of 8'
- v = intbv(value, max=2**width)
- b = [v[i:i-8] for i in range(width, 0, -8)]
- return ''.join(map(chr, b))
spi.Write(v)
spi.Stop()
-spi = AtoiSPI0(1e4)
+spi = AtoiSPI0(100e3)
spi.SetLoopback(0)
+#
+# DAC testing
+#
+if 1:
+ #turn on internal reference always
+ spi.SetCS('dac')
-#turn on internal reference always
-spi.SetCS('dac')
+ int_ref_always_on = intbv(0)[32:]
+ int_ref_always_on[27] = 1
+ int_ref_always_on[24] = 1
+ int_ref_always_on[19] = 1
+ int_ref_always_on[13] = 1
+ w(int2str(int_ref_always_on, 32))
-int_ref_always_on = intbv(0)[32:]
-int_ref_always_on[27] = 1
-int_ref_always_on[24] = 1
-int_ref_always_on[19] = 1
-int_ref_always_on[13] = 1
-w(int2str(int_ref_always_on, 32))
+ all_dacs_on = intbv(0)[32:]
+ all_dacs_on[26] = 1
+ all_dacs_on[8:] = 0xff
+ w(int2str(all_dacs_on, 32))
-all_dacs_on = intbv(0)[32:]
-all_dacs_on[26] = 1
-all_dacs_on[8:] = 0xff
-w(int2str(all_dacs_on, 32))
+ w(dacval(2**15))
+
+
+
+#
+# ADC testing
+#
+if 0:
+ adc = usbio.ADS8201(spi)
+ adc.setRegister(adc.TRIGGER_SCR, 0x02)
+ adc.getRegister(adc.TRIGGER_SCR)
+
+ adc.setRegister(adc.CHAN_SEL, 6)
+ adc.getRegister(adc.CHAN_SEL)
-w(dacval(2**15))
import struct
from myhdl import intbv
+from myhdl import bin as b
return False
+def int2str(value, width):
+ if (width % 8) != 0:
+ raise Exception, 'width must be multiple of 8'
+ v = intbv(value, max=2**width)
+ b = [v[i:i-8] for i in range(width, 0, -8)]
+ return ''.join(map(chr, b))
+
+
class NCO(object):
RST_POS = 14
FCW_WIDTH = 14
self.cs = 'dac'
self._word = intbv(0)[self.CTL_WIDTH:]
- @property
+ def __str__(self):
+ return ''.join(map(chr, self.bytes()))
+
def bytes(self):
"""Return the control data as a byte sequence in MSB..LSB order."""
w = self.word
def send(self):
self.bus.SetCS('dac')
+ self.bus.Start()
+ self.bus.Write(str(self))
+ self.bus.Stop()
+
+
+
+class ADS8201(object):
+ CH01_CCR = 0
+ CH23_CCR = 1
+ CH45_CCR = 2
+ CH67_CCR = 3
+ CHAN_SEL = 4
+ ADC_SCR = 5
+ INT_SCR = 6
+ STATUS_SCR = 7
+ TRIGGER_SCR = 8
+ RESET_SCR = 9
+ DELAY_SCR = 10
+
+ def __init__(self, spibus):
+ self.bus = spibus
+
+ def setRegister(self, address, value):
+ w = intbv(0x8000)[16:]
+ w[14:10] = intbv(address, max=2**4)
+ w[8:] = intbv(value, max=2**8)
+ print b(w, 16)
+ self.bus.SetCS('adc')
+ self.bus.Start()
+ self.bus.Write(int2str(w, 16))
+ self.bus.Stop()
+
+ def getRegister(self, address):
+ w = intbv(0x4000)[16:]
+ w[14:10] = intbv(address, max=2**4)
+ print b(w, 16)
+ self.bus.SetCS('adc')
+ self.bus.Start()
+ rval = self.bus.Exchange(int2str(w, 16))
+ self.bus.Stop()
+ i = 0
+ r = 0
+ for c in rval:
+ r += ord(c) << i
+ i += 8
+ return r
+
+ def read(self):
+ w = intbv(0x0000)[16:]
+ self.bus.SetCS('adc')
+ self.bus.Start()
+ rval = self.bus.Exchange(int2str(w, 16))
+ self.bus.Stop()
+ i = 0
+ r = 0
+ for c in rval:
+ r += ord(c) << i
+ i += 8
+ return r
+
+
+
class I2C(object):
def write(self, data):
"""Send i2c command data to slave."""