;======================================================================
; MAIN PROGRAM AND GLUE
- include common.inc
- code
+ include common.inc
+ code
;======================================================================
; COMMON TO MASTER AND SLAVE
;----------------------------------------
-vector_reset
-
- set_f qqTRISA
- set_f qqTRISB
- set_f qqTRISC
- set_f qqTRISD
- set_f qqTRISE
- mov_lw 0xaa
- mov_wf qqLATA
- mov_wf qqLATB
- mov_wf qqLATC
- mov_wf qqLATD
- mov_wf qqLATE
-
+vector_reset @
clr_f INTCON
bs_f RCON, IPEN ; interrupt priorities
call idlocs_init
- clr_f flags
bt_f_if0 idloc1,idloc1_master
call slave_init
return
;----------------------------------------
-panic_kill_hook
+panic_kill_hook @
call power_panichook
call cdu_panichook
return
;----------
-intrl_handled_routine
+intrl_handled_routine @
mov_ff isr_low_save_stkptr, STKPTR
intrl_handled_core
;----------------------------------------
master_init
; Master-specific initialisation.
+ call memory_erase
+ clr_f flags
+ call serial_init
call i2cm_init
call serialtxbuf_init
call polarity_master_init
call points_master_init
call common_local_init
- call serial_init
call nmra_init
call serialtxfc_init
call mascan_init
call tick_init
+ call cdu_init
call power_polarising_init
+ call power_fault_init
+ call watchdog_init
+ call i2c_consider_restartread ; sends hello when all slaves ack'd
return
;----------------------------------------
-master_interrupt_low
+master_interrupt_low @
enter_interrupt_low
+ Dl 0x80
+ Df INTCON
+ Df INTCON2
+ Df INTCON3
+ Df PIR1
+ Df PIR2
+ Df PIR3
+ Dl 0x8d
call tick_intrl
call nmra_serialrx_intrl
+ call power_fault_intrl
+ call serialtxfc_intrl
call serialtx_intrl
call points_local_intrl
call i2cm_intrl
+ Dl 0x8e
+ Df INTCON
+ Df INTCON2
+ Df INTCON3
+ Df PIR1
+ Df PIR2
+ Df PIR3
+ Dl 0x8f
panic morse_IL
-;----------
-near_interrupt_high code
-master_interrupt_high_notnmra
- panic morse_IH
-
;----------------------------------------------------------------------
serialrx_table_section code 0x2000
;--------------------
-serialrx_generalmsg
+command_tellmode
+ mov_lw 0x09
+ goto serial_addbyte
+
+;--------------------
+serialrx_generalmsg @
;command_<something> has same calling convention:
;
; FSR0 -> start of message undefined
; *FSR0 message undefined
;
-; ; INDF0=MM ww ww ww ww ii ii ii
- rlc_fw INDF0 ; W = ww ww ww ww ii ii ii ?? C=MM Z=00
- bra_c serialrx_if_multibyte
+ mov_fw INDF0
+ bra_n serialrx_if_multibyte
bra_z command_crashed
- ; single-byte non-0 command, has to be ON or OFF
- ; ie supposedly ; INDF0=zz zz II zz zz zz zz PP C=zz
- rrc_fw INDF0 ; W = zz zz zz II zz zz zz zz C=PP
- xor_lw 0x10 ; W = zz zz zz zz zz zz zz zz C=PP Z=OK
- bra_n serialrx_bad
- goto command_power
+
+ xor_lw 0x11
+ bra_z command_power_on
+ xor_lw 0x10 ^ 0x11
+ bra_z command_power_off
+ xor_lw 0x0a ^ 0x10
+ bra_z command_tellmode
+ bra serialrx_bad
;-----
serialrx_if_multibyte
goto serialrx_bad ; 1 0000 xxx
goto command_ping ; 1 0001 xxx
goto command_polarity ; 1 0010 xxx
- goto serialrx_bad ; 1 0011 xxx
+ goto command_watchdog ; 1 0011 xxx
goto command_point ; 1 0100 xxx
goto serialrx_bad ; 1 0101 xxx
goto serialrx_bad ; 1 0110 xxx
goto serialrx_bad ; 1 1110 xxx
goto serialrx_bad ; 1 1111 xxx
- goto serialrx_bad ; 0 0000 xxx
- goto serialrx_bad ; 0 0001 xxx
- goto serialrx_bad ; 0 0000 xxx
-
;-----
serialrx_bad
mov_ff INDF0, t
panic morse_HX
+code2 code
;--------------------
command_ping
mov_fw POSTINC0
command_ping_bad panic morse_HP
-code2 code
;======================================================================
; SLAVE
;----------------------------------------
slave_init
; Slave-specific initialisation.
+ clr_f flags
+
mov_fw picno
call i2cs_init
return
;----------------------------------------
-slave_interrupt_low
+slave_interrupt_low @
enter_interrupt_low
call points_local_intrl
panic morse_IL
; MASTER/SLAVE deviations
;----------
-message_for_master
+message_for_master @
; Either transmits the message to the master, or if we are the master,
; handles it as an incoming message from the notional `slave 0'.
; W message unchanged
goto loopback_read_byte
;======================================================================
- include final.inc
+ include final.inc