;
;         "dp_ext_disp.txt"    ,
;               
;
;------------------------------------------------------------------------------
;
;     -    -
;    fast PWM (  )    CLKio 
; 
;         ~62 (0,016S)
;   4    0,004S
;   (  )
;   4   
;
;------------------------------------------------------------------------------
;
;   
;
;   
irq_dp_kadr:
   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 r16 ;   r16  
    movw dp_ftmxl,xl ;  Xh:Xl   
    ldwi x,dp_atrbuf ;       
    mov r16,dp_idx
    lsl r16
    inc r16 ;      
    add xl,r16 ;   
    brbc SREG_C,dp_pt0
    inc xh
dp_pt0:
    ld r16,x ;    
    out OCR1BH,r16 ;  OCR1BH
    ld r16,-x ;   
    out OCR1BL,r16 ;  OCR1BL
    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 r16 ;  r16
;     
;    ldi xl,low (dp_wrgf)
;    push xl
;    ldi xl,high (dp_wrgf)
;    push xl
    movw xl,dp_ftmxl ;  Xh:Xl
   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:
    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
    cp dp_ftmxl,dp_cntk
    breq dp_pt2 ;      ( =1)  dp_pt2
   reti ;   
dp_pt2:
    sbrs dp_flags,dp_exch ;   dp_exch=1
   reti ;  dp_exch=0  reti
    mov dp_ftmpl,r16
    ldi r16,low (dp_rwrbu)
    push r16 ;  
    ldi r16,high (dp_rwrbu)
    push r16 ;    
    mov r16,dp_ftmpl
   reti
;
;    
irq_dp_aof:
    sbi dp_anod_port,dp_AN3
    sbi dp_anod_port,dp_AN2
    sbi dp_anod_port,dp_AN1
    sbi dp_anod_port,dp_AN0 ;   
  reti
;
;    
dp_wrgf:
     nop
     ret
;
;        
;    3000uS
dp_rwrbu:
    movw dp_ftmxl,xl ; X in fast stack
    movw dp_ftmpl,yl ; Y in fast stack
    push r16 ; r16 in stack
    ser r16
    cbr r16,(1<<dp_exch)
    and dp_flags,r16 ;   dp_exch=0
    ldi r16,(dp_lenbuf*3) ; 
    ldwi x,dp_datbuf ; 
    ldwi y,dp_rdbf ; 
lo_rwrbu:
    ld dp_xbuf,y+
    st x+,dp_xbuf
    dec r16
    brne lo_rwrbu
   pop r16 ;    r16, X  Y
   movw yl,dp_ftmpl
   movw xl,dp_ftmxl
    ret
;