avr: reorganized common code.
This commit is contained in:
@@ -25,7 +25,6 @@ utilsDateString: .db "%YEAR%-%MONTH%-%DAY%-%HOUR%:%MINUTE%", 0, 0
|
||||
|
||||
|
||||
|
||||
|
||||
; ---------------------------------------------------------------------------
|
||||
; @routine Utils_FillSram @global
|
||||
;
|
||||
@@ -49,141 +48,6 @@ Utils_FillSram_end:
|
||||
|
||||
|
||||
|
||||
; ---------------------------------------------------------------------------
|
||||
; Increment a 32 bit counter at the address given by X.
|
||||
; IN:
|
||||
; - X: Address of the 4 byte counter (1. byte is LSB)
|
||||
; OUT:
|
||||
; - nothing
|
||||
; MODIFIED REGISTERS: r18, r19, r20, r21, 22
|
||||
|
||||
Utils_IncrementCounter32:
|
||||
ld r18, x+
|
||||
ld r19, x+
|
||||
ld r20, x+
|
||||
ld r21, x
|
||||
ldi r22, 1
|
||||
add r18, r22
|
||||
clr r22 ; doesn't affect carry flag
|
||||
adc r19, r22
|
||||
adc r20, r22
|
||||
adc r21, r22
|
||||
st x, r21
|
||||
st -x, r20
|
||||
st -x, r19
|
||||
st -x, r18
|
||||
ret
|
||||
|
||||
|
||||
|
||||
; ---------------------------------------------------------------------------
|
||||
; Increment a 16 bit counter at the address given by X.
|
||||
; IN:
|
||||
; - X: Address of the 2 byte counter (1. byte is LSB)
|
||||
; OUT:
|
||||
; - nothing
|
||||
; MODIFIED REGISTERS: r18, r19, 22
|
||||
|
||||
Utils_IncrementCounter16:
|
||||
ld r18, x+
|
||||
ld r19, x
|
||||
ldi r22, 1
|
||||
add r18, r22
|
||||
clr r22 ; doesn't affect carry flag
|
||||
adc r19, r22
|
||||
st x, r19
|
||||
st -x, r18
|
||||
ret
|
||||
; @end
|
||||
|
||||
|
||||
|
||||
; ---------------------------------------------------------------------------
|
||||
; @routine Utils_ReadUid
|
||||
|
||||
; Read UID from EEPROM.
|
||||
;
|
||||
; @return r21:r20:r19:r18 UID
|
||||
; @clobbers R16, X
|
||||
|
||||
Utils_ReadUid:
|
||||
ldi xl, LOW(EEPROM_OFFS_UUID)
|
||||
ldi xh, HIGH(EEPROM_OFFS_UUID)
|
||||
rcall Eeprom_ReadByte ; r16=byte read (none)
|
||||
brcc Utils_ReadUid_ret
|
||||
mov r18, r16
|
||||
adiw xh:xl, 1
|
||||
|
||||
rcall Eeprom_ReadByte ; r16=byte read (none)
|
||||
brcc Utils_ReadUid_ret
|
||||
mov r19, r16
|
||||
adiw xh:xl, 1
|
||||
|
||||
rcall Eeprom_ReadByte ; r16=byte read (none)
|
||||
brcc Utils_ReadUid_ret
|
||||
mov r20, r16
|
||||
adiw xh:xl, 1
|
||||
|
||||
rcall Eeprom_ReadByte ; r16=byte read (none)
|
||||
brcc Utils_ReadUid_ret
|
||||
mov r21, r16
|
||||
|
||||
Utils_ReadUid_ret:
|
||||
ret
|
||||
; @end
|
||||
|
||||
|
||||
|
||||
; ---------------------------------------------------------------------------
|
||||
; @routine Utils_SetupUid @global
|
||||
;
|
||||
; Reads UID from EEPROM. If not set generate a new one and store it in EEPROM.
|
||||
;
|
||||
; @return CFLAG set if new generated, cleared if there already was one.
|
||||
; @clobbers R16, R18, R19, R20, R21, X (R17)
|
||||
|
||||
Utils_SetupUid:
|
||||
rcall Utils_ReadUid ; (R16, X)
|
||||
cp r18, r19 ; all the same?
|
||||
brne Utils_SetupUid_uidOkay ; different, jmp
|
||||
cp r18, r20
|
||||
brne Utils_SetupUid_uidOkay ; different, jmp
|
||||
cp r18, r21
|
||||
brne Utils_SetupUid_uidOkay ; different, jmp
|
||||
|
||||
ldi xl, LOW(EEPROM_OFFS_UUID) ; all the same, generate new uid
|
||||
ldi xh, HIGH(EEPROM_OFFS_UUID)
|
||||
rcall RAND_PseudoRandom ; byte 0 (R16, R17, R18, R19)
|
||||
inc r16
|
||||
rcall Eeprom_WriteByteIfChanged ; (r17)
|
||||
brcc Utils_SetupUid_ret
|
||||
adiw xh:xl, 1
|
||||
|
||||
rcall RAND_PseudoRandom ; byte 1
|
||||
rcall Eeprom_WriteByteIfChanged ; (r17)
|
||||
brcc Utils_SetupUid_ret
|
||||
adiw xh:xl, 1
|
||||
|
||||
rcall RAND_PseudoRandom ; byte 2
|
||||
rcall Eeprom_WriteByteIfChanged ; (r17)
|
||||
brcc Utils_SetupUid_ret
|
||||
adiw xh:xl, 1
|
||||
|
||||
rcall RAND_PseudoRandom ; byte 3
|
||||
rcall Eeprom_WriteByteIfChanged ; (r17)
|
||||
brcc Utils_SetupUid_ret
|
||||
|
||||
rcall RAND_UpdateSeedInEeprom ; (R16, R17, R18, R19, X)
|
||||
|
||||
Utils_SetupUid_uidOkay:
|
||||
sec
|
||||
Utils_SetupUid_ret:
|
||||
ret
|
||||
; @end
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
UTILS_END:
|
||||
.equ MODULE_SIZE_UTILS = UTILS_END-UTILS_BEGIN
|
||||
|
||||
Reference in New Issue
Block a user