Esempio n. 1
0
class bitbang_spi:
   def __init__(self, spi_cs, spi_mosi, spi_miso, spi_clk, rising_data = True, latch = None, enable_low = True):
        self.gpio = GPIO()

        self.rising_data = rising_data
        self.enable_low = enable_low 

        self.spi_cs = spi_cs
        self.spi_mosi = spi_mosi
        self.spi_miso = spi_miso
        self.spi_clk = spi_clk
        self.latch = latch

        self.gpio.set_output(spi_cs)
        self.gpio.set_output(spi_mosi)
        self.gpio.set_output(spi_clk)
        
        if self.spi_miso != None:
            self.gpio.set_input(spi_miso)
        if self.latch != None:
            self.gpio.set_output(latch)

        self.gpio.set_value(spi_cs, self.enable_low)

   def transfer(self, payload, bits = 8):
        self.gpio.set_value(self.spi_cs, not self.enable_low)
        self.gpio.set_value(self.spi_clk, self.gpio.LOW)
        if self.latch != None:
            self.gpio.set_value(self.latch, self.gpio.LOW)

        response = 0
        for i in range(bits):
            response = response << 1
            # data clocked in on clock rising edge
            self.gpio.set_value(self.spi_mosi, (payload >> (bits - (i + 1))) & 0x01)
            self.gpio.set_value(self.spi_clk, self.gpio.HIGH)

            if self.spi_miso != None:
                response |= self.gpio.read_value(self.spi_miso)

            if self.latch!= None and i == bits - 1:
                self.gpio.set_value(self.latch, self.gpio.HIGH)
           
            self.gpio.set_value(self.spi_clk, self.gpio.LOW)

        if self.latch != None:
            self.gpio.set_value(self.latch, self.gpio.LOW)

        self.gpio.set_value(self.spi_cs, self.enable_low)


        return response
Esempio n. 2
0
class bitbang_spi:
   def __init__(self, spi_cs, spi_mosi, spi_miso, spi_clk):
        self.gpio = GPIO()

        self.spi_cs = spi_cs
        self.spi_mosi = spi_mosi
        self.spi_miso = spi_miso
        self.spi_clk = spi_clk

        self.gpio.set_output(spi_cs)
        self.gpio.set_output(spi_mosi)
        self.gpio.set_output(spi_clk)
        
        if self.spi_miso != None:
            self.gpio.set_input(spi_miso)
        
        self.gpio.set_value(spi_cs, self.gpio.HIGH)

   def transfer(self, payload, bits = 8):
        self.gpio.set_value(self.spi_cs, self.gpio.LOW)
        self.gpio.set_value(self.spi_clk, self.gpio.LOW)

        response = 0
        for i in range(bits):
            response = response << 1
            # data clocked in on clock rising edge
            self.gpio.set_value(self.spi_mosi, (payload >> (bits - (i + 1))) & 0x01)
            self.gpio.set_value(self.spi_clk, self.gpio.HIGH)

            if self.spi_miso != None:
                response |= self.gpio.read_value(self.spi_miso)

            self.gpio.set_value(self.spi_clk, self.gpio.LOW)

        self.gpio.set_value(self.spi_cs, self.gpio.HIGH)

        return response
Esempio n. 3
0
        self.spi.transfer(command, bits = 11)

    def set_b(self, value):
        command = (((value & 0x1FF)) << 2) + 1
        command = self._revbits(command) 
        self.spi.transfer(command, bits = 11)


if __name__ == '__main__':
    gpio = GPIO()

    gpio.set_output(TRIG_SEL0)
    gpio.set_output(TRIG_SEL1)
    gpio.set_output(REF_SEL)

    gpio.set_input(COMP_OUT)
    gpio.set_input(REFCLK)

    delay = Delay(gpio)
    dac = Dac(gpio)
   
    NDELAYS = 1 << 9
    NDACS = 1 << 12
    
    BRUTE_FORCE_TRIG = False

    # trigger sources:
    # 0 - clk (delayed)
    # 1 - unused
    # 2 - analog trigger
    # 3 - external pulse