avr: decreased verbosity. minor fixes.

- address claiming modes now work
This commit is contained in:
Martin Preuss
2023-04-12 23:32:08 +02:00
parent ded08b8c47
commit 86b45a58e5
8 changed files with 70 additions and 131 deletions

View File

@@ -64,7 +64,7 @@
#define MODULES_COM_WITH_ADDR_PROTO #define MODULES_COM_WITH_ADDR_PROTO
#define MODULES_LED #define MODULES_LED
#define MODULES_TWI_MASTER #define MODULES_TWI_MASTER
#define MODULES_LCD ;#define MODULES_LCD
#define MODULES_SI7021 #define MODULES_SI7021
#define MODULES_STATS #define MODULES_STATS
@@ -223,20 +223,37 @@
; includes ; includes
.include "utils.asm" .include "utils.asm"
.include "timer.asm" #ifdef MODULES_TIMER
.include "timer.asm"
#endif
#ifdef MODULES_LED
.include "led.asm" .include "led.asm"
.include "com2.asm" #endif
.include "comproto.asm" #ifdef MODULES_COM
.include "comproto_addr.asm" .include "com2.asm"
.include "comproto_recvstats.asm" #ifdef MODULES_COM_WITH_ADDR_PROTO
.include "comproto_sysstats.asm" .include "comproto.asm"
.include "comproto_memstats.asm" .include "comproto_addr.asm"
.include "comproto_pong.asm" .include "comproto_recvstats.asm"
;.include "comproto_values.asm" .include "comproto_sendstats.asm"
.include "twimaster.asm" .include "comproto_sysstats.asm"
.include "lcd.asm" .include "comproto_memstats.asm"
.include "si7021.asm" .include "comproto_pong.asm"
.include "stats.asm" ; .include "comproto_values.asm"
#endif
#endif
#ifdef MODULES_TWI_MASTER
.include "twimaster.asm"
#endif
#ifdef MODULES_LCD
.include "lcd.asm"
#endif
#ifdef MODULES_SI7021
.include "si7021.asm"
#endif
#ifdef MODULES_STATS
.include "stats.asm"
#endif
@@ -264,7 +281,7 @@ sramTimerSI7021Measure: .byte 2
ledA3Flash: .db DDRA+0x20, PORTA+0x20, PINA+0x20, (1<<PORTA3) ledA3Flash: .db DDRA+0x20, PORTA+0x20, PINA+0x20, (1<<PORTA3)
blinkPattern: .db 2, 50, 0xff, 0xff ; 1 short blink, 2s pause, restart blinkPattern: .db 2, 50, 0xff, 0xff ; 1 short blink, 2s pause, restart
;blinkPattern2: .db 10, 20, 0xff, 0xff ; 1 long blink, 2s pause, restart blinkPattern2: .db 2, 2, 0xff, 0xff ; 1 short blink, short pause, restart
@@ -285,7 +302,7 @@ timerList:
.dw sramPeriodicalLcdMark, periodicalLcdMark, 0, 1 ; every sec .dw sramPeriodicalLcdMark, periodicalLcdMark, 0, 1 ; every sec
.dw sramTimerWriteStats, writeStats, 0, 10 .dw sramTimerWriteStats, writeStats, 0, 10
#endif #endif
; .dw sramTimerSI7021Measure, SI7021_PeriodicMeasurement, 0, 30 ; every 30s .dw sramTimerSI7021Measure, SI7021_PeriodicMeasurement, 0, 30 ; every 30s
; .dw sramTimerEnqueueValues, Main_SendValueMsg, TIMER_FLAGS_IF_ADDR, 60 ; every 1m ; .dw sramTimerEnqueueValues, Main_SendValueMsg, TIMER_FLAGS_IF_ADDR, 60 ; every 1m
.dw 0 ; end of list .dw 0 ; end of list
@@ -300,21 +317,6 @@ timerList:
; Called on first time run, i.e. on system start. No arguments, no results. ; Called on first time run, i.e. on system start. No arguments, no results.
onSystemStart: onSystemStart:
ldi r16, 2 ; DEBUG: set static address
sts com2Address, r16
; rcall printStartSendPackage
; ldi r16, 0xff ; send to everybody
; ldi xl, LOW(com2SendBuffer)
; ldi xh, HIGH(com2SendBuffer)
; rcall CPRO_WriteComRecvStats
; rcall printStartSendPackage
; rcall COM2_SendPacket
; rcall printEndSendPackage
; rcall printSendStats
ret ret
@@ -322,14 +324,12 @@ onSystemStart:
periodicalLcdMark: periodicalLcdMark:
rcall printTimerMark rcall printTimerMark
ret ret
#endif
writeStats: writeStats:
sbi PINA, PORTA2 ; debug (toggle)
rcall printSendStats rcall printSendStats
ret ret
#endif
@@ -364,8 +364,7 @@ onEvery100ms:
; USED: depending on called routines ; USED: depending on called routines
onPacketReceived: onPacketReceived:
; rcall CPRO_OnPacketReceived rcall CPRO_OnPacketReceived
ret ret

