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_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
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
80
avr/main.asm
80
avr/main.asm
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user