comproto: simplified some enqueue routines. Renamed i2c to twi.

- simplified CPRO_EnqueueComSendStats
- simplified CPRO_EnqueueValue
- renamed i2c to twi
This commit is contained in:
Martin Preuss
2023-02-05 15:37:36 +01:00
parent d4081840e0
commit 746cec2d45
2 changed files with 59 additions and 112 deletions

View File

@@ -9,7 +9,7 @@
.equ CPRO_CMD_PONG = 11
.equ CPRO_CMD_COMSENDSTATS = 20
.equ CPRO_CMD_COMRECVSTATS = 21
.equ CPRO_CMD_I2CBUSMEMBER = 30
.equ CPRO_CMD_TWIBUSMEMBER = 30
.equ CPRO_CMD_DEBUG = 40
.equ CPRO_CMD_VALUE = 50
.equ CPRO_CMD_NEED_ADDRESS = 60
@@ -25,7 +25,7 @@
.equ CPRO_PAYLOAD_FLAGS_NUM0 = 0x20
.equ CPRO_PAYLOAD_FLAGS_NUM1 = 0x40
.equ CPRO_PAYLOAD_FLAGS_NUM3 = 0x80
.equ CPRO_PAYLOAD_FLAGS_SHIFT_NUM = 5
@@ -93,59 +93,30 @@ CPRO_EnqueueComSendStats:
rcall COM_AllocBufferAndGetXY ; (r16, r17, r21)
pop r16
brcc CPRO_EnqueueComSendStats_error
clr r17 ; r17: XOR byte
; write header (dest address, msg length)
st X+, r16 ; destination address
eor r17, r16
ldi r16, 12 ; 8 bytes payload
st X+, r16
eor r17, r16
; write payload
ldi r16, CPRO_CMD_COMSENDSTATS ; 0: cmd
st X+, r16
eor r17, r16
lds r16, comAddress ; 1: src addr
st X+, r16
eor r17, r16
ldi r17, CPRO_PAYLOAD_FLAGS_SECONDS | (6<<CPRO_PAYLOAD_FLAGS_SHIFT_NUM) ; seconds + 6 bytes payload
ldi r18, CPRO_CMD_COMSENDSTATS
push xh
push xl
rcall cproBeginMsgWithVariablePayload ; (R3, R4, R16, R17, R18, R19, R20, R21, X)
lds r16, comStatsPacketsOut ; 6: packets out
st X+, r16
lds r16, comStatsPacketsOut+1
st X+, r16
lds r16, comStatsCollisions ; 8: collisions
st X+, r16
lds r16, comStatsCollisions+1
st X+, r16
lds r16, comStatsAborted ; 10: aborted
st X+, r16
lds r16, comStatsAborted+1
st X+, r16
pop xl
pop xh
rcall cproCalcAndAddChecksumByte
lds r16, timerModuleCounterSecs ; 2-5: current seconds counter
st X+, r16
eor r17, r16
lds r16, timerModuleCounterSecs+1
st X+, r16
eor r17, r16
lds r16, timerModuleCounterSecs+2
st X+, r16
eor r17, r16
lds r16, timerModuleCounterSecs+3
st X+, r16
eor r17, r16
lds r16, comStatsPacketsOut ; 6: packets out
st X+, r16
eor r17, r16
lds r16, comStatsPacketsOut+1
st X+, r16
eor r17, r16
lds r16, comStatsCollisions ; 8: collisions
st X+, r16
eor r17, r16
lds r16, comStatsCollisions+1
st X+, r16
eor r17, r16
lds r16, comStatsAborted ; 10: aborted
st X+, r16
eor r17, r16
lds r16, comStatsAborted+1
st X+, r16
eor r17, r16
; store XOR byte
st X+, r17
; mark buffer as enqueued with PRIO "info" (limited amount of retries)
ldi r20, COM_BUFFER_PRIO_INFO
; mark buffer as enqueued with PRIO "important" (higher retry count)
ldi r20, COM_BUFFER_PRIO_IMPORTANT
rcall COM_EnqueuePacket ; (R15, R16)
brcc CPRO_EnqueueComSendStats_error
pop r15
@@ -161,7 +132,7 @@ CPRO_EnqueueComSendStats_error:
; ---------------------------------------------------------------------------
; Enqueue a I2C Bus Member packet.
; Enqueue a TWI Bus Member packet.
;
; IN:
; - R16: destination address
@@ -171,11 +142,11 @@ CPRO_EnqueueComSendStats_error:
; - CFLAG: set if okay, clear otherwise
; MODIFIED REGS: R16, R17, R20, X (R15, Y)
CPRO_EnqueueI2cBusMember:
CPRO_EnqueueTwiBusMember:
push r16
rcall COM_AllocBufferAndGetXY ; (r16, r17, r21)
pop r16
brcc CPRO_EnqueueI2cBusMember_error
brcc CPRO_EnqueueTwiBusMember_error
clr r17 ; r17: XOR byte
; write header (dest address, msg length)
st X+, r16 ; destination address
@@ -184,7 +155,7 @@ CPRO_EnqueueI2cBusMember:
st X+, r16
eor r17, r16
; write payload
ldi r16, CPRO_CMD_I2CBUSMEMBER ; send command
ldi r16, CPRO_CMD_TWIBUSMEMBER ; send command
st X+, r16
eor r17, r16
lds r16, comAddress ; send source address
@@ -201,10 +172,10 @@ CPRO_EnqueueI2cBusMember:
; mark buffer as enqueued with PRIO "info" (limited amount of retries)
ldi r20, COM_BUFFER_PRIO_INFO
rcall COM_EnqueuePacket ; (R15, R16)
brcc CPRO_EnqueueI2cBusMember_error
brcc CPRO_EnqueueTwiBusMember_error
sec
ret
CPRO_EnqueueI2cBusMember_error:
CPRO_EnqueueTwiBusMember_error:
clc
ret
@@ -271,58 +242,34 @@ CPRO_EnqueueDebug_error:
; - R22: value type
; OUT:
; - CFLAG: set if okay, clear otherwise
; MODIFIED REGS:
; MODIFIED REGS: R6, R7, R8, R9, R10, R11, R12, R16, R17, X, Y (R3, R4, R15, R16, R17, R18, R19, R20, R21)
CPRO_EnqueueValue:
push r16
push r17
push r21
rcall COM_AllocBufferAndGetXY ; (r16, r17, r21)
pop r21
pop r17
pop r16
mov r6, r16
mov r7, r17
mov r9, r19
mov r10, r20
mov r11, r21
mov r12, r22
rcall COM_AllocBufferAndGetXY ; (r16, r17, r21)
brcc CPRO_EnqueueValue_error
clr r1 ; r1: XOR byte
; write header (dest address, msg length)
st X+, r16 ; destination address
eor r1, r16
ldi r16, 12 ; 12 bytes payload
st X+, r16 ; msglen
eor r1, r16
; write payload
ldi r16, CPRO_CMD_VALUE ; 0: msg type
st X+, r16
eor r1, r16
lds r16, comAddress ; 1: source address
st X+, r16
eor r1, r16
lds r16, timerModuleCounterSecs ; 2-5: current seconds counter
st X+, r16
eor r1, r16
lds r16, timerModuleCounterSecs+1
st X+, r16
eor r1, r16
lds r16, timerModuleCounterSecs+2
st X+, r16
eor r1, r16
lds r16, timerModuleCounterSecs+3
st X+, r16
eor r1, r16
st X+, r17 ; 6: value id
eor r1, r17
st X+, r22 ; 7: value type
eor r1, r22
st X+, r18 ; 8: low value
eor r1, r18
st X+, r19 ; 9: high value
eor r1, r19
st X+, r20 ; 10: low denom
eor r1, r20
st X+, r21 ; 11: high denom
eor r1, r21
; store XOR byte
mov r16, r1
st X+, r16
push xh
push xl
ldi r17, CPRO_PAYLOAD_FLAGS_SECONDS | (6<<CPRO_PAYLOAD_FLAGS_SHIFT_NUM)
ldi r18, CPRO_CMD_VALUE
rcall cproBeginMsgWithVariablePayload ; (R3, R4, R16, R17, R18, R19, R20, R21, X)
st X+, r7 ; 6: value id
st X+, r12 ; 7: value type
st X+, r8 ; 8: low value
st X+, r9 ; 9: high value
st X+, r10 ; 10: low denom
st X+, r11 ; 11: high denom
pop xl
pop xh
rcall cproCalcAndAddChecksumByte
; mark buffer as enqueued with PRIO "normal" (slightly limited number of retries)
ldi r20, COM_BUFFER_PRIO_NORMAL
rcall COM_EnqueuePacket ; (R15, R16)
@@ -467,7 +414,7 @@ cproBeginMsgWithVariablePayload_l2:
; - X : pointer to packet buffer
; OUT:
; - CFLAG: set if okay, clear otherwise
; MODIFIED REGS: R16, R17, R18, R19, R20, R21, X (R3, R4, R6)
; MODIFIED REGS: R16, R17, R18, X
cproCalcAndAddChecksumByte:
clr r17

View File

@@ -397,7 +397,7 @@ TWI_Master_ScanNext_inc:
mov r2, r16
ldi r16, 255 ; send to all
push r15
rcall CPRO_EnqueueI2cBusMember
rcall CPRO_EnqueueTwiBusMember
pop r15
rjmp TWI_Master_ScanNext_end
TWI_Master_ScanNext_noAnswer:
@@ -406,7 +406,7 @@ TWI_Master_ScanNext_noAnswer:
; clr r2
; ldi r16, 255 ; send to all
; push r15
; rcall CPRO_EnqueueI2cBusMember
; rcall CPRO_EnqueueTwiBusMember
; pop r15
rjmp TWI_Master_ScanNext_end
TWI_Master_ScanNext_abort: