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

View File

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