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
;--------------------
power_polarising_init
clr_f settling
+ pin_h p0_booster_pwm
return
;--------------------
power_polarising_begin
- pin_l p0_booster_pwm
+ pin_vl p0_booster_pwm
bc_f INTCON, TMR0IE ; disables NMRA interrupt
bs_f flags, flags_polarising
clr_f settling
;
; 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
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
return ; that deals with Stopping or Persists
; must be Off:
- pin_l 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:
return ; that deals with Retry
; must be On:
power_off_now
- pin_h p0_booster_shutdown
+ pin_vh p0_booster_shutdown
goto cdu_off
;--------------------
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
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
power_retry
mov_lw retry_timeout / tickdiv_us
mov_wf retry_wait
- pin_l p0_booster_shutdown
- pin_z p0_booster_userfault
+ pin_vl p0_booster_shutdown
+ pin_vh p0_booster_userfault
return
;--------------------
power_panichook
- pin_h p0_booster_shutdown
- pin_l p0_booster_pwm
- pin_z p0_booster_userfault
+ pin_vh p0_booster_shutdown
+ pin_vl p0_booster_pwm
+ pin_vh p0_booster_userfault
return
;======================================================================