avr: decreased verbosity. minor fixes.
- address claiming modes now work
This commit is contained in:
@@ -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
|
||||
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
|
||||
@@ -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
|
||||
@@ -141,17 +142,19 @@ cproHandle1sClaimingAddr3:
|
||||
cproHandle1sReclaimingAddr:
|
||||
; claimed given address 3rd time or addr reclaimed, set address and enter "normal" mode
|
||||
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
|
||||
cproHandle1sClaimingAddr3_okay:
|
||||
in r15, SREG
|
||||
push r15
|
||||
cli
|
||||
lds r16, cproAddrRangeBegin ; currently sent address is in cproAddrRangeBegin
|
||||
sts com2Address, r16 ; write address into eeprom
|
||||
ldi xl, LOW(EEPROM_OFFS_COMADDR)
|
||||
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
|
||||
pop r15
|
||||
out SREG, r15
|
||||
ldi r16, CPRO_MODE_NORMAL ; set mode to "normal"
|
||||
sts cproMode, r16
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
|
||||
80
avr/main.asm
80
avr/main.asm
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user