aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjustanothercatgirl <sotov2070@gmail.com>2025-05-27 17:29:41 +0300
committerjustanothercatgirl <sotov2070@gmail.com>2025-05-27 17:29:41 +0300
commit626193487e2795c69b2c7a3de57228656a414b5b (patch)
treebd74d2d26fed2b115d7fce2391033b4140290ada
parentef2367f0625525707440092e56d76352c754cd7b (diff)
-rw-r--r--sleep.s95
-rw-r--r--timer.s1
2 files changed, 63 insertions, 33 deletions
diff --git a/sleep.s b/sleep.s
index 16817c2..9bd2c84 100644
--- a/sleep.s
+++ b/sleep.s
@@ -1,4 +1,4 @@
-.equ SREG, 0x3F
+.include "def.s"
.macro LDCPUF
ldi r19, hhi8(CPUF)
@@ -8,9 +8,13 @@
.endm
.equ CPUF, 16000000
+.equ BEEPF, 311
+.equ DUTY, 5
.org 0x0000
cli
+ sbi DDRD, 2
+ cbi PORTB, 2
main: rjmp hztest
slc_test:
ldi r19, 0x00
@@ -52,10 +56,18 @@ ls32_test:
ror r16
nop
hztest:
- ldi r21, hi8(2)
- ldi r20, lo8(2)
- call genhz
-1: rjmp 1b
+ ldi r31, hi8(BEEPF)
+ ldi r30, lo8(BEEPF)
+ ldi r29, 0
+ ldi r28, 1
+1:
+ add r30, r28
+ adc r31, r29
+ mov r20, r30
+ mov r21, r31
+ rcall genhz
+ rjmp 1b
+2: rjmp 2b
; * r16 (divident) / r17(divisor) ->
; -> r16 (quotient), r15 (remainder)
@@ -146,29 +158,27 @@ u32div:
sl16c32:
ldi r20, 1
ldi r21, 0
-1: nop
- nop
- nop
- nop
- sub r16, r20
- sbc r17, r21
- sbc r18, r21
- sbc r19, r21
- cpi r16, 0
- brne 2f
- cpi r17, 0
- brne 3f
- cpi r18, 0
- brne 4f
- cpi r19, 0
- brne 1b
- ret
-2: nop
- nop
-3: nop
- nop
-4: nop
- rjmp 1b
+1: nop ; 1
+ nop ; 1
+ nop ; 1
+ sub r16, r20 ; 1
+ sbc r17, r21 ; 1
+ sbc r18, r21 ; 1
+ sbc r19, r21 ; 1
+ cpi r16, 0 ; 1
+ brne 2f ; 2 : 1
+ cpi r17, 0 ; 1
+ brne 3f ; 2 : 1
+ cpi r18, 0 ; 1
+ brne 4f ; 2 : 1
+ cpi r19, 0 ; 1
+ brne 1b ; 2 : 1
+ ret ; 4
+2: nop ; 1
+ nop ; 1
+3: nop ; 1
+ nop ; 1
+4: rjmp 1b ; 2
; * r20: shift length
; * {r19:r16}: shift value
@@ -195,22 +205,43 @@ lsl32: cpi r20, 0
genhz:
clr r22
clr r23
- eor r10, r10
LDCPUF
rcall u32div
- ldi r20, 4+1 ; 4 for sl16, 1 for frequency
+ ldi r20, 4-1+DUTY ; +4 for slp, -1 for logic, +DUTY for duty cycle
rcall lsr32
+
+ ; {r9:r6} - on duty cycle
mov r6, r16
mov r7, r17
mov r8, r18
mov r9, r19
+ ; {r13:r10} - off duty cycle
+ ldi r20, DUTY
+ rcall lsl32
+ mov r10, r16
+ mov r11, r17
+ mov r12, r18
+ mov r13, r19
+ sub r10, r6
+ sbc r11, r7
+ sbc r12, r8
+ sbc r13, r9
+ nop
-1: mov r16, r6
+L1:
+1: sbi PIND, 2
+ mov r16, r6
mov r17, r7
mov r18, r8
mov r19, r9
rcall sl16c32
- inc r10
+ sbi PIND, 2
+ mov r16, r10
+ mov r17, r11
+ mov r18, r12
+ mov r19, r13
+ rcall sl16c32
rjmp 1b
+ ret
; vim:ft=avra
diff --git a/timer.s b/timer.s
index ccd51e0..5fffb23 100644
--- a/timer.s
+++ b/timer.s
@@ -90,4 +90,3 @@ main:
rjmp main
-"