chiark / gitweb /
Merge and end branch-hostside-wip-2008-01-25 PROPERLY; cvs up -j branch-hostside...
[trains.git] / detpic / energy.asm
index 5dab54d3492eeb98041ff1d95ed6eaf4ebf7b672..c94d451494f0445934b998c357c0d59d91089afe 100644 (file)
@@ -15,6 +15,8 @@ settling      res     1 ; all counters are 0 if stopped
 stop_wait      res     1 ;  or otherwise count down
 retry_wait     res     1
 
+fault_spurious_count   res     1
+
   code
 
 ;======================================================================
@@ -103,6 +105,7 @@ power_fault_init @
        bs_f    INTCON3, INT1IE
        clr_f   stop_wait
        clr_f   retry_wait
+       clr_f   fault_spurious_count
        pin_h   p0_booster_shutdown
        pin_h   p0_booster_userfault
        ; now we are Off
@@ -142,10 +145,22 @@ code2 code
 power_fault_intrl @
        bt_f_if0 INTCON3, INT1IF
        return
-       ; we have a fault:
+       ; we may have a fault:
 
        bc_f    INTCON3, INT1IF
 
+       call    portb_read
+       pin_inw_ifh p0_booster_overload
+       bra     fault_isactual
+       ; spurious:
+
+       inc_f_ifz fault_spurious_count  ; ++f.s._count == 0x00 ?
+       bs_f    fault_spurious_count, 7 ; f.s._count = 0x80
+
+       intrl_handled_nostack
+
+;-----
+fault_isactual
        pinlat_ifh p0_booster_shutdown
        bra faultintrl_noop
                ; Off, Stopping or Persists - must have lost the race
@@ -211,6 +226,10 @@ power_stop_doflash
 
 ;--------------------
 power_fault_tickdiv @
+       tst_f_ifnz fault_spurious_count
+       bra     fault_spurious_tickdiv
+       ; in any case:
+fault_tickdiv_rest
        tst_f_ifnz stop_wait
        dec_f_ifnz stop_wait
        return
@@ -224,6 +243,24 @@ power_retry
        pin_vh  p0_booster_userfault
        return
 
+;----------
+fault_spurious_tickdiv
+; does not return, instead continues with fault_tickdiv_rest
+       mov_lw  0xc1 ; SPURIOUS
+       call    serial_addbyte
+
+       mov_fw  fault_spurious_count
+       bra_n   fault_spurious_tickdiv_isoverflow
+fault_spurious_tickdiv_writeamt
+       call    serial_addbyte_another
+       clr_f   fault_spurious_count
+       bra     fault_tickdiv_rest
+
+;-----
+fault_spurious_tickdiv_isoverflow
+       mov_lw  0x7f
+       bra     fault_spurious_tickdiv_writeamt
+
 ;--------------------
 power_panichook @
        pin_vh  p0_booster_shutdown