avr: added device n32 (FAN controller).

This commit is contained in:
Martin Preuss
2026-06-29 17:48:02 +02:00
parent 3ae542f61b
commit b784f6bb45
14 changed files with 859 additions and 0 deletions

View File

@@ -0,0 +1,34 @@
<?xml?>
<gwbuild>
<target type="AvrHexFile" name="n32_firmware" >
<includes type="avrasm" >
-I $(builddir)
-I $(srcdir)
-I $(topsrcdir)/avr
-I $(topbuilddir)/avr
</includes>
<sources type="avrasm" >
main.asm
</sources>
</target>
<subdirs>
</subdirs>
<extradist>
data.asm
</extradist>
</gwbuild>

View File

@@ -0,0 +1,14 @@
; ***************************************************************************
; 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. *
; ***************************************************************************
.dseg

View File

@@ -0,0 +1,221 @@
; ***************************************************************************
; copyright : (C) 2026 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 fan controller node on AtTiny 861
;
; 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/tn861Adef.inc" ; Define device ATtiny861A
.list
.include "../defs.asm"
.include "./data.asm"
.include "version.asm"
.include "devices/all/defs.asm"
.include "common/calls.asm"
.include "common/utils_io.asm"
.include "common/utils_wait.asm"
; ***************************************************************************
; defines
; ---------------------------------------------------------------------------
; generic
.equ NET_BUFFERS_NUM = 6
.equ NET_MSGNUMINBUF_SIZE = 8 ; max buffer nums in ringbuffer (global incoming)
.equ NET_IFACE_OUTMSGBUF_SIZE = 8 ; max buffer nums in ringbuffer (per interface outbound)
; ---------------------------------------------------------------------------
; firmware settings including list of modules used
; #define MODULES_TIMER
#define MODULES_CLOCK
#define MODULES_LED1
;#define MODULES_LED2
;#define MODULES_LED3
#define MODULES_NETWORK
#define MODULES_COM2W
;#define MODULES_TWI_MASTER
;#define MODULES_LCD
;#define LCD_MINIMAL_FONT
;#define MODULES_SI7021
;#define MODULES_SGP30
;#define MODULES_SGP40
;#define MODULES_STATS
;#define MODULES_OWI_MASTER
;#define MODULES_DS18B20
;#define MODULES_MOTION
;#define MODULES_CCS811
;#define MODULES_BRIGHTNESS
#define MODULES_MULTIFAN
#define APPS_NETWORK
;#define APPS_MOTION
#define APPS_REPORTSENSORS
#define APPS_STATS
;#define APPS_CO2WATCH
; defines for modules
; #define LED1_NETWORK_ACTIVITY
; ---------------------------------------------------------------------------
; defines for values
;.equ VALUE_ID_SGP40_TVOC = 0x08
; ***************************************************************************
; code segment
.cseg
.org 000000
; ---------------------------------------------------------------------------
; Reset and interrupt vectors
rjmp BOOTLOADER_ADDR ; 0x00: Reset vector Reset Vector
reti ; 0x01: INT0 External Interrupt 0
rjmp com2wPcintIsr ; 0x02: PCI Pin Change Interrupt
reti ; 0x03: OC1A Timer/Counter1 Compare Match 1A
reti ; 0x04: OC1B Timer/Counter1 Compare Match 1B
reti ; 0x05: OVF1 Timer/Counter1 Overflow
reti ; 0x06: OVF0 Timer/Counter0 Overflow
reti ; 0x07: USI_START USI Start
reti ; 0x08: USI_OVF USI Overflow
reti ; 0x09: ERDY EEPROM Ready
reti ; 0x0a: ACI Analog Comparator
reti ; 0x0b: ADCC ADC Conversion Complete
reti ; 0x0c: WDT Watchdog Time-Out
reti ; 0x0d: INT1 External Interrupt 1
rjmp baseTimerIrqOC0A ; 0x0e: OC0A Timer/Counter0 Compare Match A
reti ; 0x0f: OC0B Timer/Counter0 Compare Match B
reti ; 0x10: ICP0 Interrupt Capture Event for Timer/Counter0
reti ; 0x11: OC1D Timer/Counter1 Compare Match D
reti ; 0x12: FAULT_PROT Timer/Counter1 Fault Protection
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:
ret
; @end
; ---------------------------------------------------------------------------
; @routine onMessageReceived
;
; Called on every message received
onMessageReceived:
clc
ret
; @end
; ---------------------------------------------------------------------------
; @routine onEvery100ms
;
; Called every 100ms. Add your routine calls here. No arguments, no results.
onEvery100ms:
onEverySecond:
onEveryMinute:
onEveryHour:
onEveryDay:
ret
; @end
; ---------------------------------------------------------------------------
; @routine onEveryLoop
;
; Called on every loop (i.e. after awakening from sleep).
;
onEveryLoop:
ret
; @end
; ***************************************************************************
; includes
.include "devices/all/hw_tn861.asm"
.include "devices/all/includes.asm"
; ---------------------------------------------------------------------------
; defines for network interface
.equ netInterfaceData = com2w_iface
deviceCodeEnd:
.if deviceCodeEnd >= BOOTLOADER_ADDR
.warning "Code reaches into boot loader!"
.endif