#!/bin/sh # # Configure LTC2145 ADC via SPI. # # This only works on a 4-input Red Pitaya. # # Run spi-pipe with the correct parameters. run_spi_pipe() { spi-pipe -d "$1" -m 0 -s 1000000 -l 0 -B 8 -b 2 -n 1 >/dev/null } # Initialize both ADCs. adc_init() { force= dcs=0 shift while [ -n "$1" ]; do case "$1" in --force) force=1 ;; --dcs) dcs=1 ;; *) echo "ERROR: Unknown option '$1'" >&2 exit 1 esac shift done if [ -z "$force" ]; then echo "ERROR: Not initializing ADC without --force option." >&2 exit 1 fi for spidev in /dev/spidev0.0 /dev/spidev0.1 ; do echo "Initializing ADC via $spidev" # Reset register (address = 0x00) # # bit 7 = RESET # printf '\000\200' | run_spi_pipe $spidev # Timing register (address = 0x02) # # bit 0 = DCS # bits 2:1 = CLKPHASE # bit 3 = CLKINV # printf '\002\20'"$dcs" | run_spi_pipe $spidev # Output mode register (address = 0x03) # # bits 1:0 = OUTMODE (2 = double data rate CMOS output mode) # bit 2 = OUTOFF # bit 3 = TERMON # bits 6:4 = ILVDS # printf '\003\002' | run_spi_pipe $spidev done } # Write data format register. adc_format() { # Data format register (address = 0x04) # # bit 0 = TWOSCOMP # bit 1 = RAND # bit 2 = ABP # bits 5:3 = OUTTEST d1=0 # octal digit 1 = OUTTEST d0=0 # octal digit 0 = RAND*2 shift while [ -n "$1" ]; do case "$1" in --testzero) d1=1 ;; --testone) d1=3 ;; --testchecker) d1=5 ;; --testalter) d1=7 ;; --rand) d0=2 ;; *) echo "ERROR: Unknown option '$1'" >&2 exit 1 esac shift done for spidev in /dev/spidev0.0 /dev/spidev0.1 ; do printf '\004\0'"${d1}${d0}" | run_spi_pipe $spidev done } case "$1" in init) adc_init "$@" ;; format) adc_format "$@" ;; *) script="${0##*/}" cat <