diff --git a/avr/modules/network/iface.asm b/avr/modules/network/iface.asm index b0174f9..1ed7baa 100644 --- a/avr/modules/network/iface.asm +++ b/avr/modules/network/iface.asm @@ -205,16 +205,21 @@ NET_Interface_SetIfaceNumInBuffer: ; @clobbers R16 NET_Interface_Periodically: - ldd r16, Y+NET_IFACE_OFFS_READTIMER - inc r16 - breq NET_Interface_Periodically_l1 - std Y+NET_IFACE_OFFS_READTIMER, r16 + push r15 + in r15, SREG + cli + ldd r16, Y+NET_IFACE_OFFS_READTIMER + inc r16 + breq NET_Interface_Periodically_l1 + std Y+NET_IFACE_OFFS_READTIMER, r16 NET_Interface_Periodically_l1: - ldd r16, Y+NET_IFACE_OFFS_WRITETIMER - inc r16 - breq NET_Interface_Periodically_l2 - std Y+NET_IFACE_OFFS_WRITETIMER, r16 + ldd r16, Y+NET_IFACE_OFFS_WRITETIMER + inc r16 + breq NET_Interface_Periodically_l2 + std Y+NET_IFACE_OFFS_WRITETIMER, r16 NET_Interface_Periodically_l2: + out SREG, r15 + pop r15 ret ; @end @@ -227,15 +232,21 @@ NET_Interface_Periodically_l2: ; @clobbers R16, R17, X NET_Interface_ResetStats: - clr r16 - std Y+NET_IFACE_OFFS_PACKETSIN_LOW, r16 - - mov xl, yl - mov xh, yh - adiw xh:xl, NET_IFACE_OFFS_PACKETSIN_LOW - ldi r17, ((NET_IFACE_OFFS_ERR_BUSY_HIGH+1)-NET_IFACE_OFFS_PACKETSIN_LOW) - clr r16 - rjmp Utils_FillSram ; (R17, X) + push r15 + in r15, SREG + cli + clr r16 + std Y+NET_IFACE_OFFS_PACKETSIN_LOW, r16 + + mov xl, yl + mov xh, yh + adiw xh:xl, NET_IFACE_OFFS_PACKETSIN_LOW + ldi r17, ((NET_IFACE_OFFS_ERR_BUSY_HIGH+1)-NET_IFACE_OFFS_PACKETSIN_LOW) + clr r16 + rcall Utils_FillSram ; (R17, X) + out SREG, r15 + pop r15 + ret ; @end