123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463 |
- #!/bin/bash
- PCI=$(which pci)
- NUM_ROWS=1088
- SKIP_ROWS=0
- START_ROW=0
- EXP_TIME=100 #us
- SLEEP_VAL=0.03
- if [ -z "$PCI" ]; then
- echo "pcitool not found."
- exit 1
- fi
- function reset_dma () {
- pci --stop-dma dma0r
- sleep .1
- pci --start-dma dma0r
- sleep .1
- # check that all of the buffers are on the x1000 addresses
- # only 4096B buffers should be 4K alligned
- local VAR=`cat /sys/class/fpga/fpga0/kbuffers | awk '{print $1 $2 $3}'`
- VAR=`printf "%s\n" $VAR | grep 4096 | grep -v 000`
- local i=0
- while [ -n "$VAR" ]; do
- echo $VAR
- i=$(echo $i + 1 | bc)
- num=`cat /sys/class/fpga/fpga0/kbuf* | grep bus | cut -c 16- | grep -v 000 | grep -c [1-9]`
- echo "Buffer addresses not aligned; Redo:" $i " times," $num "buffers unaligned"
- pci --stop-dma dma0r
- sleep .1
- pci --start-dma dma0r
- sleep .05
- VAR=`cat /sys/class/fpga/fpga0/kbuf* | grep bus | cut -c 16- | grep -v 000`
- if [ "$i" -gt 10 ]; then
- echo "ERROR!!! Addresses still not aligned, stopping!"
- break
- fi
- done
- if [ -z "$VAR" ]; then
- echo -e "\e[32mBuf addr aligned\033[1;m"
- else
- echo -e "\e[31mBuf addr UNALIGNED!!!\033[1;m"
- fi
- sleep 0.1
- echo "Enable DMA"
- pci -w 0x4 0x1
- sleep 0.1
- echo "set 4k AXI packet size"
- pci -w 0x9100 0x20001000
- sleep .01
- }
- function reset_logic () {
- pci -w 0x9040 80000005
- sleep .2
- pci -w 0x9040 80000201
- sleep .1
- }
- function reset_cmosis () {
- pci -w 0x9040 80000000
- sleep .3
- pci -w 0x9040 80000201
- sleep .3
- }
- function reset_all () {
- pci -w 0x9040 80000004
- sleep .2
- pci -w 0x9040 80000000
- sleep .3
- pci -w 0x9040 80000201
- sleep .3
- }
- function check_status () {
- status=`pci -r 0x9050 -s 4 | awk '{print $2$3$4}'`
- error=0
- if [ "$status" != "8449ffff0000300100000000" ]; then
- echo -e "\e[31m---------------------->>>> ERROR! in the camera status ...\033[1;m"
- echo $status
- error=1
- fi
- if [ "$error" = "1" ]; then
- echo -e "\e[31mError in the reset and initialization\033[1;m"
- else
- echo -e "\e[32mCamera READY ..................... OK\033[1;m"
- fi
- }
- function read_9010 () {
- local val=$1
- value=`pci -r 0x9010 -s 1 | grep 9010 | awk '{print $2}' | cut -c 4-8`
- if [ "$value" != "b$val" ]; then
- echo -e "\e[31m----------------->>>> ERROR! read value: $value, written value: $val\033[1;m"
- error=1
- fi
- sleep $SLEEP_VAL
- }
- function write_val () {
- local val=$1
- pci -w 0x9000 $val
- sleep $SLEEP_VAL
- read_9010 $val
- }
- function set_exp_time () {
- exp_time=$1 # in us
- echo -e "Write exp time...... \e[93m$exp_time\033[1;m us"
- value=`pci -r 9030 | awk '{print $2}' | cut -c 7-7`
- if [ "$value" == "0" ]; then
- clk_per=0.025 # in us
- else
- clk_per=0.02083 # in us
- fi
- #read reg73
- val=4900
- pci -w 9000 $val
- sleep .01
- reg73=`pci -r 9010 | awk '{print $2}' | cut -c 7-8`
- reg73=$((16#$reg73))
- exp_time=$(echo "scale=2;$exp_time/(129*$clk_per)-0.43*$reg73"| bc)
- #round
- exp_time=$(echo "$exp_time" | awk '{printf("%d\n",$1 + 0.5)}')
- #need 6 chars to write in 3 CMOSIS regs
- exp_time=$(printf "%06x\n" $exp_time)
- val=aa${exp_time:4:2}
- write_val $val
- val=ab${exp_time:2:2}
- write_val $val
- val=ac${exp_time:0:2}
- write_val $val
- }
- function configure_cmosis () {
- echo "Start CMOSIS Configuration .."
- #first reg read
- val=0100
- pci -w 9000 $val
- sleep .01
- local TST=`pci -r 9010`
- sleep .01
- # register 82, ch_en[17:16], set to 7
- write_val d207
- # PLL SET
- # register 117 -set to 1
- echo "set 117"
- write_val f501
- # register 115, set to 1
- echo "set 115"
- write_val f301
- # register 111, bit mode, 1-10bits per pixel 0-12bits-per pixel
- write_val ef00
- # ADC_resolution @ 10/12 bits
- ## register 112, ADC resolution, 0-10bit per pixel, 1-11bit per pixel, 2-12bit per pixel
- if [ "$MODE12b" ]; then
- echo -e "\e[93m12\033[1;m bit mode, set ADC resolution \e[93m12\033[1;m bits "
- write_val f002
- else
- echo -e "\e[93m10\033[1;m bit mode, set ADC resolution \e[93m10\033[1;m bits "
- write_val f000
- fi
- # adc recommended 28=44
- # register 103, ADC gain
- echo "set gain"
- write_val e72c
- ## register 102, PGA, 3 is max value,
- echo "set PGA"
- write_val e603
- # register 84, set to 4
- echo "set reg 84"
- write_val d404
- # register 85, set to 1
- echo "set reg 85"
- write_val d501
- # recommended is d840
- # register 88, set to 64 dec
- echo "set reg 88"
- write_val d840
- # recommended is db40
- # register 91, set to 64
- echo "set reg 91"
- write_val db40
- # register 94, set to 101
- echo "set reg 94"
- write_val de65
- # register 95, set to 106
- echo "set reg 95"
- write_val df6a
- # VRAMP 6c is 108
- # register 98, 109 default, now: 108
- echo "set VRAMP"
- write_val e26c
- # VRAMP 6c is 108
- # register 99, same value as 98
- echo "set VRAMP 2"
- write_val e36c
- ### NUMBER OF OUTPUT
- if [ "$MODE12b" ]; then
- echo -e "se reg 72 - \e[93m4\033[1;m data lines"
- write_val c802
- else
- echo -e "set reg 72 - \e[93m16\033[1;m data lines"
- write_val c800
- fi
- # register 40, image flipping, 0-no flip, 1-X, 2-Y, 3-both X and Y
- echo "set reg 40"
- write_val a800
- echo "End CMOSIS Configuration .."
- }
- function set_number_lines () {
- number_lines=$1
- echo -e "Write number of lines: \e[93m$number_lines\033[1;m"
- number_lines=$(printf "%04x\n" $number_lines)
- val=81${number_lines:2:4}
- write_val $val
- val=82${number_lines:0:2}
- write_val $val
- }
- function set_skip () {
- skip=$1
- echo -e "Write skip: \e[93m$skip\033[1;m"
- skip=$(printf "%04x\n" $skip)
- val=a3${skip:2:4}
- write_val $val
- val=a4${skip:0:2}
- write_val $val
- val=a5${skip:2:4}
- write_val $val
- val=a6${skip:0:2}
- write_val $val
- }
- function set_start_address () {
- number_lines=$1
- echo -e "Write start line: \e[93m$number_lines\033[1;m"
- number_lines=$(printf "%04x\n" $number_lines)
- val=83${number_lines:2:4}
- write_val $val
- val=84${number_lines:0:2}
- write_val $val
- }
- function print_help () {
- echo -e ""
- echo "Usage: reset.sh [--dma] [--logic] [--cmosis [--12b]] [--all [--12b]]
- [--4MP | --num-rows=2047] [--exp-time=100] [--skip=0] [--start=0]"
- echo -e "order of options is not important"
- echo -e ""
- echo -e "\e[33m --help: \033[1;m print this message and exit"
- echo -e "\e[33m --dma: \033[1;m reset only dma"
- echo -e "\e[33m --logic: \033[1;m reset only logic"
- echo -e "\e[33m --cmosis: \033[1;m reset cmosis, and set default cmosis values"
- echo -e "\e[33m --all: \033[1;m reset logic and cmosis, and set default cmosis values"
- echo -e "\e[33m --4MP: \033[1;m set 2047 rows, default 1088 rows"
- echo -e "\e[33m --12b: \033[1;m use 12bits, default 10 bits, only use with --cmosis or --all flag"
- echo -e "\e[33m--num-rows: \033[1;m set number of rows, default 1088"
- echo -e "\e[33m--exp-time: \033[1;m set exposure time in us, default 100"
- echo -e "\e[33m --skip: \033[1;m set skip, default 0"
- echo -e "\e[33m --start: \033[1;m set start line, default 0"
- echo -e "\nExample:"
- echo -e "reset.sh --cmosis ; --> Reset CMOSIS in 10bit mode"
- echo -e "reset.sh --cmosis --12b --4MP; --> Reset CMOSIS in 12bit mode, 2047 rows"
- echo -e "\nWrong:"
- echo -e "reset.sh --12b "
- echo -e "reset.sh --4MP --num-rows=1000 "
- echo -e "\nDiscouraged:"
- echo -e "reset.sh --all --dma --logic --cmosis "
- }
- input=$@
- for i in "$@"; do
- case $i in
- --all)
- RESET_ALL=YES
- shift
- ;;
- --cmosis)
- RESET_CMOSIS=YES
- shift
- ;;
- --help)
- SHOW_USAGE=YES
- shift
- ;;
- --dma)
- RESET_DMA=YES
- shift
- ;;
- --logic)
- RESET_LOGIC=YES
- shift
- ;;
- --12b)
- MODE12b=YES
- shift
- ;;
- --4MP)
- SET_4MP=YES
- NUM_ROWS=2047
- shift
- ;;
- --num-rows=*)
- NUM_ROWS="${i#*=}"
- SET_ROWS=YES
- shift
- ;;
- --exp-time=*)
- EXP_TIME="${i#*=}"
- SET_EXP_TIME=YES
- shift
- ;;
- --start-row=*)
- START_ROW="${i#*=}"
- SET_START=YES
- shift
- ;;
- --skip=*)
- SKIP_ROWS="${i#*=}"
- SET_SKIP=YES
- shift
- ;;
- *)
- WRONG=YES
- shift
- ;;
- esac
- done
- # check wrong or empty inputs #######################
- if [ -z "$input" ]; then
- echo "Usage: reset.sh [--dma] [--logic] [--cmosis [--12b]] [--all [--12b]]
- [--4MP | --num-rows=2047] [--exp-time=100] [--skip=0] [--start=0]"
- exit 0
- fi
- if [ "$SHOW_USAGE" ]; then
- print_help
- exit 0
- fi
- if [ "$SET_4MP" ] && [ "$SET_ROWS" ]; then
- WRONG=YES
- fi
- if [ -z "$RESET_CMOSIS" ] && [ -z "$RESET_ALL" ] && [ "$MODE12b" ]; then
- WRONG=YES
- fi
- if [ "$RESET_ALL" ] && [ -z "$WRONG" ]; then
- pci -w 9020 e
- reset_all
- reset_dma
- configure_cmosis
- set_number_lines $NUM_ROWS
- set_exp_time $EXP_TIME
- set_skip 0
- #set max number of frames in ddr
- if [ "$MODE12b" ]; then
- pci -w 0x91a0 e
- else
- pci -w 0x91a0 38
- fi
- check_status
- exit 0
- fi
- if [ "$RESET_CMOSIS" ] && [ -z "$WRONG" ]; then
- pci -w 9020 e
- reset_cmosis
- configure_cmosis
- set_number_lines $NUM_ROWS
- set_exp_time $EXP_TIME
- set_skip 0
- #set max number of frames in ddr
- if [ "$MODE12b" ]; then
- pci -w 0x91a0 e
- else
- pci -w 0x91a0 38
- fi
- check_status
- exit 0
- fi
- if [ "$RESET_DMA" ] && [ -z "$WRONG" ]; then
- reset_dma
- fi
- if [ "$RESET_LOGIC" ] && [ -z "$WRONG" ]; then
- reset_logic
- check_status
- fi
- if [ -z "$WRONG" ]; then
- if [ "$SET_4MP" ]; then
- set_number_lines $NUM_ROWS
- fi
- if [ "$SET_ROWS" ]; then
- set_number_lines $NUM_ROWS
- fi
- if [ "$SET_SKIP" ]; then
- set_skip $SKIP_ROWS
- fi
- if [ "$SET_START" ]; then
- set_start_address $START_ROW
- fi
- if [ "$SET_EXP_TIME" ]; then
- set_exp_time $EXP_TIME
- fi
- fi
- if [ "$WRONG" ]; then
- echo -e ""
- echo -e "\e[101m !!!WRONG ARGUMENT!!!, check reset.sh --help \033[1;m"
- echo -e ""
- fi
|