started reorganizing code into subfolders.
This commit is contained in:
58
avr/common/utils_wait.asm
Normal file
58
avr/common/utils_wait.asm
Normal file
@@ -0,0 +1,58 @@
|
||||
; ***************************************************************************
|
||||
; copyright : (C) 2023 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. *
|
||||
; ***************************************************************************
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
; ***************************************************************************
|
||||
; macros
|
||||
|
||||
|
||||
|
||||
; ---------------------------------------------------------------------------
|
||||
; Utils_WaitNanoSecs waittime_in_ns , cyles_already_used , waitcount_register
|
||||
;
|
||||
; cycles already used will be subtracted from the delay
|
||||
; the waittime resolution is 1 cycle (delay from exact to +1 cycle)
|
||||
; the maximum delay at 20MHz (50ns/clock) is 38350ns
|
||||
; waitcount register must specify an immediate register
|
||||
; taken from https://www.mikrocontroller.net/articles/AVR_Assembler_Makros#Verz%C3%B6gerung_um_X_Nanosekunden
|
||||
;
|
||||
.set Osc_Hz = clock ; 1 MHz
|
||||
.set cycle_time_ns = (1000000000 / Osc_Hz) ; clock duration
|
||||
.macro Utils_WaitNanoSecs
|
||||
.set cycles = ((@0 + cycle_time_ns - 1) / cycle_time_ns - @1)
|
||||
.if (cycles > (255 * 3 + 2))
|
||||
.error "MACRO Utils_WaitNanoSecs - too many cycles to burn"
|
||||
.else
|
||||
.if (cycles > 6)
|
||||
.set loop_cycles = (cycles / 3)
|
||||
ldi @2,loop_cycles
|
||||
dec @2
|
||||
brne pc-1
|
||||
.set cycles = (cycles - (loop_cycles * 3))
|
||||
.endif
|
||||
.if (cycles > 0)
|
||||
.if (cycles & 4)
|
||||
rjmp pc+1
|
||||
rjmp pc+1
|
||||
.endif
|
||||
.if (cycles & 2)
|
||||
rjmp pc+1
|
||||
.endif
|
||||
.if (cycles & 1)
|
||||
nop
|
||||
.endif
|
||||
.endif
|
||||
.endif
|
||||
.endmacro
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user