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<