chiark / gitweb /
Fix double-Fault bug. Change state machine comment to have new Off behaviour, but...
[trains.git] / detpic / energy.asm
index 5f3032cdaa998c50bf50b560a99cbecef60046fa..bf34bf0e9d93ffe8dc424033fcebe703ad4e5c37 100644 (file)
@@ -47,8 +47,10 @@ power_polarising_begin @
        return
 
 ;--------------------
-power_polarising_settling @
+power_polarising_nonetodo @
 ; idempotent
+       bt_f_if0 flags, flags_polarising
+       return
        tst_f_ifnz settling
        return
        mov_lw  settling_timeout / tick_us
@@ -63,6 +65,7 @@ power_polarising_tick @
        ; settle timeout complete:
 
        bc_f    flags, flags_polarising
+       pin_vh  p0_booster_pwm
        call    nmra_restartmessage
        bs_f    INTCON, TMR0IE ; reenables NMRA interrupt
        goto    i2c_consider_restartread
@@ -71,24 +74,26 @@ power_polarising_tick @
 ;
 ; FAULTS AND POWER:
 ;
-;              Shutdown  CDU   Timeout User Fault      Next states
+;          Shutdown  CDU  Time   User Fault  Next states and action when
+;                                            fault          timeout  ON  OFF
+;
+; Off      shutdown  off  none   off                                 On
+; On       power-up  on   none   off         Stopping,FAULT              Off
+; Stopping  shutdown  on   500ms  50% 1/100ms               Retry      
+; Retry            power-up  off  50ms   off         Persists       Off,FIXED    Off
+; Persists  shutdown  off  90ms          on                         Retry        Off
 ;
-; Off          shutdown  off   none    off             *On (or +Fault)
-; On           power-up  on    none    off             Fault, or *Off
-; Stopping     shutdown  off   500ms   50% 1/100ms     ->Retry
-; Retry                power-up  off   50ms    off             ->Off, or Persists
-; Persists     shutdown  off   90ms    on              ->Retry
-;                                                      * = when host instructs
-;                                                      + = lost race, only
-;                                                      -> = after timeout
+;                                              (no notation: event ignored)
+ make code correspond to new
+ get rid of Clearing state.
 ;
 ;              shutdown LAT    stop_wait       retry_wait
 ;
-; Off          H (shutdown)    stopped         stopped
-; On           L (power-up)    stopped         stopped
+; Off          H (shutdown)    0               0
+; On           L (power-up)    0               0
 ; Stopping     H (shutdown)    before Retry    for LED flash
-; Retry                L (power-up)    stopped         before Off
-; Persists     H (shutdown)    stopped         before retry
+; Retry                L (power-up)    0               before Off
+; Persists     H (shutdown)    0               before retry
 ;
 ;                              (uses tickdiv)  (uses tick)
 
@@ -118,6 +123,7 @@ command_power_on @
        ; must be Off:
 
        pin_vl  p0_booster_shutdown
+       Dl 0x81
        goto    cdu_on
 
 ;----------
@@ -145,25 +151,27 @@ power_fault_intrl @
        call    power_off_now
 
        mov_fw  retry_wait
-       bra_z   power_fault_stop ; we were Off or On, goto Stopping
+       bra_z   power_fault_newshort ; we were Off or On
        ; must be Stopping, Retry or Persists:
 
        tst_f_ifnz stop_wait
-       bra     power_fault_stop ; we were already Stopping; restart timer
+       bra     power_fault_stopmore ; we were already Stopping; restart timer
        ; might be Retry or Persists, goto Persists (restarting any timer):
 
        mov_lw  persist_timeout / tick_us
        mov_wf  retry_wait
        pin_vl  p0_booster_userfault
-       return
+faultintrl_noop
+       intrl_handled_nostack
 
 ;-----
-power_fault_stop
+power_fault_newshort
+       mov_lw  b'00000111'
+       call    serial_addbyte
+power_fault_stopmore
        mov_lw  stop_timeout / tickdiv_us
        mov_wf  stop_wait
        pin_vl  p0_booster_userfault
-       mov_lw  b'00000111'
-       call    serial_addbyte
        rcall   power_stop_doflash
        intrl_handled_nostack