View File

@@ -71,7 +71,6 @@
cproAddressDataBegin: cproAddressDataBegin:
cproAddressFlags: .byte 1
cproAddrRangeBegin: .byte 1 cproAddrRangeBegin: .byte 1
cproAddrRangeEnd: .byte 1 cproAddrRangeEnd: .byte 1
cproUsedAddresses: .byte 16 ; one bit per address known to b in use cproUsedAddresses: .byte 16 ; one bit per address known to b in use
@@ -357,13 +356,13 @@ CPRO_SendNeedAddress:
; ;
; IN: ; IN:
; - nothing ; - nothing
; - R19: address to send
; OUT: ; OUT:
; - CFLAG: set if okay, clear otherwise ; - CFLAG: set if okay, clear otherwise
; MODIFIED REGS: R18 (R3, R4, R15, R16, R17, R18, R19, R20, R21, X, Y) ; MODIFIED REGS: R18 (R3, R4, R15, R16, R17, R18, R19, R20, R21, X, Y)
CPRO_SendHaveAddress: CPRO_SendHaveAddress:
ldi r18, CPRO_CMD_HAVE_ADDRESS ldi r18, CPRO_CMD_HAVE_ADDRESS
lds r19, com2Address
rjmp cproSendAddressPacket rjmp cproSendAddressPacket

View File

@@ -45,6 +45,7 @@ cproAddressOnTimerTable:
cproHandle1sSendingHaveAddress: cproHandle1sSendingHaveAddress:
lds r19, com2Address
rcall CPRO_SendHaveAddress rcall CPRO_SendHaveAddress
brcs cproHandle1sSendingHaveAddress_okay brcs cproHandle1sSendingHaveAddress_okay
rcall cproAddressSetTimer1s ; could not send, restart timer 1s and retry later rcall cproAddressSetTimer1s ; could not send, restart timer 1s and retry later
@@ -140,18 +141,20 @@ cproHandle1sClaimingAddr12_okay:
cproHandle1sClaimingAddr3: cproHandle1sClaimingAddr3:
cproHandle1sReclaimingAddr: cproHandle1sReclaimingAddr:
; claimed given address 3rd time or addr reclaimed, set address and enter "normal" mode ; claimed given address 3rd time or addr reclaimed, set address and enter "normal" mode
lds r19, cproAddrRangeBegin ; currently claimed address lds r19, cproAddrRangeBegin ; currently claimed address
sts com2Address, r19
rcall CPRO_SendHaveAddress rcall CPRO_SendHaveAddress
brcs cproHandle1sClaimingAddr3_okay brcs cproHandle1sClaimingAddr3_okay
rjmp cproAddressSetTimer1s ; could not send, restart timer 1s and retry later rjmp cproAddressSetTimer1s ; could not send, restart timer 1s and retry later
cproHandle1sClaimingAddr3_okay: cproHandle1sClaimingAddr3_okay:
in r15, SREG in r15, SREG
cli push r15
lds r16, cproAddrRangeBegin ; currently sent address is in cproAddrRangeBegin cli
sts com2Address, r16 ; write address into eeprom lds r16, com2Address ; currently sent address is in cproAddrRangeBegin
ldi xl, LOW(EEPROM_OFFS_COMADDR) ldi xl, LOW(EEPROM_OFFS_COMADDR) ; write address into eeprom
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
pop r15
out SREG, r15 out SREG, r15
ldi r16, CPRO_MODE_NORMAL ; set mode to "normal" ldi r16, CPRO_MODE_NORMAL ; set mode to "normal"
sts cproMode, r16 sts cproMode, r16

View File

