started working on AtMega8515 module C1.
This commit is contained in:
@@ -9,6 +9,7 @@
|
||||
hw_tn84.asm
|
||||
hw_tn85.asm
|
||||
hw_tn841.asm
|
||||
hw_m8515.asm
|
||||
includes.asm
|
||||
main.asm
|
||||
modules.asm
|
||||
|
||||
@@ -40,7 +40,8 @@
|
||||
|
||||
.equ EEPROM_OFFS_SEED = 10 ; 2 bytes
|
||||
|
||||
.equ EEPROM_OFFS_REED_CONF = 12 ; 1 byte (plus one byte reserved)
|
||||
.equ EEPROM_OFFS_OSCCAL_SLOW = 12 ; 1 byte
|
||||
.equ EEPROM_OFFS_OSCCAL_FAST = 13 ; 1 byte
|
||||
|
||||
.equ EEPROM_OFFS_MAL_CONF_ONTIME = 14 ; 2 bytes
|
||||
.equ EEPROM_OFFS_MAL_CONF_SRC1_ADDR = 16 ; 1 byte
|
||||
|
||||
151
avr/devices/all/hw_m8515.asm
Normal file
151
avr/devices/all/hw_m8515.asm
Normal file
@@ -0,0 +1,151 @@
|
||||
; ***************************************************************************
|
||||
; 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. *
|
||||
; ***************************************************************************
|
||||
|
||||
; Hardware routine for AtTiny 84 devices
|
||||
|
||||
|
||||
.cseg
|
||||
|
||||
|
||||
; ---------------------------------------------------------------------------
|
||||
; @routine systemInitHardware
|
||||
;
|
||||
|
||||
systemInitHardware:
|
||||
; set all ports as inputs and enable internal pull-up resistors
|
||||
ldi r16, 0xff
|
||||
clr r17
|
||||
.ifdef PORTA
|
||||
out DDRA, r17 ; all input
|
||||
out PORTA, r16 ; enable pull-up on all
|
||||
.endif
|
||||
|
||||
.ifdef PORTB
|
||||
out DDRB, r17 ; all input
|
||||
out PORTB, r16 ; enable pull-up on all
|
||||
.endif
|
||||
|
||||
.ifdef PORTC
|
||||
out DDRC, r17 ; all input
|
||||
out PORTC, r16 ; enable pull-up on all
|
||||
.endif
|
||||
|
||||
.ifdef PORTD
|
||||
out DDRD, r17 ; all input
|
||||
out PORTD, r16 ; enable pull-up on all
|
||||
.endif
|
||||
|
||||
.ifdef PORTE
|
||||
out DDRE, r17 ; all input
|
||||
out PORTE, r16 ; enable pull-up on all
|
||||
.endif
|
||||
|
||||
ret
|
||||
; @end
|
||||
|
||||
|
||||
|
||||
; ---------------------------------------------------------------------------
|
||||
; @routine systemSetSpeed
|
||||
;
|
||||
|
||||
systemSetSpeed:
|
||||
ret
|
||||
; @end
|
||||
|
||||
|
||||
|
||||
; ---------------------------------------------------------------------------
|
||||
; @routine systemSleep
|
||||
;
|
||||
|
||||
systemSleep:
|
||||
; only modify SE, SM2, SM1 and SM0
|
||||
cli
|
||||
M_IO_READ r16, MCUCR
|
||||
cbr r16, (1<<SE) | (1<<SM2) | (1<<SM1)
|
||||
M_IO_WRITE MCUCR, r16
|
||||
M_IO_READ r16, EMCUCR
|
||||
cbr r16, (1<<SM0)
|
||||
M_IO_WRITE EMCUCR, r16
|
||||
sei ; make sure interrupts really are enabled
|
||||
M_IO_READ r16, MCUCR ; enable sleep mode
|
||||
sbr r16, (1<<SE)
|
||||
M_IO_WRITE MCUCR, r16
|
||||
sleep ; sleep, wait for interrupt
|
||||
M_IO_READ r16, MCUCR ; disable sleep mode
|
||||
cbr r16, (1<<SE)
|
||||
M_IO_WRITE MCUCR, r16
|
||||
ret
|
||||
; @end
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
; ---------------------------------------------------------------------------
|
||||
; @routine systemSetupTimer0
|
||||
;
|
||||
|
||||
systemSetupTimer0: ; setup timer for IRQ every 100ms
|
||||
ldi r16, (1<<CS02) | (0<<CS01) | (1<<CS00) | (1<<WGM01) | (0<<WGM00) ; Prescaler 1024, CTC mode
|
||||
out TCCR0, r16
|
||||
|
||||
;
|
||||
; Settings for clock 1Mhz (default)
|
||||
; use timer0 with OCR0A=98-1 (irq every 97.65625 millisecs), baseTimerModuleReloadValue 1
|
||||
;
|
||||
.if clock == 1000000
|
||||
; CMP-A interrupt about every 100ms
|
||||
ldi r16, 98-1 ; (1,000,000/1024)/10 = 97.65625
|
||||
out OCR0, r16
|
||||
|
||||
ldi r16, 1
|
||||
sts baseTimerModuleReloadValue, r16
|
||||
sts baseTimerModuleTickCounter, r16
|
||||
.endif
|
||||
|
||||
;
|
||||
; Settings for clock 8Mhz
|
||||
; use timer0 with OCR0=78 (irq every 9.984 millisecs), baseTimerModuleReloadValue 10
|
||||
;
|
||||
.if clock == 8000000
|
||||
; CMP interrupt about every 10ms
|
||||
ldi r16, 78-1
|
||||
out OCR0, r16
|
||||
|
||||
ldi r16, 10
|
||||
sts baseTimerModuleReloadValue, r16
|
||||
sts baseTimerModuleTickCounter, r16
|
||||
.endif
|
||||
|
||||
ldi r16, (1<<OCF0) ; clear pending interrupts
|
||||
.ifdef TIFR0
|
||||
out TIFR0, r16
|
||||
.else
|
||||
out TIFR, r16
|
||||
.endif
|
||||
|
||||
.ifdef TIMSK0
|
||||
M_IO_READ r16, TIMSK0
|
||||
sbr r16, (1<<OCIE0) ; Timer/Counter0 Output Compare Match A Interrupt Enable
|
||||
M_IO_WRITE TIMSK0, r16
|
||||
.else
|
||||
M_IO_READ r16, TIMSK
|
||||
sbr r16, (1<<OCIE0) ; Timer/Counter0 Output Compare Match A Interrupt Enable
|
||||
M_IO_WRITE TIMSK, r16
|
||||
.endif
|
||||
|
||||
sec
|
||||
ret
|
||||
; @end
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user