diff --git a/sw/buildroot_overlay/opt/puzzlefw/bin/puzzle-adccfg b/sw/buildroot_overlay/opt/puzzlefw/bin/puzzle-adccfg new file mode 100755 index 0000000..7f47b4a --- /dev/null +++ b/sw/buildroot_overlay/opt/puzzlefw/bin/puzzle-adccfg @@ -0,0 +1,150 @@ +#!/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 <