diff --git a/avr/devices/r04/0BUILD b/avr/devices/r04/0BUILD index 9622ec9..31fee02 100644 --- a/avr/devices/r04/0BUILD +++ b/avr/devices/r04/0BUILD @@ -5,6 +5,7 @@ boot main + test diff --git a/avr/devices/r04/aqua_r04.xml b/avr/devices/r04/aqua_r04.xml index e591864..865441c 100644 --- a/avr/devices/r04/aqua_r04.xml +++ b/avr/devices/r04/aqua_r04.xml @@ -7,13 +7,25 @@ - - - - - - - + + + + + + + + + + + + + + + + + + + diff --git a/avr/devices/r04/boot/boot.asm b/avr/devices/r04/boot/boot.asm index d86fa14..ac3da73 100644 --- a/avr/devices/r04/boot/boot.asm +++ b/avr/devices/r04/boot/boot.asm @@ -39,6 +39,7 @@ .equ LED_PINNUM = PORTB2 + ; *************************************************************************** ; code segment diff --git a/avr/devices/r04/defs.asm b/avr/devices/r04/defs.asm index 395711f..e89b454 100644 --- a/avr/devices/r04/defs.asm +++ b/avr/devices/r04/defs.asm @@ -62,16 +62,28 @@ .equ COM_DATA_PUE = PUEA .equ COM_DATA_PIN = PORTA2 -.equ COM_ATTN_DDR = DDRA -.equ COM_ATTN_INPUT = PINA -.equ COM_ATTN_OUTPUT = PORTA -.equ COM_ATTN_PUE = PUEA -.equ COM_ATTN_PIN = PORTA0 +.equ COM_ATTN0_DDR = DDRA +.equ COM_ATTN0_INPUT = PINA +.equ COM_ATTN0_OUTPUT = PORTA +.equ COM_ATTN0_PUE = PUEA +.equ COM_ATTN0_PIN = PORTA0 -.equ COM_IRQ_ADDR_ATTN = PCMSK0 -.equ COM_IRQ_BIT_ATTN = PCINT0 ; bit 0 in PCMSK0 -.equ COM_IRQ_GIFR_ATTN = PCIF0 -.equ COM_IRQ_GIMSK_ATTN = PCIE0 +.equ COM_IRQ_ADDR_ATTN0 = PCMSK0 +.equ COM_IRQ_BIT_ATTN0 = PCINT0 ; bit 0 in PCMSK0 +.equ COM_IRQ_GIFR_ATTN0 = PCIF0 +.equ COM_IRQ_GIMSK_ATTN0 = PCIE0 + +; compatibility +.equ COM_ATTN_DDR = COM_ATTN0_DDR +.equ COM_ATTN_INPUT = COM_ATTN0_INPUT +.equ COM_ATTN_OUTPUT = COM_ATTN0_OUTPUT +.equ COM_ATTN_PUE = COM_ATTN0_PUE +.equ COM_ATTN_PIN = COM_ATTN0_PIN + +.equ COM_IRQ_ADDR_ATTN = COM_IRQ_ADDR_ATTN0 +.equ COM_IRQ_BIT_ATTN = COM_IRQ_BIT_ATTN0 +.equ COM_IRQ_GIFR_ATTN = COM_IRQ_GIFR_ATTN0 +.equ COM_IRQ_GIMSK_ATTN = COM_IRQ_GIMSK_ATTN0 ; settings for comOnUart1 diff --git a/avr/devices/r04/main/main.asm b/avr/devices/r04/main/main.asm index d3a69fa..71f8590 100644 --- a/avr/devices/r04/main/main.asm +++ b/avr/devices/r04/main/main.asm @@ -47,12 +47,16 @@ ; --------------------------------------------------------------------------- ; generic +.equ COMONUART0_IFACENUM = 1 +.equ COMONUART1_IFACENUM = 2 + ; --------------------------------------------------------------------------- ; firmware settings including list of modules used #define MAIN_WITHOUT_MSG_HANDLING ; we do message handling ourselfes +#define APP_STATS_NETDEV2 #define MODULES_CLOCK ;#define MODULES_COM @@ -73,12 +77,14 @@ ;#define MODULES_TTYONUART1 #define MODULES_COMONUART0 #define MODULES_COMONUART1 + #define APPS_STATS #define APPS_NETWORK +;#define APPS_REPORTSENSORS -.equ NET_BUFFERS_NUM = 12 +.equ NET_BUFFERS_NUM = 9 .equ NET_BUFFERS_SIZE = 32 .equ UART_HW_MSGNUMINBUF_SIZE = 8 @@ -89,6 +95,8 @@ ; --------------------------------------------------------------------------- ; defines for values +.equ VALUE_ID_DS18B20_TEMP = 0x06 + .equ VALUE_ID_LEDSIMPLE_TIMING = 0x88 @@ -159,10 +167,13 @@ firmwareStart: ; @routine onSystemStart onSystemStart: - clr r16 - sts debugCounter, r16 - ldi r16, 0xff - sts attnByte, r16 + ; set interface number for UART0 + ldi r16, COMONUART0_IFACENUM + sts comOnUart0_iface+NET_IFACE_OFFS_IFACENUM, r16 + ; set interface number for UART1 + ldi r16, COMONUART1_IFACENUM + sts comOnUart1_iface+NET_IFACE_OFFS_IFACENUM, r16 + ret ; @end @@ -182,7 +193,8 @@ onEveryDay: onEveryMinute: rcall sendPacketsIface2In - rcall sendErrorsIface2 +; rcall sendErrorsIface2 + rcall sendDeviceUart1 ret ; @end @@ -223,16 +235,13 @@ onAttnChangeIsr: push r15 in r15, SREG push r16 - in r16, COM_ATTN_INPUT - push r17 - lds r17, attnByte - sts attnByte, r16 - eor r17, r16 - sbrc r17, COM_ATTN1_PIN - rcall onAttnChangeAttn1 - sbrc r17, COM_ATTN_PIN - rcall onAttnChangeAttn0 - pop r17 + inr r16, COM_ATTN1_INPUT + sbrs r16, COM_ATTN1_PIN + rcall ComOnUart1_HandleAttnChange ; (none) + + inr r16, COM_ATTN0_INPUT + sbrs r16, COM_ATTN0_PIN + rcall ComOnUart0_HandleAttnChange ; (none) pop r16 out SREG, r15 pop r15 @@ -241,18 +250,6 @@ onAttnChangeIsr: -onAttnChangeAttn0: - sbrs r16, COM_ATTN_PIN - rcall ComOnUart0_HandleAttnChange ; (none) - ret - -onAttnChangeAttn1: - sbrs r16, COM_ATTN1_PIN - rcall ComOnUart1_HandleAttnChange ; (none) - ret - - - ; --------------------------------------------------------------------------- ; @routine checkRecvdMsg ; @@ -267,18 +264,16 @@ checkRecvdMsg: push xl push xh adiw xh:xl, 1 - rcall onMessageReceived - rcall mainModulesOnPacketReceived - rcall mainAppsOnPacketReceived + rcall letSysHandleMsg pop xh pop xl pop r16 ; forward to other interface ld r17, X - andi r17, (NET_IFACE_BUFFER_IFACENUM1_BIT | NET_IFACE_BUFFER_IFACENUM0_BIT) - rcall reverseInterfaceNum ; (R16, R17) -; ldi r17, COMONUART0_IFACENUM ; DEBUG: send everything to uart0 to test that code first + andi r17, (1< + + + + + + + -I $(builddir) + -I $(srcdir) + -I $(topsrcdir)/avr + -I $(topbuilddir)/avr + + + + + main.asm + + + + + + + + + + + + + + + + + diff --git a/avr/devices/r04/test/main.asm b/avr/devices/r04/test/main.asm new file mode 100644 index 0000000..53981c5 --- /dev/null +++ b/avr/devices/r04/test/main.asm @@ -0,0 +1,264 @@ +; *************************************************************************** +; copyright : (C) 2025 by Martin Preuss +; email : martin@libchipcard.de +; +; *************************************************************************** +; * This file is part of the project "AqHome". * +; * Please see toplevel file COPYING of that project for license details. * +; *************************************************************************** + + + + +; *************************************************************************** +; Source file for temperature sensor node on AtTiny 84 +; +; This is for the full system (i.e. not the boot loader). +; +; All definitions and changes should go into this file. +; +; +; *************************************************************************** + + +;.equ clock=1000000 ; Define the clock frequency +.equ clock=8000000 ; Define the clock frequency + + +.nolist +.include "include/tn841def.inc" ; Define device ATtiny841 +.list + +.include "../defs.asm" +.include "version.asm" +;.include "defs_all.asm" + +.include "devices/all/defs.asm" + +.include "common/calls.asm" +.include "common/utils_wait.asm" +.include "common/utils_io.asm" + + + +; *************************************************************************** +; defines + +; --------------------------------------------------------------------------- +; generic + +.equ COMONUART0_IFACENUM = 1 +.equ COMONUART1_IFACENUM = 2 + + +; --------------------------------------------------------------------------- +; firmware settings including list of modules used + + +;#define MAIN_WITHOUT_MSG_HANDLING ; we do message handling ourselfes +;#define APP_STATS_NETDEV2 + +#define MODULES_CLOCK +;#define MODULES_COM +;#define MODULES_COM_WITH_ADDR_PROTO +;#define MODULES_LED +#define MODULES_LED_SIMPLE +;#define MODULES_TWI_MASTER +;#define MODULES_LCD +;#define LCD_MINIMAL_FONT +;#define MODULES_SI7021 +;#define MODULES_STATS +;#define MODULES_CNY70 +;#define MODULES_REED +#define MODULES_OWI_MASTER +#define MODULES_DS18B20 +;#define MODULES_MOTION +#define MODULES_NETWORK +;#define MODULES_TTYONUART1 +#define MODULES_COMONUART0 +;#define MODULES_COMONUART1 + +#define APPS_STATS +#define APPS_NETWORK +#define APPS_REPORTSENSORS + + + +.equ NET_BUFFERS_NUM = 8 +.equ NET_BUFFERS_SIZE = 32 + +.equ UART_HW_MSGNUMINBUF_SIZE = 8 +.equ UART_HW_MSGNUMOUTBUF_SIZE = 8 + + + +; --------------------------------------------------------------------------- +; defines for values + +.equ VALUE_ID_DS18B20_TEMP = 0x06 + +.equ VALUE_ID_LEDSIMPLE_TIMING = 0x88 + + +; *************************************************************************** +; code segment + +.cseg +.org 000000 + + + +; --------------------------------------------------------------------------- +; Reset and interrupt vectors + + rjmp BOOTLOADER_ADDR ; 1: RESET Reset vector use this for flashed system + reti ; 2: INT0 External Interrupt Request 0 + rjmp onAttnChangeIsr ; 3: PCINT0 Pin Change Interrupt 0 + reti ; 4: PCINT1 Pin Change Interrupt 1 + reti ; 5: WDT Watchdog Time-out + reti ; 6: TIM1_CAPT Timer/Counter1 Capture Event + reti ; 7: TIM1_COMPA (OC1A) Timer/Counter1 Compare Match A + reti ; 8: TIM1_COMPB (OC1B) Timer/Counter1 Compare Match B + reti ; 9: TIM1_OVF (OVF1) Timer/Counter1 Overflow + rjmp baseTimerIrqOC0A ; 10: TIM0_COMPA (OC0A) Timer/Counter0 Compare Match A + reti ; 11: TIM0_COMPB (OC0B) Timer/Counter0 Compare Match B + reti ; 12: TIM0_OVF (OVF0) Timer/Counter0 Overflow + reti ; 13: ANA_COMP0 Analog Comparator 0 + reti ; 14: ADC_READY ADC Conversion Complete + reti ; 15: EE_RDY (ERDY) EEPROM Ready + reti ; 16: ANA_COMP1 Analog Comparator 1 + reti ; 17: TIM2_CAPT Timer/Counter2 Capture Event + reti ; 18: TIM2_COMPA (OC2A) Timer/Counter2 Compare Match A + reti ; 19: TIM2_COMPB (OC2B) Timer/Counter2 Compare Match B + reti ; 20: TIM2_OVF (OVF2) Timer/Counter2 Overflow + reti ; 21: SPI SPI Serial Transfer Complete + reti ; 22: USART0_RXS USART0 Rx Start + rjmp ComOnUart0_RxCharIsr ; 23: USART0_RXC USART0 Rx Complete + rjmp ComOnUart0_TxUdreIsr ; 24: USART0_DRE USART0 Data Register Empty + rjmp ComOnUart0_TxCharIsr ; 25: USART0_TXC USART0 Tx Complete + reti ; 26: USART1_RXS USART1 Rx Start +; rjmp ComOnUart1_RxCharIsr ; 27: USART1_RXC USART1 Rx Complete + reti ; 27: USART1_RXC USART1 Rx Complete +; rjmp ComOnUart1_TxUdreIsr ; 28: USART1_DRE USART1 Data Register Empty + reti ; 28: USART1_DRE USART1 Data Register Empty +; rjmp ComOnUart1_TxCharIsr ; 29: USART1_TXC USART1 Tx Complete + reti ; 29: USART1_TXC USART1 Tx Complete + reti ; 30: TWI Two-Wire-Interface + reti ; 31: RESERVED reserved + + + +devInfoBlock: ; 12 bytes +devInfoManufacturer: .db 'A', 'Q', 'U', 'A' +devInfoId: .db DEVICEINFO_ID, 0 +devInfoVersion: .db DEVICEINFO_VERSION, DEVICEINFO_REVISION ; version, revision +firmwareVersion: .db FIRMWARE_VARIANT_TEMP_WINDOW, FIRMWARE_VERSION_MAJOR + .db FIRMWARE_VERSION_MINOR, FIRMWARE_VERSION_PATCHLEVEL + + + +; --------------------------------------------------------------------------- +; @routine firmwareStart @global + +firmwareStart: + rjmp main +; @end + + + +; --------------------------------------------------------------------------- +; @routine onSystemStart + +onSystemStart: + ; set interface number for UART0 + ldi r16, COMONUART0_IFACENUM + sts comOnUart0_iface+NET_IFACE_OFFS_IFACENUM, r16 + ; set interface number for UART1 +; ldi r16, COMONUART1_IFACENUM +; sts comOnUart1_iface+NET_IFACE_OFFS_IFACENUM, r16 + + ret +; @end + + + + + + + +onEvery100ms: +onEverySecond: +onEveryMinute: +onEveryHour: +onEveryDay: + ret + + + + +; --------------------------------------------------------------------------- +; @routine onEveryLoop +; +; Called on every loop (i.e. after awakening from sleep). + +onEveryLoop: + ret +; @end + + + +; --------------------------------------------------------------------------- +; @routine onMessageReceived +; +; Called on every message received + +onMessageReceived: + clc + ret +; @end + + + +; --------------------------------------------------------------------------- +; @routine onAttnChange @global @isr +; +; Called whenever PCINT0 is activated. +; This code assumes that both ATTN pins are on the same port which is true for +; R04 nodes. + +onAttnChangeIsr: + push r15 + in r15, SREG + push r16 +; inr r16, COM_ATTN1_INPUT +; sbrs r16, COM_ATTN1_PIN +; rcall ComOnUart1_HandleAttnChange ; (none) + +; inr r16, COM_ATTN0_INPUT +; sbrs r16, COM_ATTN0_PIN + rcall ComOnUart0_HandleAttnChange ; (none) + pop r16 + out SREG, r15 + pop r15 + reti +; @end + + + + +; *************************************************************************** +; includes + +.include "devices/all/hw_tn841.asm" +.include "devices/all/includes.asm" + + + + +; --------------------------------------------------------------------------- +; defines for network interface + +.equ netInterfaceData = comOnUart0_iface +;.equ netInterfaceData2 = comOnUart1_iface + +