;
;          trbspi_sb1.txt
;
;     UPGM
;    (PAVR)
; /slave board/
;
;
;----------------------------------------------
;
; .equ bus_dtr = 0 ;  / 
        ;   PORTA PAVR
        ;  reset      +5 
        ;       0
        ;       
				;     
; .equ bus_clc = 1 ;    
        ;   PORTA PAVR
        ;  reset/cold init      +5 
        ;    ()  ()
        ;   0
; .equ bus_qt = 0 ;  
        ;   PORTD PAVR
        ;  reset/cold init      +5 
        ;   0
        ;   ,   
;
;----------------------------------------------
;
; .def data_t = r11 ;  ()   trbspi_sb
;
;----------------------------------------------
;
;       GPIOR0
;       (GPIOR0+0x20)
;
; .equ data_key = 0 ; (GPIOR0)    /
           ; data_key=0 -   
           ; data_key=1 -   
;
;
;
;----------------------------------------------
;
;     8
;
;----------------------------------------------
;
;        PSPI
;
;     reset 
;   DDRA=00000000
;   PORTA=00000000
;    Z-
;   DDRB=00000000
;   POTTB=00000000
;    Z-
;   DDRD=00000000
;   POTTD=00000000
;    Z-
;   init    
;	 MCUCR.PUD=1
;   PORTD.ptr_clc = 0 DDRD.ptr_clc =  (1)
;
;----------------------------------------------
;
;  
;
;   data_key   
;   
;     
; data_t (r11)
;      data_key
;(data_key=0 -   
           ; data_key=0 -   )
;
;
 pspi_txd:
  push tmp0 ;  -
  push tmp1 ;  
  push tmp2 ;   
  cbi DDRA,bus_dtr
  cbi DDRA,bus_clc
  cbi DDRD,bus_qt ;  
             ; bus_dtr=bus_clc=bus_qt= ( 
             ;  = 1)
  cbi PORTA,bus_dtr ;    bus_dtr=0
              ;  bus_dtr=1
  cbi PORTA,bus_clc ;    bus_clc=0
              ;  bus_clc=1
  cbi PORTD,bus_qt ;    bus_qt=0
              ;  bus_qt=1
 tx_on:
    ldi tmp1,8 ;   
    in tmp0,GPIOR0 ;   data_key
     rcall strob ;    
 data_tx:
   mov tmp0,data_t
   rcall strob ;   
   lsr tmp0 ;   
   mov data_t,tmp0 ;     tmp0.0
   dec tmp1
   brne data_tx
 tx_off:
   pop tmp2
   pop tmp1
   pop tmp0
  ret
;----------------------------------------------------------
 strob:
    sbrs tmp0,0
    sbi DDRA,bus_dtr ; if tmp0,0=0 -->  bus_dtr=0
    sbrc tmp0,0
    cbi DDRA,bus_dtr ; if tmp0,0=1 -->   bus_dtr=1
		    ;       tmp0,0
			;  PORTA,bus_dtr
		 rcall time ;   
		sbi DDRA,bus_clc ;   
		       ;   PORTA.bus_clc  0
		 rcall time ;   
 tx_tp0:
    sbic PIND,bus_qt
   rjmp tx_tp0 ;    (bus_qt=0)
    cbi DDRA,bus_clc ;   
     ; bus_clc=
     ;   bus_clc    
     ;  
    cbi DDRA,bus_dtr ;  bus_dtr=1
                  ;     
    rcall time ;   
 tx_tp1:
    sbis PIND,bus_qt
   rjmp tx_tp1 ;    (bus_qt=1)
     rcall time ;   
   ret
;----------------------------------------------------------
time:
    ldi tmp2,10 ;  ~40uS  = 0,00004*5= ~0,0002 /
 ttime:
   nop ;
   dec tmp2
   brne ttime
   ret
;----------------------------------------------------------
;

;
;----------------------------------------------
;
;              
;
;        
;    ,    
;        
; 
; ..    
;
;  
;
;  data_t     
;  GPIOR0.data_key=1  
;  GPIOR0.data_key=0  
;
;
 pspi_rxd:
   push tmp0 ;  
   push tmp1 ;  
   push tmp2 ;   
   cbi DDRA,bus_dtr
   cbi DDRA,bus_clc
   cbi DDRD,bus_qt ;   
             ;  bus_dtr=bus_clc=bus_qt=, bus_dtr=bus_clc=bus_qt1=1
   cbi PORTA,bus_dtr ;    bus_dtr=0
              ;  bus_dtr=1
   cbi PORTA,bus_clc ;    bus_clc=0
              ;  bus_clc=1
   cbi PORTD,bus_qt ;    bus_qt=0
              ;  bus_qt=1
 rx_on:
     rcall strobinp ;    
    sbrs tmp0,7
     cbi GPIOR0,data_key
    sbrc tmp0,7
     sbi GPIOR0,data_key ;    
    ldi tmp1,8 ;   
 data_rx:
    rcall strobinp ;    
     dec tmp1
      brne data_rx
     mov data_t,tmp0 ;    data_t
   pop tmp2
   pop tmp1
   pop tmp0
  ret
;-------------------------------------------------------------
 strobinp:
   sbic PINA,bus_clc ;    PORTA.bus_clc=0
         ; ***!!!       !!!***
    rjmp strobinp
     rcall time ;   
      sbis PINA,bus_dtr
    clc
   sbic PINA,bus_dtr
    sec
     ror tmp0 ;    PINA.bus_dtr    tmp0
    sbi DDRD,bus_qt ;   
		          ; bus_qt=   
		          ; (cbi PORTD,bus_qt)  =0
     rcall time ;   
 rx_tp1:
     sbis PINA,bus_clc ;    PORTA.bus_clc=1
         ; ***!!!       !!!***
    rjmp rx_tp1
      cbi DDRD,bus_qt ;   
         ; bus_qt=,     
         ;  
    rcall time ;   
   ret
;
;----------------------------------------------
;
