avr: improved protocol timing for COM2.
- increased waiting time after lowering ATTN line - lengthten stop bit for cleaner frames (now recognized by PulseView) - count "NOTFORME" conditions - introduce definition COM_HALFBIT_LENGTH (I dont' trust value calculations in avrasm)
This commit is contained in:
@@ -47,7 +47,8 @@
|
||||
; ---------------------------------------------------------------------------
|
||||
; COM module
|
||||
|
||||
.equ COM_BIT_LENGTH = 52000 ; 104000=9600, 52000=19200, 26000=38400
|
||||
.equ COM_BIT_LENGTH = 52000 ; 104000ns=9600, 52000ns=19200, 26000ns=38400
|
||||
.equ COM_HALFBIT_LENGTH = 26000 ; see https://de.wikipedia.org/wiki/Universal_Asynchronous_Receiver_Transmitter
|
||||
|
||||
.equ COM_DDR_DATA = DDRA
|
||||
.equ COM_PORT_DATA = PORTA
|
||||
|
||||
@@ -47,7 +47,8 @@
|
||||
; ---------------------------------------------------------------------------
|
||||
; COM module
|
||||
|
||||
.equ COM_BIT_LENGTH = 52000 ; 104000=9600, 52000=19200, 26000=38400
|
||||
.equ COM_BIT_LENGTH = 52000 ; 104000ns=9600, 52000ns=19200, 26000ns=38400
|
||||
.equ COM_HALFBIT_LENGTH = 26000 ; see https://de.wikipedia.org/wiki/Universal_Asynchronous_Receiver_Transmitter
|
||||
|
||||
.equ COM_DDR_DATA = DDRA
|
||||
.equ COM_PORT_DATA = PORTA
|
||||
@@ -60,7 +61,7 @@
|
||||
.equ COM_PINNUM_ATTN = PORTA7
|
||||
|
||||
.equ COM_IRQ_ADDR_ATTN = PCMSK0
|
||||
.equ COM_IRQ_BIT_ATTN = 7 ; bit 7 in PCMSK0
|
||||
.equ COM_IRQ_BIT_ATTN = PCINT7 ; bit 7 in PCMSK0
|
||||
.equ COM_IRQ_GIFR_ATTN = PCIF0
|
||||
.equ COM_IRQ_GIMSK_ATTN = PCIE0
|
||||
|
||||
|
||||
@@ -47,7 +47,7 @@
|
||||
; COM module
|
||||
|
||||
.equ COM_BIT_LENGTH = 52000 ; 104000ns=9600, 52000ns=19200, 26000ns=38400
|
||||
; see https://de.wikipedia.org/wiki/Universal_Asynchronous_Receiver_Transmitter
|
||||
.equ COM_HALFBIT_LENGTH = 26000 ; see https://de.wikipedia.org/wiki/Universal_Asynchronous_Receiver_Transmitter
|
||||
.equ COM_DDR_DATA = DDRA
|
||||
.equ COM_PORT_DATA = PORTA
|
||||
.equ COM_PIN_DATA = PINA
|
||||
@@ -59,7 +59,7 @@
|
||||
.equ COM_PINNUM_ATTN = PORTA7
|
||||
|
||||
.equ COM_IRQ_ADDR_ATTN = PCMSK0
|
||||
.equ COM_IRQ_BIT_ATTN = 7 ; bit 7 in PCMSK0
|
||||
.equ COM_IRQ_BIT_ATTN = PCINT7 ; bit 7 in PCMSK0
|
||||
.equ COM_IRQ_GIFR_ATTN = PCIF0
|
||||
.equ COM_IRQ_GIMSK_ATTN = PCIE0
|
||||
|
||||
|
||||
@@ -161,6 +161,10 @@ firmwareStart: rjmp main
|
||||
.include "modules/comproto/msg_device.asm"
|
||||
.include "modules/comproto/msg_reboot.asm"
|
||||
#endif
|
||||
#ifdef MODULES_LCD
|
||||
.include "modules/com2/screen.asm"
|
||||
.include "modules/comproto/screen.asm"
|
||||
#endif
|
||||
#endif
|
||||
#ifdef MODULES_TWI_MASTER
|
||||
.include "modules/twimaster/main.asm"
|
||||
@@ -194,9 +198,18 @@ firmwareStart: rjmp main
|
||||
|
||||
.dseg
|
||||
|
||||
programRamBegin:
|
||||
#ifdef MODULES_LCD
|
||||
screenCounter: .byte 1
|
||||
#endif
|
||||
|
||||
programRamEnd:
|
||||
|
||||
|
||||
|
||||
#ifdef MODULES_LCD
|
||||
sramTimerWriteStats: .byte 2
|
||||
sramTimerScreen: .byte 2
|
||||
#endif
|
||||
sramTimerEnqueueValues: .byte 2
|
||||
#ifdef MODULES_SI7021
|
||||
@@ -221,12 +234,6 @@ sramTimerEnqueueValues: .byte 2
|
||||
|
||||
.cseg
|
||||
|
||||
#ifdef MODULES_LED
|
||||
ledA3Flash: .db DDRA+0x20, PORTA+0x20, PINA+0x20, (1<<PORTA3)
|
||||
blinkPattern: .db 2, 50, 0xff, 0xff ; 1 short blink, 5s pause, restart
|
||||
;blinkPattern2: .db 2, 2, 0xff, 0xff ; 1 short blink, short pause, restart
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
; ---------------------------------------------------------------------------
|
||||
@@ -242,8 +249,9 @@ timerList:
|
||||
.dw statsSendTimer, Stats_Timer, TIMER_FLAGS_IF_ADDR, 3000 ; every 5m
|
||||
#endif
|
||||
#ifdef MODULES_LCD
|
||||
; .dw sramPeriodicalLcdMark, periodicalLcdMark, 0, 20 ; every 2s
|
||||
.dw sramTimerWriteStats, writeStats, 0, 100
|
||||
; .dw sramPeriodicalLcdMark, periodicalLcdMark, 0, 20 ; every 2s
|
||||
; .dw sramTimerWriteStats, writeStats, 0, 100
|
||||
.dw sramTimerScreen, printScreen, TIMER_FLAGS_IF_ADDR, 50 ; every 5s
|
||||
#endif
|
||||
#ifdef MODULES_SI7021
|
||||
.dw sramTimerSI7021Measure, SI7021_OnTimer, 0, 300 ; every 30s
|
||||
@@ -292,18 +300,55 @@ systemSetBootSpeed:
|
||||
; Called on first time run, i.e. on system start. No arguments, no results.
|
||||
|
||||
onSystemStart:
|
||||
ldi xh, HIGH(programRamBegin)
|
||||
ldi xl, LOW(programRamBegin)
|
||||
clr r16
|
||||
ldi r17, (programRamEnd-programRamBegin)
|
||||
rcall Utils_FillSram
|
||||
ret
|
||||
|
||||
|
||||
#ifdef MODULES_LCD
|
||||
periodicalLcdMark:
|
||||
rcall printTimerMark
|
||||
|
||||
printScreen:
|
||||
lds r16, screenCounter
|
||||
tst r16
|
||||
brne printScreen_l1
|
||||
rcall CPRO_Screen
|
||||
rjmp printScreen_counter
|
||||
printScreen_l1:
|
||||
cpi r16, 1
|
||||
brne printScreen_l2
|
||||
rcall COM2_Screen_RecvStats
|
||||
rjmp printScreen_counter
|
||||
printScreen_l2:
|
||||
; cpi r16, 2
|
||||
; brne printScreen_l3
|
||||
; rcall COM2_Screen_SendStats
|
||||
; rjmp printScreen_counter
|
||||
printScreen_l3:
|
||||
; add more screens here
|
||||
|
||||
printScreen_counter:
|
||||
lds r16, screenCounter
|
||||
inc r16
|
||||
cpi r16, 2 ; number of screens
|
||||
brcs printScreen_store
|
||||
clr r16
|
||||
printScreen_store:
|
||||
sts screenCounter, r16
|
||||
printScreen_end:
|
||||
ret
|
||||
|
||||
|
||||
writeStats:
|
||||
rcall printSendStats
|
||||
ret
|
||||
;periodicalLcdMark:
|
||||
; rcall printTimerMark
|
||||
; ret
|
||||
|
||||
|
||||
;writeStats:
|
||||
; rcall printSendStats
|
||||
; ret
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
@@ -45,7 +45,8 @@
|
||||
; ---------------------------------------------------------------------------
|
||||
; COM module
|
||||
|
||||
.equ COM_BIT_LENGTH = 52000 ; 104000=9600, 52000=19200, 26000=38400
|
||||
.equ COM_BIT_LENGTH = 52000 ; 104000ns=9600, 52000ns=19200, 26000ns=38400
|
||||
.equ COM_HALFBIT_LENGTH = 26000 ; see https://de.wikipedia.org/wiki/Universal_Asynchronous_Receiver_Transmitter
|
||||
|
||||
.equ COM_DDR_DATA = DDRA
|
||||
.equ COM_PORT_DATA = PORTA
|
||||
|
||||
@@ -42,7 +42,8 @@
|
||||
; ---------------------------------------------------------------------------
|
||||
; COM module
|
||||
|
||||
.equ COM_BIT_LENGTH = 52000 ; 104000=9600, 52000=19200, 26000=38400
|
||||
.equ COM_BIT_LENGTH = 52000 ; 104000ns=9600, 52000ns=19200, 26000ns=38400
|
||||
.equ COM_HALFBIT_LENGTH = 26000 ; see https://de.wikipedia.org/wiki/Universal_Asynchronous_Receiver_Transmitter
|
||||
|
||||
.equ COM_DDR_DATA = DDRB
|
||||
.equ COM_PORT_DATA = PORTB
|
||||
|
||||
Reference in New Issue
Block a user