avr: started working on base system vs. main system.
base system will be a base system which can be used to flash and start the main system.
This commit is contained in:
100
avr/comproto.asm
100
avr/comproto.asm
@@ -18,6 +18,12 @@
|
||||
.equ CPRO_CMD_DENY_ADDRESS = 63
|
||||
.equ CPRO_CMD_ADDRESS_RANGE = 64
|
||||
|
||||
.equ CPRO_CMD_FLASH_START = 70
|
||||
.equ CPRO_CMD_FLASH_END = 71
|
||||
.equ CPRO_CMD_FLASH_ADDR = 72
|
||||
.equ CPRO_CMD_FLASH_DATA = 73
|
||||
.equ CPRO_CMD_FLASH_RSP = 74
|
||||
|
||||
|
||||
; flags for variable payload enqueue function
|
||||
.equ CPRO_PAYLOAD_FLAGS_SECONDS = 0x01
|
||||
@@ -31,15 +37,20 @@
|
||||
.equ CPRO_PAYLOAD_FLAGS_SHIFT_NUM = 5
|
||||
|
||||
|
||||
.equ CPRO_PACKET_OFFS_DESTADDR = 0
|
||||
.equ CPRO_PACKET_OFFS_MSGLEN = 1
|
||||
.equ CPRO_PACKET_OFFS_CMD = 2
|
||||
.equ CPRO_PACKET_OFFS_SRCADDR = 3
|
||||
.equ CPRO_PACKET_OFFS_PAYLOAD = 4
|
||||
.equ CPRO_PACKET_HAVEADDR_OFFS_ADDRESS = COM_MSG_OFFS_PAYLOAD+4
|
||||
.equ CPRO_PACKET_CLAIMADDR_OFFS_ADDRESS = COM_MSG_OFFS_PAYLOAD+4
|
||||
.equ CPRO_PACKET_DENYADDR_OFFS_ADDRESS = COM_MSG_OFFS_PAYLOAD+4
|
||||
|
||||
.equ CPRO_PACKET_FLASH_START_OFFS_MSGNUM = COM_MSG_OFFS_PAYLOAD+0 ; 2 bytes
|
||||
.equ CPRO_PACKET_FLASH_START_OFFS_ADDR = COM_MSG_OFFS_PAYLOAD+2 ; 2 bytes
|
||||
|
||||
.equ CPRO_PACKET_FLASH_ADDR_OFFS_MSGNUM = COM_MSG_OFFS_PAYLOAD+0 ; 2 bytes
|
||||
.equ CPRO_PACKET_FLASH_ADDR_OFFS_ADDR = COM_MSG_OFFS_PAYLOAD+2 ; 2 bytes
|
||||
|
||||
.equ CPRO_PACKET_FLASH_DATA_OFFS_MSGNUM = COM_MSG_OFFS_PAYLOAD+0 ; 2 bytes
|
||||
.equ CPRO_PACKET_FLASH_DATA_OFFS_ADDR = COM_MSG_OFFS_PAYLOAD+2 ; 2 bytes
|
||||
.equ CPRO_PACKET_FLASH_DATA_OFFS_DATA = COM_MSG_OFFS_PAYLOAD+4 ; 2 bytes
|
||||
|
||||
.equ CPRO_PACKET_HAVEADDR_OFFS_ADDRESS = 8
|
||||
.equ CPRO_PACKET_CLAIMADDR_OFFS_ADDRESS = 8
|
||||
.equ CPRO_PACKET_DENYADDR_OFFS_ADDRESS = 8
|
||||
|
||||
.equ CPRO_WAITTIME_GETADDR = 130
|
||||
.equ CPRO_WAITTIME_CLAIMADDR = 17
|
||||
@@ -64,11 +75,13 @@
|
||||
|
||||
|
||||
cproDataBegin:
|
||||
#ifndef BASE_SYSTEM
|
||||
cproMode: .byte 1 ; "normal", "waitForHaveAddress", "samplingAddresses", "claimAddress"
|
||||
cproAddrRangeBegin: .byte 1
|
||||
cproAddrRangeEnd: .byte 1
|
||||
cproAddressWaitCounter: .byte 1 ; counter for seconds to wait for all nodes to respond
|
||||
cproUsedAddresses: .byte 16 ; one bit per address known to b in use
|
||||
#endif
|
||||
cproDataEnd:
|
||||
|
||||
|
||||
@@ -93,6 +106,7 @@ CPRO_Init:
|
||||
|
||||
|
||||
CPRO_OnEverySecond:
|
||||
#ifndef BASE_SYSTEM
|
||||
lds r17, cproMode
|
||||
cpi r17, CPRO_MODE_NORMAL
|
||||
breq CPRO_OnEverySecond_done
|
||||
@@ -121,6 +135,7 @@ CPRO_OnEverySecond_l6:
|
||||
brne CPRO_OnEverySecond_done
|
||||
rjmp cproHandle1sReclaimingAddr
|
||||
CPRO_OnEverySecond_done:
|
||||
#endif
|
||||
ret
|
||||
|
||||
|
||||
@@ -137,11 +152,12 @@ CPRO_OnEverySecond_done:
|
||||
; USED: depending on called routines
|
||||
|
||||
CPRO_OnPacketReceived:
|
||||
ldd r16, y+(COM_BUFFER_OFFS_DATA+CPRO_PACKET_OFFS_CMD)
|
||||
ldd r16, y+(COM_BUFFER_OFFS_DATA+COM_MSG_OFFS_CMD)
|
||||
cpi r16, CPRO_CMD_PING
|
||||
brne CPRO_OnPacketReceived_l1
|
||||
rjmp cproHandlePing
|
||||
CPRO_OnPacketReceived_l1:
|
||||
#ifndef BASE_SYSTEM
|
||||
cpi r16, CPRO_CMD_NEED_ADDRESS
|
||||
brne CPRO_OnPacketReceived_l2
|
||||
rjmp cproHandlePckNeedAddr
|
||||
@@ -162,12 +178,13 @@ CPRO_OnPacketReceived_l5:
|
||||
brne CPRO_OnPacketReceived_l6
|
||||
rjmp cproHandlePckClaimAddr
|
||||
CPRO_OnPacketReceived_l6:
|
||||
#endif
|
||||
clc
|
||||
ret
|
||||
|
||||
|
||||
cproHandlePing:
|
||||
ldd r16, y+(COM_BUFFER_OFFS_DATA+CPRO_PACKET_OFFS_SRCADDR)
|
||||
ldd r16, y+(COM_BUFFER_OFFS_DATA+COM_MSG_OFFS_SRCADDR)
|
||||
tst r16
|
||||
breq cproHandlePing_notHandled
|
||||
rcall CPRO_EnqueuePong
|
||||
@@ -214,6 +231,7 @@ CPRO_EnqueuePong:
|
||||
|
||||
|
||||
|
||||
#ifndef BASE_SYSTEM
|
||||
; ---------------------------------------------------------------------------
|
||||
; Enqueue a COM Send stats packet.
|
||||
;
|
||||
@@ -266,9 +284,11 @@ CPRO_EnqueueComSendStats_error:
|
||||
out SREG, r15
|
||||
clc
|
||||
ret
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
#ifndef BASE_SYSTEM
|
||||
; ---------------------------------------------------------------------------
|
||||
; Enqueue a TWI Bus Member packet.
|
||||
;
|
||||
@@ -316,9 +336,11 @@ CPRO_EnqueueTwiBusMember:
|
||||
CPRO_EnqueueTwiBusMember_error:
|
||||
clc
|
||||
ret
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
#ifndef BASE_SYSTEM
|
||||
; ---------------------------------------------------------------------------
|
||||
; Enqueue a DEBUG packet.
|
||||
;
|
||||
@@ -366,9 +388,11 @@ CPRO_EnqueueDebug:
|
||||
CPRO_EnqueueDebug_error:
|
||||
clc
|
||||
ret
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
#ifndef BASE_SYSTEM
|
||||
; ---------------------------------------------------------------------------
|
||||
; Enqueue a VALUE packet.
|
||||
;
|
||||
@@ -419,9 +443,11 @@ CPRO_EnqueueValue:
|
||||
CPRO_EnqueueValue_error:
|
||||
clc
|
||||
ret
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
#ifndef BASE_SYSTEM
|
||||
; ---------------------------------------------------------------------------
|
||||
; Enqueue a NEEDADDRESS packet.
|
||||
;
|
||||
@@ -434,9 +460,11 @@ CPRO_EnqueueValue_error:
|
||||
CPRO_EnqueueNeedAddress:
|
||||
ldi r18, CPRO_CMD_NEED_ADDRESS
|
||||
rjmp cproEnqueueAddressPacket
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
#ifndef BASE_SYSTEM
|
||||
; ---------------------------------------------------------------------------
|
||||
; Enqueue a HAVE_ADDRESS packet.
|
||||
;
|
||||
@@ -450,9 +478,11 @@ CPRO_EnqueueHaveAddress:
|
||||
ldi r18, CPRO_CMD_HAVE_ADDRESS
|
||||
lds r19, comAddress
|
||||
rjmp cproEnqueueAddressPacket
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
#ifndef BASE_SYSTEM
|
||||
; ---------------------------------------------------------------------------
|
||||
; Enqueue a CLAIM_ADDRESS packet.
|
||||
;
|
||||
@@ -465,9 +495,11 @@ CPRO_EnqueueHaveAddress:
|
||||
CPRO_EnqueueClaimAddress:
|
||||
ldi r18, CPRO_CMD_CLAIM_ADDRESS
|
||||
rjmp cproEnqueueAddressPacket
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
#ifndef BASE_SYSTEM
|
||||
; ---------------------------------------------------------------------------
|
||||
; Enqueue a DENY_ADDRESS packet.
|
||||
;
|
||||
@@ -481,9 +513,11 @@ CPRO_EnqueueDenyAddress:
|
||||
ldi r18, CPRO_CMD_DENY_ADDRESS
|
||||
lds r19, comAddress
|
||||
rjmp cproEnqueueAddressPacket
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
#ifndef BASE_SYSTEM
|
||||
; ---------------------------------------------------------------------------
|
||||
; cproEnqueueAddressPacket
|
||||
; Enqueue a NEED/HAVE/CLAIM ADDRESS packet.
|
||||
@@ -518,6 +552,7 @@ cproEnqueueAddressPacket:
|
||||
cproEnqueueAddressPacket_error:
|
||||
clc
|
||||
ret
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
@@ -667,6 +702,51 @@ cproCalcPayloadSize_l2:
|
||||
|
||||
|
||||
|
||||
#ifdef WITH_FLASH
|
||||
; ---------------------------------------------------------------------------
|
||||
; Enqueue a FLASHDATA_ACK packet.
|
||||
;
|
||||
; IN:
|
||||
; - R16: destination address
|
||||
; - R17: ACK(1) or NAK(0)
|
||||
; - R19:R18: msg num
|
||||
; OUT:
|
||||
; - CFLAG: set if okay, clear otherwise
|
||||
; MODIFIED REGS: R6, R7, R8, R9, R10, R11, R12, R16, R17, X, Y (R3, R4, R15, R16, R17, R18, R19, R20, R21)
|
||||
|
||||
CPRO_EnqueueFlashRsp:
|
||||
mov r6, r16
|
||||
mov r7, r17
|
||||
mov r8, r18
|
||||
mov r9, r19
|
||||
|
||||
rcall COM_AllocBufferAndGetXY ; (r16, r17, r21)
|
||||
brcc CPRO_EnqueueFlashRsp_error
|
||||
|
||||
push xh
|
||||
push xl
|
||||
mov r16, r6
|
||||
ldi r17, CPRO_PAYLOAD_FLAGS_SECONDS | (3<<CPRO_PAYLOAD_FLAGS_SHIFT_NUM)
|
||||
ldi r18, CPRO_CMD_FLASH_RSP
|
||||
rcall cproBeginMsgWithVariablePayload ; (R3, R4, R16, R17, R18, R19, R20, R21, X)
|
||||
st X+, r8 ; 4: msg num (low)
|
||||
st X+, r9 ; 5: msg num (high)
|
||||
st X+, r7 ; 6: ACK or NAK
|
||||
pop xl
|
||||
pop xh
|
||||
rcall cproCalcAndAddChecksumByte
|
||||
|
||||
; mark buffer as enqueued with PRIO "important" (higher number of retries)
|
||||
ldi r20, COM_BUFFER_PRIO_IMPORTANT
|
||||
rcall COM_EnqueuePacket ; (R15, R16)
|
||||
brcc CPRO_EnqueueFlashRsp_error
|
||||
sec
|
||||
ret
|
||||
CPRO_EnqueueFlashRsp_error:
|
||||
clc
|
||||
ret
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user