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 b4c0ab273d
commit 50e2f20583
8 changed files with 70 additions and 131 deletions

View File

@@ -64,7 +64,7 @@
#define MODULES_COM_WITH_ADDR_PROTO
#define MODULES_LED
#define MODULES_TWI_MASTER
#define MODULES_LCD
;#define MODULES_LCD
#define MODULES_SI7021
#define MODULES_STATS
@@ -223,20 +223,37 @@
; includes
.include "utils.asm"
.include "timer.asm"
#ifdef MODULES_TIMER
.include "timer.asm"
#endif
#ifdef MODULES_LED
.include "led.asm"
.include "com2.asm"
.include "comproto.asm"
.include "comproto_addr.asm"
.include "comproto_recvstats.asm"
.include "comproto_sysstats.asm"
.include "comproto_memstats.asm"
.include "comproto_pong.asm"
;.include "comproto_values.asm"
.include "twimaster.asm"
.include "lcd.asm"
.include "si7021.asm"
.include "stats.asm"
#endif
#ifdef MODULES_COM
.include "com2.asm"
#ifdef MODULES_COM_WITH_ADDR_PROTO
.include "comproto.asm"
.include "comproto_addr.asm"
.include "comproto_recvstats.asm"
.include "comproto_sendstats.asm"
.include "comproto_sysstats.asm"
.include "comproto_memstats.asm"
.include "comproto_pong.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)
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 sramTimerWriteStats, writeStats, 0, 10
#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 0 ; end of list
@@ -300,21 +317,6 @@ timerList:
; Called on first time run, i.e. on system start. No arguments, no results.
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
@@ -322,14 +324,12 @@ onSystemStart:
periodicalLcdMark:
rcall printTimerMark
ret
#endif
writeStats:
sbi PINA, PORTA2 ; debug (toggle)
rcall printSendStats
ret
#endif
@@ -364,8 +364,7 @@ onEvery100ms:
; USED: depending on called routines
onPacketReceived:
; rcall CPRO_OnPacketReceived
rcall CPRO_OnPacketReceived
ret

View File

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

View File

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

View File

@@ -63,7 +63,7 @@ cproPacketTypeTransTableEnd:
; position within table must be in same order as in table above!
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
cpi r17, CPRO_MODE_GETADDRSTARTED
brne cproHandlePckHaveAddr_done
brne cproHandleHaveAddr_done
; validate address
adiw xh:xl, CPRO_PACKET_HAVEADDR_OFFS_ADDRESS
ld r16, x
sbiw xh:xl, CPRO_PACKET_HAVEADDR_OFFS_ADDRESS
tst r16
breq cproHandlePckHaveAddr_done ; invalid address, ignore
breq cproHandleHaveAddr_done ; invalid address, ignore
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
dec r16
rcall cproSetBitInBitfield
cproHandlePckHaveAddr_done:
cproHandleHaveAddr_done:
sec
ret
@@ -136,9 +137,9 @@ cproHandleDenyAddr:
cpi r17, CPRO_MODE_CLAIMING_ADDR3+1
brcc cproHandleDenyAddr_notInClaimAddr13Mode
; 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
sbiw xh:xl, CPRO_PACKET_CLAIMADDR_OFFS_ADDRESS
sbiw xh:xl, CPRO_PACKET_DENYADDR_OFFS_ADDRESS
lds r17, cproAddrRangeBegin
cp r16, r17
brne cproHandleDenyAddr_done ; not our currently claimed address, ignore

View File

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

View File

@@ -61,16 +61,18 @@ main:
rcall Led_SetPattern
#endif
; sbi DDRA, PORTA2 ; debug
; sbi PINA, PORTA2 ; debug (toggle)
; cbi PORTA, PORTA2 ; debug (on)
; sbi PORTA, PORTA2 ; debug (off)
; ldi r16, 1
; sts twiMasterScanEnabled, r16
main_loop:
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
in r16, MCUCR
ldi r17, (1<<SE) | (1<<SM1) | (1<<SM0)
@@ -216,36 +218,6 @@ initialWait_l2: ; wait for 10ms
#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:
in r15, SREG ; debug
push r15
@@ -261,46 +233,6 @@ printTimerMark:
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
push r15
cli

View File

@@ -11,7 +11,8 @@
; ***************************************************************************
; defines
.equ STATS_POS_MAX = 3
.equ STATS_POS_MAX = 4
.equ STATS_POS_SEND = 4
.equ STATS_POS_RECV = 3
.equ STATS_POS_SYS = 2
.equ STATS_POS_MEM = 1
@@ -77,11 +78,16 @@ Stats_Run_l2:
rcall CPRO_WriteMemStats
rjmp Stats_Run_SendPacket
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
rjmp Stats_Run_done
Stats_Run_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
dec r16
sts statsRemaining, r16

View File

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