chiark / gitweb /
yet better handling of sudden panics vis-a-vis i2c on master
authorian <ian>
Fri, 30 Dec 2005 04:06:45 +0000 (04:06 +0000)
committerian <ian>
Fri, 30 Dec 2005 04:06:45 +0000 (04:06 +0000)
detpic/crashread
detpic/panic.asm

index 75077326f0518dab77e1b18ead8b8ca02dc14288..95fa725fb30da0a5d573f9d21f9db7b303ef912c 100755 (executable)
@@ -201,7 +201,7 @@ proc pause {t} {
 }
 
 proc setup_m {} { xmit 0; xmit 0; xmit 0; pause 250; junkrecv }
-proc setup_s {} { setup_m; xmit_s 0; xmit_s 0 }
+proc setup_s {} { setup_m; xmit 128; pause 256; junkrecv; xmit_s 0; xmit_s 0 }
 proc setup_t {} { }
 
 proc selectaddr_ms {xmit a} {
index 550aa4c707003ff62ccecb3f48143808bfd38e50..829de2ad479cdd954ac38aabca3fd57b99e1dff1 100644 (file)
@@ -20,7 +20,8 @@ panicst_restart_i2c           equ     7
 panicst_acked                  equ     5
 panicst_ferroerr               equ     4
 panicst_writeslave             equ     3
-panicst_onlyourwrite           equ     2
+panicst_i2cmours               equ     2
+panicst_i2cmenable             equ     2
 
 panic_valcount                 res     1
 
@@ -366,6 +367,9 @@ waiting_master
        bra     waiting_loop
        ; master, i2c enabled:
 
+       bt_f_if0 panicst, panicst_i2cmenable
+       bra     waiting_loop
+
        bt_f_if1 PIR1, SSPIF
        rcall   pan_i2cm_interrupt
 
@@ -464,7 +468,7 @@ write_if_setbytetowrite
        bc_w    7
        mov_wf  panic_valcount
        bs_f    panicst, panicst_writeslave
-       bs_f    panicst, panicst_onlyourwrite
+       bs_f    panicst, panicst_i2cmenable
        return
 
 ;----------
@@ -477,6 +481,7 @@ write_if_master_slaveread
 write_if_master_slaveselect
        bc_w    5
        btg_w   4
+       bs_f    panicst, panicst_i2cmours
        bt_f_if1 panicst, panicst_writeslave
        bra     pan_i2cm_write_start
        bra     pan_i2cm_read_start
@@ -494,6 +499,8 @@ write_if_master_masterread_loop
 
 ;----------
 pan_i2cmu_read_got_byte
+       bt_f_if0 panicst, panicst_i2cmours
+       return
        call    serial_write_char
        dec_f_ifnz panic_valcount
        bra     pan_i2cm_read_another
@@ -503,7 +510,7 @@ pan_i2cmu_read_got_byte
 pan_i2cmu_write_next_byte
        mov_fw  panic_valcount
        bc_f    STATUS, Z
-       bt_f_if0 panicst, panicst_onlyourwrite
+       bt_f_if0 panicst, panicst_i2cmours
        retlw   0x00
        bt_f_if0 panicst, panicst_writeslave
        bs_f    STATUS, Z