;
;         "dp_tm_extdi.txt"    ,
;               
;
;------------------------------------------------------------------------------
;
;     -    -
;    fast PWM  (  )    CLKio 
; 
;         ~62 (0,016S)
;   4    0,004S
;   (  )
;   4   
;
;------------------------------------------------------------------------------
;
;   
;
;   
irq_dp_kadr:
   in how_sreg_d,SREG
   dec dp_cntk ;   -1
   brbs SREG_Z,dp_news ;  dp_cntk=0   dp_news
   inc dp_idx ;   +1
   sec ; =1
   rol dp_masbu ;    
dp_oll_kadr:
    push tmp0 ;   tmp0  
    movw dp_ftmxl,xl ;  Xh:Xl   
    ldwi x,dp_atrbuf ;       
    mov tmp0,dp_idx
    lsl tmp0
    inc tmp0 ;      
    add xl,tmp0 ;   
    brbc SREG_C,dp_pt0
    inc xh
dp_pt0:
    ld tmp0,x ;    
    out OCR1BH,tmp0 ;  OCR1BH
    mov dp_xbuf,tmp0 ;     dp_xbuf
    ld tmp0,-x ;   
    out OCR1BL,tmp0 ;  OCR1BL
    ldi tmp0,(0xFF - (1<<dp_darks)) ;     
    and dp_flags,tmp0 ; dp_darks=0
    lsr dp_xbuf ;     / 
    lsr dp_xbuf
    tst dp_xbuf
    brne dp_ppt1 ; for dp_xbuf=0 OCR1B<1024   " "
    com tmp0 ;    
    or dp_flags,tmp0 ; dp_darks=1 (     )
           ;  dp_xbuf>0 OCR1B=>1024  dp_darks=0
 dp_ppt1:
    ldwi x,dp_datbuf ;      
    add xl,dp_idx ;   
    brbc SREG_C,dp_pt1
    inc xh
dp_pt1:
    ld dp_xbuf,x ;     dp_xbuf
;    com dp_xbuf ;       *!!!*
    pop tmp0 ;  tmp0
;     
;    ldi xl,low (dp_wrgf)
;    push xl
;    ldi xl,high (dp_wrgf)
;    push xl
    movw xl,dp_ftmxl ;  Xh:Xl
  out SREG,how_sreg_d ;    
          ;      
   reti
dp_news:
    movw dp_ftmxl,xl ;  Xh:Xl   
    ldwi x,dp_shaps
    ld dp_cntk,x+ ;   =4
    ld dp_masbu,x+ ;   = dp_mask
    ld dp_idx,x ;    
        ;(        )
    ldi xl,(1<<dp_s_end)
    or dp_flags,xl ;   dp_s_end=1
    movw xl,dp_ftmxl ;  Xh:Xl
   rjmp dp_oll_kadr
;
;-----------------------------------------------------------------
;
;
;  " "
irq_dp_aon:
    in how_sreg_d,SREG
    out dp_seg_port,dp_xbuf ;   
                ; (         )
    in dp_ftmxl,dp_anod_port
    and dp_ftmxl,dp_masbu
    out dp_anod_port,dp_ftmxl ;   
    clr dp_ftmxl
    inc dp_ftmxl ; dp_ftmxl=1
    cpse dp_ftmxl,dp_cntk ;      ( =1)  dp_pt2
    rjmp dp_aon_ende
; ---------------------------------
dp_pt2:
    sbrs dp_flags,dp_exch ;   dp_exch=1
    rjmp dp_aon_ende
    mov dp_ftmpl,tmp0
    ldi tmp0,low (dp_rwrbu)
    push tmp0 ;  
    ldi tmp0,high (dp_rwrbu)
    push tmp0 ;    
    mov tmp0,dp_ftmpl
   reti
; ---------------------------------
dp_aon_ende:
  out SREG,how_sreg_d
    reti
;
;
;-----------------------------------------------------------------
;
;    
irq_dp_aof:
    sbi dp_anod_port,dp_AN3 ;   ""   USART (RxD) !!!
    sbi dp_anod_port,dp_AN2
    sbi dp_anod_port,dp_AN1
    sbi dp_anod_port,dp_AN0 ;   
    reti ;  
;
;-----------------------------------------------------------------
;
;     ( )
dp_wrgf:
     nop
   out SREG,how_sreg_d
     ret
;
;-----------------------------------------------------------------
;
;        
;
dp_rwrbu:
    movw dp_ftmxl,xl ; X in fast stack
    movw dp_ftmpl,yl ; Y in fast stack
    push tmp0 ; tmp0 in stack
    ldi tmp0,(dp_lenbuf*3) ; 
    ldwi x,dp_datbuf ; 
    ldwi y,dp_rdbf ; 
lo_rwrbu:
    ld dp_xbuf,y+
    st x+,dp_xbuf
    dec tmp0
    brne lo_rwrbu
    cli ; DI -     IRQ (USART)
          ;    
     ldi tmp0,(0xFF - (1<<dp_exch))
     and dp_flags,tmp0 ;   dp_exch=0
  out SREG,how_sreg_d
  sei ; EI -     
  ;    IRQ  
  ; reti    -> ret    ()
   pop tmp0 ;    tmp0, X  Y
   movw yl,dp_ftmpl
   movw xl,dp_ftmxl
    ret ;
;
;-----------------------------------------------------------------
;