Add shell script to configure ADC via SPI
This commit is contained in:
		
							parent
							
								
									9a9163b7f0
								
							
						
					
					
						commit
						75833de0a3
					
				|  | @ -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 <<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 $? | ||||
| 
 | ||||
|  | @ -24,15 +24,16 @@ case "$1" in | |||
|     cal_save | ||||
|     ;; | ||||
|   *) | ||||
|     script="${0##*/}" | ||||
|     cat <<EOF | ||||
| Usage: $0 {show|save} | ||||
| Usage: $script {show|save} | ||||
| 
 | ||||
| Manage analog channel calibration. | ||||
| 
 | ||||
|   $0 show | ||||
|   $script show | ||||
|     Display calibration. | ||||
| 
 | ||||
|   $0 save | ||||
|   $script save | ||||
|     Copy a changed calibration file to the SD card. | ||||
|     Before running this command, the changed calibration must be written to | ||||
|     ${CONFIG_DIR}/calibration.conf.new. | ||||
|  |  | |||
|  | @ -274,19 +274,20 @@ case "$1" in | |||
|     ipcfg_save | ||||
|     ;; | ||||
|   *) | ||||
|     script="${0##*/}" | ||||
|     cat <<EOF | ||||
| Usage: $0 {init|show|config|save|restart} | ||||
| Usage: $script {init|show|config|save|restart} | ||||
| 
 | ||||
| Manage IP address configuration. | ||||
| 
 | ||||
|   $0 init | ||||
|   $script init | ||||
|     Initialize IP address from saved configuration. | ||||
|     This command is used during boot and should not be invoked manually. | ||||
| 
 | ||||
|   $0 show | ||||
|   $script show | ||||
|     Display active and saved IP address configuration. | ||||
| 
 | ||||
|   $0 config {options} | ||||
|   $script config {options} | ||||
|     Change active IP address configuration. | ||||
|     The new configuration is not written to the SD card. | ||||
| 
 | ||||
|  | @ -297,7 +298,7 @@ Manage IP address configuration. | |||
|       --netmask n.n.n.n     Specify netmask. | ||||
|       --gateway n.n.n.n     Specify gateway address, or "" to disable gateway. | ||||
| 
 | ||||
|   $0 save {options} | ||||
|   $script save {options} | ||||
|     Change the saved IP address configuration on the SD card. | ||||
|     Options are the same as for command 'config'. | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue