151 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
			
		
		
	
	
			151 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
| #!/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 <<EOF
 | |
| Usage: $script {init|format}
 | |
| 
 | |
|   $script init {options}
 | |
|     Reset ADCs and initialize timing and output mode.
 | |
|     This must NOT be done while the FPGA is active.
 | |
| 
 | |
|     options:
 | |
|       --force               Required option to override warning.
 | |
|       --dcs                 Enable clock duty cycle stabilizer.
 | |
| 
 | |
|   $script format {options}
 | |
|     Configure data format.
 | |
|     By default, disables test patterns and disables output randomizer.
 | |
| 
 | |
|     options:
 | |
|       --testzero            Enable all-zero test pattern.
 | |
|       --testone             Enable all-one test pattern.
 | |
|       --testchecker         Enable checkerboard test pattern.
 | |
|       --testalter           Enable alternating test pattern.
 | |
|       --rand                Enable output randomizer mode.
 | |
| 
 | |
| EOF
 | |
|     exit 1
 | |
|     ;;
 | |
| esac
 | |
| 
 | |
| exit $?
 | |
| 
 |