diff --git a/avr/0BUILD b/avr/0BUILD
index 5efda71..9a7c418 100644
--- a/avr/0BUILD
+++ b/avr/0BUILD
@@ -36,6 +36,22 @@
+
+
+
+
+ -I $(builddir)
+ -I $(srcdir)
+ -I $(topsrcdir)/avr
+
+
+
+
+ att84_base.asm
+
+
+
+
diff --git a/avr/att84_base.asm b/avr/att84_base.asm
index 9bce9f6..dc1382b 100644
--- a/avr/att84_base.asm
+++ b/avr/att84_base.asm
@@ -1,7 +1,7 @@
; ***************************************************************************
-; Source file for temperature sensor node on AtTiny 84
+; Source file for base system node on AtTiny 84
;
-; This is for the full system (i.e. not the boot loader).
+; This is for the maintenance system (i.e. the flash loader).
;
; All definitions and changes should go into this file.
;
@@ -11,10 +11,10 @@
; VCC 1 14 GND
; PB0 2 13 PA0
; PB1 3 12 PA1 COM-DATA
-; /RESET PB3 4 11 PA2 OWI
+; /RESET PB3 4 11 PA2
; KEY1 PB2 5 10 PA3 LED
-; COM_ATTN PA7 6 9 PA4 TWI-SCL
-; TWI-SDA PA6 7 8 PA5
+; COM_ATTN PA7 6 9 PA4
+; PA6 7 8 PA5
; --------
;
; ***************************************************************************
@@ -42,17 +42,24 @@
; ---------------------------------------------------------------------------
; list of modules to use
+#define BASE_SYSTEM
+#define WITH_FLASH
+
#define MODULES_TIMER
#define MODULES_COM
-#define MODULES_LED
-#define MODULES_TWI_MASTER
-#define MODULES_LCD
-#define MODULES_SI7021
+;#define MODULES_LED
+; #define MODULES_TWI_MASTER
+; #define MODULES_LCD
+; #define MODULES_SI7021
-.equ VALUE_ID_TEMP1 = 0x01
-.equ VALUE_ID_HUM1 = 0x02
+; ---------------------------------------------------------------------------
+; EEPROM positions
+
+
+.equ EEPROM_OFFS_UUID = 0 ; 4 bytes (occupy total of 8 bytes for extensibility)
+.equ EEPROM_OFFS_COMADDR = 8 ; 1 byte
; ---------------------------------------------------------------------------
@@ -80,8 +87,6 @@
; ---------------------------------------------------------------------------
; TWI master module
-.equ LCD_TWI_ADDRESS = 0x3c
-
.equ TWI_DDR_SCL = DDRA
.equ TWI_PORT_SCL = PORTA
.equ TWI_PIN_SCL = PINA
@@ -94,6 +99,29 @@
+; ---------------------------------------------------------------------------
+; LCD module
+
+.equ LCD_TWI_ADDRESS = 0x3c
+
+
+
+; ---------------------------------------------------------------------------
+; BMP 280
+
+.equ BMP280_ADDR = 0x76
+
+
+
+; ---------------------------------------------------------------------------
+; SI 7021
+
+.equ SI7021_ADDR = 0x40
+
+
+
+
+
; ***************************************************************************
; code segment
@@ -104,58 +132,47 @@
; ---------------------------------------------------------------------------
; Reset and interrupt vectors
+ rjmp PC+0x20 ; Reset vector
+ rjmp PC+0x20 ; EXT_INT0
+ rjmp PC+0x20 ; PCI0
+ rjmp PC+0x20 ; PCI1
+ rjmp PC+0x20 ; WATCHDOG
+ rjmp PC+0x20 ; ICP1
+ rjmp PC+0x20 ; OC1A
+ rjmp PC+0x20 ; OC1B
+ rjmp PC+0x20 ; OVF1
+ rjmp PC+0x20 ; OC0A
+ rjmp PC+0x20 ; OC0B
+ rjmp PC+0x20 ; OVF0
+ rjmp PC+0x20 ; ACI
+ rjmp PC+0x20 ; ADCC
+ rjmp PC+0x20 ; ERDY
+ rjmp PC+0x20 ; USI_STR
+ rjmp PC+0x20 ; USI_OVF
- rjmp main ; Reset vector
- reti ; EXT_INT0
- rjmp comIsrPcint0 ; PCI0
- reti ; PCI1
- reti ; WATCHDOG
- reti ; ICP1
- reti ; OC1A
- reti ; OC1B
- reti ; OVF1
- rjmp timerIrqOC0A ; OC0A
- reti ; OC0B
- reti ; OVF0
- reti ; ACI
- reti ; ADCC
- reti ; ERDY
- reti ; USI_STR
- reti ; USI_OVF
-
-.org 0x40
-; ---------------------------------------------------------------------------
-; Node Id (not overwritten when updating system)
-
-nodeUid: .db 0, 0, 0, 0, 0, 0, 0, 0
-
-
-
-
-.org 0x50 ; begin of maintenance system
; ---------------------------------------------------------------------------
-; Reset and interrupt vectors of maintenance system
+; maintenance system starts here.
-maintIrqHandlerTable:
- .dw main ; reset address
- .dw 0 ; EXT_INT0
- .dw comIsrPcint0 ; PCI0
- .dw 0 ; PCI1
- .dw 0 ; WATCHDOG
- .dw 0 ; ICP1
- .dw 0 ; OC1A
- .dw 0 ; OC1B
- .dw 0 ; OVF1
- .dw timerIrqOC0A ; OC0A
- .dw 0 ; OC0B
- .dw 0 ; OVF0
- .dw 0 ; ACI
- .dw 0 ; ADCC
- .dw 0 ; ERDY
- .dw 0 ; USI_STR
- .dw 0 ; USI_OVF
+.org 0x20
+ rjmp main ; Reset vector
+ reti ; EXT_INT0
+ rjmp comIsrPcint0 ; PCI0
+ reti ; PCI1
+ reti ; WATCHDOG
+ reti ; ICP1
+ reti ; OC1A
+ reti ; OC1B
+ reti ; OVF1
+ rjmp timerIrqOC0A ; OC0A
+ reti ; OC0B
+ reti ; OVF0
+ reti ; ACI
+ reti ; ADCC
+ reti ; ERDY
+ reti ; USI_STR
+ reti ; USI_OVF
; ***************************************************************************
@@ -163,13 +180,9 @@ maintIrqHandlerTable:
.include "utils.asm"
.include "timer.asm"
-.include "led.asm"
.include "com.asm"
.include "comproto.asm"
-;.include "twimaster.asm"
-;.include "lcd.asm"
-;.include "bmp280.asm"
-;.include "si7021.asm"
+.include "flash.asm"
@@ -178,19 +191,12 @@ maintIrqHandlerTable:
.dseg
-ledA3Sram: .byte LED_SRAM_SIZE
-
-
-
; ***************************************************************************
; data in FLASH
.cseg
-ledA3Flash: .db DDRA+0x20, PORTA+0x20, PINA+0x20, (1< 30
+ .db 0x00, 0x02, 0x01, 0x51, 0x09, 0x06 ; ? 31
+ .db 0x00, 0x32, 0x49, 0x59, 0x51, 0x3E ; @ 32
+ .db 0x00, 0x7C, 0x12, 0x11, 0x12, 0x7C ; A 33
+ .db 0x00, 0x7F, 0x49, 0x49, 0x49, 0x36 ; B 34
+ .db 0x00, 0x3E, 0x41, 0x41, 0x41, 0x22 ; C 35
+ .db 0x00, 0x7F, 0x41, 0x41, 0x22, 0x1C ; D 36
+ .db 0x00, 0x7F, 0x49, 0x49, 0x49, 0x41 ; E 37
+ .db 0x00, 0x7F, 0x09, 0x09, 0x09, 0x01 ; F 38
+ .db 0x00, 0x3E, 0x41, 0x49, 0x49, 0x7A ; G 39
+ .db 0x00, 0x7F, 0x08, 0x08, 0x08, 0x7F ; H 40
+ .db 0x00, 0x00, 0x41, 0x7F, 0x41, 0x00 ; I 41
+ .db 0x00, 0x20, 0x40, 0x41, 0x3F, 0x01 ; J 42
+ .db 0x00, 0x7F, 0x08, 0x14, 0x22, 0x41 ; K 43
+ .db 0x00, 0x7F, 0x40, 0x40, 0x40, 0x40 ; L 44
+ .db 0x00, 0x7F, 0x02, 0x0C, 0x02, 0x7F ; M 45
+ .db 0x00, 0x7F, 0x04, 0x08, 0x10, 0x7F ; N 46
+ .db 0x00, 0x3E, 0x41, 0x41, 0x41, 0x3E ; O 47
+ .db 0x00, 0x7F, 0x09, 0x09, 0x09, 0x06 ; P 48
+ .db 0x00, 0x3E, 0x41, 0x51, 0x21, 0x5E ; Q 49
+ .db 0x00, 0x7F, 0x09, 0x19, 0x29, 0x46 ; R 50
+ .db 0x00, 0x46, 0x49, 0x49, 0x49, 0x31 ; S 51
+ .db 0x00, 0x01, 0x01, 0x7F, 0x01, 0x01 ; T 52
+ .db 0x00, 0x3F, 0x40, 0x40, 0x40, 0x3F ; U 53
+ .db 0x00, 0x1F, 0x20, 0x40, 0x20, 0x1F ; V 54
+ .db 0x00, 0x3F, 0x40, 0x38, 0x40, 0x3F ; W 55
+ .db 0x00, 0x63, 0x14, 0x08, 0x14, 0x63 ; X 56
+ .db 0x00, 0x07, 0x08, 0x70, 0x08, 0x07 ; Y 57
+ .db 0x00, 0x61, 0x51, 0x49, 0x45, 0x43 ; Z 58
+ .db 0x00, 0x00, 0x7F, 0x41, 0x41, 0x00 ; [ 59
+ .db 0x00, 0x02, 0x04, 0x08, 0x10, 0x20 ; \ 60
+ .db 0x00, 0x00, 0x41, 0x41, 0x7F, 0x00 ; ] 61
+ .db 0x00, 0x04, 0x02, 0x01, 0x02, 0x04 ; ^ 62
+ .db 0x00, 0x40, 0x40, 0x40, 0x40, 0x40 ; _ 63
+ .db 0x00, 0x00, 0x01, 0x02, 0x04, 0x00 ; ' 64
+#else
lcdFont6x8:
.db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ; 0
.db 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00 ; ! 1
@@ -685,6 +802,7 @@ lcdFont6x8:
.db 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00 ; | 92
.db 0x00, 0x00, 0x41, 0x41, 0x36, 0x08 ; } 93
.db 0x00, 0x08, 0x04, 0x08, 0x10, 0x08 ; ~ 94
+#endif
diff --git a/avr/main.asm b/avr/main.asm
index ed4da9f..aa254cc 100644
--- a/avr/main.asm
+++ b/avr/main.asm
@@ -18,6 +18,7 @@ main:
rcall onSystemStart
+#ifdef MODULES_LED
ldi xl, LOW(blinkPattern) ; debug: set blink pattern
ldi xh, HIGH(blinkPattern)
ldi zl, LOW(ledA3Flash)
@@ -25,6 +26,7 @@ main:
ldi yl, LOW(ledA3Sram)
ldi yh, HIGH(ledA3Sram)
rcall Led_SetPattern
+#endif
; ldi r16, 1
; sts twiMasterScanEnabled, r16
@@ -135,33 +137,12 @@ runModulesUntilIdle_ComEnd:
+#ifdef MODULES_LCD
printSendStats:
push r15
in r15, SREG ; debug
cli
-#ifdef MODULES_SI7021
- ldi r18, 0
- ldi r19, 1
- rcall LCD_SetCursor
- ldi zl, LOW(textSi7021Firmware)
- ldi zh, HIGH(textSi7021Firmware)
- rcall LCD_PrintFromFlash
-
- lds r16, si7021Flags
- rcall LCD_PrintHexByte
- ldi r16, 32
- rcall LCD_PrintChar
- lds r18, si7021LastTemp
- lds r19, si7021LastTemp+1
- rcall LCD_PrintHexWord
- ldi r16, 32
- rcall LCD_PrintChar
- lds r18, si7021LastHumidity
- lds r19, si7021LastHumidity+1
- rcall LCD_PrintHexWord
-#endif
-
ldi r18, 0
ldi r19, 2
rcall LCD_SetCursor
@@ -241,6 +222,7 @@ printSendStats:
pop r15
out SREG, r15
ret
+#endif
@@ -287,19 +269,18 @@ sendValueMsg_done:
pop r15
out SREG, r15
ret
-#endif
-#endif
-textSi7021Firmware: .db "SI: ", 0, 0
textStatsPacketsIn: .db "In : ", 0
textStatsPacketsRecvErr: .db "RecvErr: ", 0
textStatsPacketsOut: .db "Out : ", 0
textUid: .db "UID : ", 0
-textRandom: .db "RANDOM : ", 0
textAddress: .db "ADDR :", 0, 0
textBitmap: .db "BITMAP :", 0, 0
+#endif
+#endif
+
diff --git a/avr/utils.asm b/avr/utils.asm
index c857d8d..396ee6e 100644
--- a/avr/utils.asm
+++ b/avr/utils.asm
@@ -146,6 +146,7 @@ Utils_FillSram_end:
+#if 0
; ---------------------------------------------------------------------------
; Increment a 32 bit counter at the address given by X.
; IN:
@@ -170,6 +171,7 @@ Utils_IncrementCounter32:
st -x, r19
st -x, r18
ret
+#endif
@@ -243,105 +245,6 @@ Utils_WriteEeprom:
-
-
-
-; ---------------------------------------------------------------------------
-; Utils_ReadFlashPageIntoPageBuffer
-;
-;
-; IN:
-; - Z: Address to read from (byte address as for LPM!)
-; OUT:
-; - nothing
-; MODIFIED REGISTERS: R0, R1, R15, R16, R20, R24, R25, Z
-
-Utils_ReadFlashPageIntoPageBuffer:
- in r15, SREG
- cli
- ldi r24, LOW(PAGESIZE*2)
- ldi r25, HIGH(PAGESIZE*2)
-Utils_ReadFlashPageIntoPageBuffer_loop:
- lpm r0, Z+ ; read source data from FLASH (low)
- lpm r1, Z ; read source data from FLASH (high)
- sbiw ZH:ZL, 1 ; rewind Z address for following SPM
- ldi r20, (1<