@@ -63,7 +63,7 @@ cproPacketTypeTransTableEnd:
; position within table must be in same order as in table above! ; position within table must be in same order as in table above!
cproPacketTypeHandleTable: cproPacketTypeHandleTable:
.dw cproHandlePing, cproHandleNeedAddr, cproHandlePckHaveAddr, cproHandleAddrRange, cproHandleDenyAddr, cproHandleClaimAddr .dw cproHandlePing, cproHandleNeedAddr, cproHandleHaveAddr, cproHandleAddrRange, cproHandleDenyAddr, cproHandleClaimAddr
@@ -87,21 +87,22 @@ cproHandleNeedAddr_done:
cproHandlePckHaveAddr: cproHandleHaveAddr:
lds r17, cproMode lds r17, cproMode
cpi r17, CPRO_MODE_GETADDRSTARTED cpi r17, CPRO_MODE_GETADDRSTARTED
brne cproHandlePckHaveAddr_done brne cproHandleHaveAddr_done
; validate address ; validate address
adiw xh:xl, CPRO_PACKET_HAVEADDR_OFFS_ADDRESS adiw xh:xl, CPRO_PACKET_HAVEADDR_OFFS_ADDRESS
ld r16, x ld r16, x
sbiw xh:xl, CPRO_PACKET_HAVEADDR_OFFS_ADDRESS
tst r16 tst r16
breq cproHandlePckHaveAddr_done ; invalid address, ignore breq cproHandleHaveAddr_done ; invalid address, ignore
cpi r16, 127 cpi r16, 127
brcc cproHandlePckHaveAddr_done ; invalid address, ignore brcc cproHandleHaveAddr_done ; invalid address, ignore
; set bit corresponding to given address in bitfield of used addresses ; set bit corresponding to given address in bitfield of used addresses
dec r16 dec r16
rcall cproSetBitInBitfield rcall cproSetBitInBitfield
cproHandlePckHaveAddr_done: cproHandleHaveAddr_done:
sec sec
ret ret
@@ -136,9 +137,9 @@ cproHandleDenyAddr:
cpi r17, CPRO_MODE_CLAIMING_ADDR3+1 cpi r17, CPRO_MODE_CLAIMING_ADDR3+1
brcc cproHandleDenyAddr_notInClaimAddr13Mode brcc cproHandleDenyAddr_notInClaimAddr13Mode
; we are in one of the three CLAIM_ADDRESS modes and received a DENY_ADDR, check address ; we are in one of the three CLAIM_ADDRESS modes and received a DENY_ADDR, check address
adiw xh:xl, CPRO_PACKET_CLAIMADDR_OFFS_ADDRESS adiw xh:xl, CPRO_PACKET_DENYADDR_OFFS_ADDRESS
ld r16, x ld r16, x
sbiw xh:xl, CPRO_PACKET_CLAIMADDR_OFFS_ADDRESS sbiw xh:xl, CPRO_PACKET_DENYADDR_OFFS_ADDRESS
lds r17, cproAddrRangeBegin lds r17, cproAddrRangeBegin
cp r16, r17 cp r16, r17
brne cproHandleDenyAddr_done ; not our currently claimed address, ignore brne cproHandleDenyAddr_done ; not our currently claimed address, ignore

View File

@@ -46,7 +46,7 @@ CPRO_WriteComSendStats:
st X+, r16 st X+, r16
pop xl pop xl
pop xh pop xh
rcall comCalcAndAddChecksumByte ; (R16, R17, R18, R19, X) rcall com2CalcAndAddChecksumByte ; (R16, R17, R18, R19, X)
ret ret

View File

