avr: only write COM address if changed to reduce EEPROM wear.
This commit is contained in:
@@ -26,7 +26,7 @@
|
|||||||
|
|
||||||
|
|
||||||
.equ APP_NETWORK_ADDRESS_RANGE_BEGIN = 1
|
.equ APP_NETWORK_ADDRESS_RANGE_BEGIN = 1
|
||||||
.equ APP_NETWORK_ADDRESS_RANGE_END = 192
|
.equ APP_NETWORK_ADDRESS_RANGE_END = 191
|
||||||
|
|
||||||
.equ APP_NETWORK_REBOOT_TIME_100MS = 20
|
.equ APP_NETWORK_REBOOT_TIME_100MS = 20
|
||||||
|
|
||||||
@@ -207,18 +207,23 @@ appNetworkHandleStateHaveAddress1:
|
|||||||
appNetworkHandleStateHaveAddress2:
|
appNetworkHandleStateHaveAddress2:
|
||||||
ldi r16, APP_NETWORK_STATE_UP
|
ldi r16, APP_NETWORK_STATE_UP
|
||||||
std Y+NET_IFACE_OFFS_STATUS, r16
|
std Y+NET_IFACE_OFFS_STATUS, r16
|
||||||
|
ldi r16, APP_NETWORK_TIMER_100MS
|
||||||
|
std Y+NET_IFACE_OFFS_STATETIMER, r16
|
||||||
ldd r16, Y+NET_IFACE_OFFS_RANGE_BEGIN ; set interface address
|
ldd r16, Y+NET_IFACE_OFFS_RANGE_BEGIN ; set interface address
|
||||||
|
ldd r17, Y+NET_IFACE_OFFS_ADDRESS
|
||||||
|
cp r16, r17
|
||||||
|
breq appNetworkHandleStateHaveAddress2_end
|
||||||
|
; store new address in IFACE and in EEPROM
|
||||||
std Y+NET_IFACE_OFFS_ADDRESS, r16
|
std Y+NET_IFACE_OFFS_ADDRESS, r16
|
||||||
|
|
||||||
in r15, SREG
|
|
||||||
push r15
|
push r15
|
||||||
|
in r15, SREG
|
||||||
cli
|
cli
|
||||||
ldi xl, LOW(EEPROM_OFFS_COMADDR)
|
ldi xl, LOW(EEPROM_OFFS_COMADDR)
|
||||||
ldi xh, HIGH(EEPROM_OFFS_COMADDR)
|
ldi xh, HIGH(EEPROM_OFFS_COMADDR)
|
||||||
rcall Utils_WriteEepromIncr ; write address to EEPROM
|
rcall Utils_WriteEepromIncr ; write address to EEPROM
|
||||||
|
out SREG, r15
|
||||||
pop r15
|
pop r15
|
||||||
out SREG, r15
|
appNetworkHandleStateHaveAddress2_end:
|
||||||
|
|
||||||
ret
|
ret
|
||||||
|
|
||||||
|
|
||||||
@@ -323,16 +328,16 @@ appNetworkHandleMsgDenyAddr:
|
|||||||
; check state
|
; check state
|
||||||
ldd r16, Y+NET_IFACE_OFFS_STATUS
|
ldd r16, Y+NET_IFACE_OFFS_STATUS
|
||||||
cpi r16, APP_NETWORK_STATE_UP
|
cpi r16, APP_NETWORK_STATE_UP
|
||||||
breq appNetworkHandleMsgDenyAddr_end ; ignore (our network stack is up)
|
breq appNetworkHandleMsgDenyAddr_end ; ignore (our network stack is up)
|
||||||
; still setting up address, check whether the last one is denied now
|
; still setting up address, check whether the last one is denied now
|
||||||
ldd r16, Y+NET_IFACE_OFFS_RANGE_BEGIN
|
ldd r16, Y+NET_IFACE_OFFS_RANGE_BEGIN
|
||||||
cp r19, r16 ; our claimed address?
|
cp r19, r16 ; our claimed address?
|
||||||
brne appNetworkHandleMsgDenyAddr_end ; nope, jump
|
brne appNetworkHandleMsgDenyAddr_end ; nope, jump
|
||||||
; try next address (if any left)
|
; try next address (if any left)
|
||||||
ldd r17, Y+NET_IFACE_OFFS_RANGE_END
|
ldd r17, Y+NET_IFACE_OFFS_RANGE_END
|
||||||
inc r16
|
inc r16 ; RANGE_BEGIN+1
|
||||||
cp r16, r17
|
cp r17, r16 ; smaller than or equal to RANGE_END?
|
||||||
brcs appNetworkHandleMsgDenyAddr_claimNext
|
brcc appNetworkHandleMsgDenyAddr_claimNext
|
||||||
; out of addresses, start completely new after some waiting time
|
; out of addresses, start completely new after some waiting time
|
||||||
rcall appNetworkResetState
|
rcall appNetworkResetState
|
||||||
ldi r16, 200 ; wait for 20s before trying whole process again
|
ldi r16, 200 ; wait for 20s before trying whole process again
|
||||||
@@ -397,6 +402,7 @@ appNetworkResetState:
|
|||||||
cpi r16, 0xff
|
cpi r16, 0xff
|
||||||
breq appNetworkResetState_setRangeEnd
|
breq appNetworkResetState_setRangeEnd
|
||||||
std Y+NET_IFACE_OFFS_RANGE_BEGIN, r16
|
std Y+NET_IFACE_OFFS_RANGE_BEGIN, r16
|
||||||
|
std Y+NET_IFACE_OFFS_ADDRESS, r16 ; preset address from EEPROM
|
||||||
appNetworkResetState_setRangeEnd:
|
appNetworkResetState_setRangeEnd:
|
||||||
ldi r16, APP_NETWORK_ADDRESS_RANGE_END ; last possible address+1
|
ldi r16, APP_NETWORK_ADDRESS_RANGE_END ; last possible address+1
|
||||||
std Y+NET_IFACE_OFFS_RANGE_END, r16
|
std Y+NET_IFACE_OFFS_RANGE_END, r16
|
||||||
@@ -409,17 +415,17 @@ appNetworkResetState_setRangeEnd:
|
|||||||
; @routine appNetworkGetAddressFromEeprom
|
; @routine appNetworkGetAddressFromEeprom
|
||||||
;
|
;
|
||||||
; @return R16 address from EEPROM
|
; @return R16 address from EEPROM
|
||||||
; @clobbers R15, X
|
; @clobbers X
|
||||||
|
|
||||||
appNetworkGetAddressFromEeprom:
|
appNetworkGetAddressFromEeprom:
|
||||||
ldi xl, LOW(EEPROM_OFFS_COMADDR)
|
|
||||||
ldi xh, HIGH(EEPROM_OFFS_COMADDR)
|
|
||||||
in r15, SREG
|
|
||||||
push r15
|
push r15
|
||||||
|
in r15, SREG
|
||||||
cli
|
cli
|
||||||
|
ldi xl, LOW(EEPROM_OFFS_COMADDR)
|
||||||
|
ldi xh, HIGH(EEPROM_OFFS_COMADDR)
|
||||||
rcall Utils_ReadEepromIncr ; (R16)
|
rcall Utils_ReadEepromIncr ; (R16)
|
||||||
|
out SREG, r15
|
||||||
pop r15
|
pop r15
|
||||||
out SREG, r15
|
|
||||||
ret
|
ret
|
||||||
; @end
|
; @end
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user