diff --git a/avr/modules/com2w/com2w.asm b/avr/modules/com2w/com2w.asm index 31bd832c..9f1af11b 100644 --- a/avr/modules/com2w/com2w.asm +++ b/avr/modules/com2w/com2w.asm @@ -844,5 +844,31 @@ com2wPcintIsr_end: +; --------------------------------------------------------------------------- +; @routine COM2W_CheckPort @global +; +; @param r16 port value at IRQ time (e.g. PINA) +; @param Y pointer to interface +; @clobbers: r16, r17, r18, r19, r20, r21, r22, r24, r25, X, Y + +COM2W_CheckPort: + ldi yl, LOW(com2w_iface) + ldi yh, HIGH(com2w_iface) + ldd r17, Y+NET_IFACE_OFFS_LASTPORTVALUE + std Y+NET_IFACE_OFFS_LASTPORTVALUE, r16 + mov r18, r17 + eor r18, r16 ; changed bits=1 + com r18 ; complement: changed bits=0 + or r18, r16 ; only bits are 0 which have just changed to 0 + sbrs r18, COM_CLK_PIN + rjmp COM2W_CheckPort_end + ; CLK just changed to 0, read packet + rcall com2wReceiveNextPkg ; (R16, R17, R18, R19, R20, R21, R22, R24, R25, X) +COM2W_CheckPort_end: + ret +; @end + + + #endif ; AVR_MODULES_COM2W_COM2W_H