chiark / gitweb /
fix fundamentally incorrect algorithms and make it work as designed; adjust Stopping...
authorian <ian>
Thu, 29 Dec 2005 03:43:42 +0000 (03:43 +0000)
committerian <ian>
Thu, 29 Dec 2005 03:43:42 +0000 (03:43 +0000)
detpic/energy.asm

index 2176c6760d6eca8e5c30f8a0b6d5dbf605d5cc64..5bbbbeda97ddccb1ade986040428e97865b5f461 100644 (file)
@@ -6,7 +6,7 @@
 settling_timeout       equ      10000 ; us
 
 stop_timeout           equ     500000 ; us
-stopflash_timeout      equ      25000 ; us
+stopflash_timeout      equ      50000 ; us
 retry_timeout          equ      50000 ; us
 persist_timeout                equ      90000 ; us
 
@@ -35,11 +35,12 @@ retry_wait  res     1
 ;--------------------
 power_polarising_init
        clr_f   settling
+       pin_h   p0_booster_pwm
        return
 
 ;--------------------
 power_polarising_begin
-       pin_  p0_booster_pwm
+       pin_vl  p0_booster_pwm
        bc_f    INTCON, TMR0IE ; disables NMRA interrupt
        bs_f    flags, flags_polarising
        clr_f   settling
@@ -74,7 +75,7 @@ power_polarising_tick
 ;
 ; Off          shutdown  off   none    off             *On (or +Fault)
 ; On           power-up  on    none    off             Fault, or *Off
-; Stopping     shutdown  off   500ms   50% 1/50ms      ->Retry
+; 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
@@ -100,8 +101,7 @@ power_fault_init
        clr_f   stop_wait
        clr_f   retry_wait
        pin_h   p0_booster_shutdown
-       pin_vl  p0_booster_userfault
-       pin_z   p0_booster_userfault
+       pin_h   p0_booster_userfault
        ; now we are Off
        return
 
@@ -119,13 +119,13 @@ command_power
        return  ; that deals with Stopping or Persists
        ; must be Off:
 
-       pin_  p0_booster_shutdown
+       pin_vl  p0_booster_shutdown
        goto    cdu_on
 
 ;----------
 command_power_off
 ; On -> Off; noop in other states
-       pinlat_ifl p0_booster_shutdown
+       pinlat_ifh p0_booster_shutdown
        return  ; Off, Stopping or Persists
        ; might be On or Retry:
 
@@ -133,7 +133,7 @@ command_power_off
        return  ; that deals with Retry
        ; must be On:
 power_off_now
-       pin_  p0_booster_shutdown
+       pin_vh  p0_booster_shutdown
        goto    cdu_off
 
 ;--------------------
@@ -142,19 +142,32 @@ power_fault_intrl
        return
        ; we have a fault:
 
+       bc_f    INTCON3, INT1IF
+       rcall   power_off_now
+
        mov_fw  retry_wait
-       bra_z   power_stop ; we were Off or On, goto Stopping
+       bra_z   power_fault_stop ; we were Off or On, goto Stopping
        ; must be Stopping, Retry or Persists:
 
        tst_f_ifnz stop_wait
-       bra     power_stop ; we were already Stopping; restart timer
+       bra     power_fault_stop ; we were already Stopping; restart timer
        ; might be Retry or Persists, goto Persists (restarting any timer):
 
-       rcall   power_off_now
        mov_lw  persist_timeout / tick_us
        mov_wf  retry_wait
+       pin_vl  p0_booster_userfault
        return
 
+;-----
+power_fault_stop
+       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
+
 ;--------------------
 power_fault_tick
        tst_f_ifnz retry_wait
@@ -167,27 +180,19 @@ power_fault_tick
        bra     power_stop_doflash ; that was Stopping, just flash the LED
        ; must be Retry or Persists:
 
-       pinlat_ifl p0_booster_shutdown
+       pinlat_ifh p0_booster_shutdown
        bra     power_retry ; we were in Persists, now we can try again
-       ; we were in Retry but it didn't work:
-; go to Persists:
-       pin_h   p0_booster_shutdown
-       mov_lw  persist_timeout / tickdiv_us
-       mov_wf  retry_wait
-       pin_nz  p0_booster_userfault
-       return
+       ; we were in Retry and it worked.
+; go to Off:
+       pin_vh  p0_booster_shutdown
+       pin_vh  p0_booster_userfault
+       mov_lw  b'00000110'
+       goto    serial_addbyte
 
 ;----------
-power_stop
-       rcall   power_off_now
-       mov_lw  stop_timeout / tickdiv_us
-       mov_wf  stop_wait
-       pin_z   p0_booster_userfault
-       mov_lw  b'00000111'
-       call    serial_addbyte
 power_stop_doflash
-       pin_znz p0_booster_userfault
-       mov_lw  stopflash_timeout / tickdiv_us
+       pin_vhl p0_booster_userfault
+       mov_lw  stopflash_timeout / tick_us
        mov_wf  retry_wait
        return
 
@@ -201,15 +206,15 @@ power_fault_tickdiv
 power_retry
        mov_lw  retry_timeout / tickdiv_us
        mov_wf  retry_wait
-       pin_  p0_booster_shutdown
-       pin_  p0_booster_userfault
+       pin_vl  p0_booster_shutdown
+       pin_vh  p0_booster_userfault
        return
 
 ;--------------------
 power_panichook
-       pin_  p0_booster_shutdown
-       pin_  p0_booster_pwm
-       pin_  p0_booster_userfault
+       pin_vh  p0_booster_shutdown
+       pin_vl  p0_booster_pwm
+       pin_vh  p0_booster_userfault
        return
 
 ;======================================================================