]> rtime.felk.cvut.cz Git - lincan.git/commitdiff
Merge: Correction of the abnormal looping in SJA1000P ISR reported by Tomas Kupilik.
authorppisa <pisa@cmp.felk.cvut.cz>
Thu, 19 Jan 2006 17:42:00 +0000 (18:42 +0100)
committerppisa <pisa@cmp.felk.cvut.cz>
Thu, 19 Jan 2006 17:42:00 +0000 (18:42 +0100)
Merge commit 'remotes/sf-ocera-lincan/master'

lincan/src/sja1000p.c

index 7b5a96ad4cbee8d94e26dfa7fee2dd20f6c18fcc..36319a159c0337c082539e4ac5d6bf3cc41b6c91 100644 (file)
@@ -816,11 +816,15 @@ int sja1000p_irq_handler(int irq, struct canchip_t *chip)
                }
 
                irq_register=can_read_reg(chip,SJAIR);
-       
+
                status=can_read_reg(chip,SJASR);
 
-       } while((irq_register & (sjaIR_BEI|sjaIR_EPI|sjaIR_DOI|sjaIR_EI|sjaIR_TI|sjaIR_RI)) ||
-               ((status & sjaSR_TBS) && can_msgobj_test_fl(obj,TX_PENDING)) ||
+               if(((status & sjaSR_TBS) && can_msgobj_test_fl(obj,TX_PENDING)) ||
+                  (irq_register & sjaIR_TI))
+                        can_msgobj_set_fl(obj,TX_REQUEST);
+
+       } while((irq_register & (sjaIR_BEI|sjaIR_EPI|sjaIR_DOI|sjaIR_EI|sjaIR_RI)) ||
+               (can_msgobj_test_fl(obj,TX_PENDING) && !can_msgobj_test_fl(obj,TX_LOCK)) ||
                (status & sjaSR_RBS));
 
        return CANCHIP_IRQ_HANDLED;