@@ -61,16 +61,18 @@ main:
rcall Led_SetPattern rcall Led_SetPattern
#endif #endif
; sbi DDRA, PORTA2 ; debug
; sbi PINA, PORTA2 ; debug (toggle)
; cbi PORTA, PORTA2 ; debug (on)
; sbi PORTA, PORTA2 ; debug (off)
; ldi r16, 1 ; ldi r16, 1
; sts twiMasterScanEnabled, r16 ; sts twiMasterScanEnabled, r16
main_loop: main_loop:
rcall runModulesUntilIdle rcall runModulesUntilIdle
sbi DDRA, PORTA2 ; debug
; sbi PINA, PORTA2 ; debug (toggle)
; cbi PORTA, PORTA2 ; debug (on)
; sbi PORTA, PORTA2 ; debug (off)
sei ; make sure interrupts really are enabled
; only modify SE, SM1 and SM0 ; only modify SE, SM1 and SM0
in r16, MCUCR in r16, MCUCR
ldi r17, (1<<SE) | (1<<SM1) | (1<<SM0) ldi r17, (1<<SE) | (1<<SM1) | (1<<SM0)
@@ -216,36 +218,6 @@ initialWait_l2: ; wait for 10ms
#ifdef MODULES_LCD #ifdef MODULES_LCD
printStartSendPackage:
in r15, SREG ; debug
push r15
cli
ldi r18, 1
ldi r19, 3
rcall LCD_SetCursor
ldi r16, 'S'
rcall LCD_PrintChar
ldi r16, ' '
rcall LCD_PrintChar
pop r15
out SREG, r15
ret
printEndSendPackage:
in r15, SREG ; debug
push r15
cli
ldi r18, 2
ldi r19, 3
rcall LCD_SetCursor
ldi r16, 'E'
rcall LCD_PrintChar
pop r15
out SREG, r15
ret
printTimerMark: printTimerMark:
in r15, SREG ; debug in r15, SREG ; debug
push r15 push r15
@@ -261,46 +233,6 @@ printTimerMark:
printSendStats: printSendStats:
#if 0
in r15, SREG ; debug
push r15
cli
ldi r18, 1
ldi r19, 5
rcall LCD_SetCursor
ldi zl, LOW(textStatsPacketsIn)
ldi zh, HIGH(textStatsPacketsIn)
rcall LCD_PrintFromFlash
lds r18, com2StatsPacketsIn
lds r19, com2StatsPacketsIn+1
rcall LCD_PrintHexWord
ldi r18, 1
ldi r19, 6
rcall LCD_SetCursor
ldi zl, LOW(textStatsPacketsOut)
ldi zh, HIGH(textStatsPacketsOut)
rcall LCD_PrintFromFlash
lds r18, com2StatsPacketsOut
lds r19, com2StatsPacketsOut+1
rcall LCD_PrintHexWord
ldi r18, 1
ldi r19, 7
rcall LCD_SetCursor
ldi zl, LOW(textStatsPacketsRecvErr)
ldi zh, HIGH(textStatsPacketsRecvErr)
rcall LCD_PrintFromFlash
lds r18, com2StatsBusyError
lds r19, com2StatsBusyError+1
rcall LCD_PrintHexWord
pop r15
out SREG, r15
ret
#else
in r15, SREG ; debug in r15, SREG ; debug
push r15 push r15
cli cli

View File

@@ -11,7 +11,8 @@
; *************************************************************************** ; ***************************************************************************
; defines ; defines
.equ STATS_POS_MAX = 3 .equ STATS_POS_MAX = 4
.equ STATS_POS_SEND = 4
.equ STATS_POS_RECV = 3 .equ STATS_POS_RECV = 3
.equ STATS_POS_SYS = 2 .equ STATS_POS_SYS = 2
.equ STATS_POS_MEM = 1 .equ STATS_POS_MEM = 1
@@ -77,11 +78,16 @@ Stats_Run_l2:
rcall CPRO_WriteMemStats rcall CPRO_WriteMemStats
rjmp Stats_Run_SendPacket rjmp Stats_Run_SendPacket
Stats_Run_l3: Stats_Run_l3:
cpi r17, STATS_POS_SEND
brne Stats_Run_l4
rcall CPRO_WriteComSendStats
rjmp Stats_Run_SendPacket
Stats_Run_l4:
; add more stats here ; add more stats here
rjmp Stats_Run_done rjmp Stats_Run_done
Stats_Run_SendPacket: Stats_Run_SendPacket:
rcall COM2_SendPacket rcall COM2_SendPacket
brcc Stats_Run_done ; only decreemnt counter if message successfully sent brcc Stats_Run_done ; only decrement counter if message successfully sent
lds r16, statsRemaining lds r16, statsRemaining
dec r16 dec r16
sts statsRemaining, r16 sts statsRemaining, r16

View File

@@ -542,7 +542,6 @@ Utils_WriteSeed:
; REGS: depends on called function ; REGS: depends on called function
Utils_TableJump: Utils_TableJump:
lds r16, cproMode
cp r16, r17 cp r16, r17
brcc Utils_TableJump_ret brcc Utils_TableJump_ret
clr r17 clr r17