File tree Expand file tree Collapse file tree 1 file changed +14
-33
lines changed Expand file tree Collapse file tree 1 file changed +14
-33
lines changed Original file line number Diff line number Diff line change 66#include <avr/io.h>
77#include "macros.inc"
88
9- ;struct {
10- ; uint32_t t0_ovfl;
11- ; uint8_t ovfl_pad;
12- ;} t0_millis;
13-
14-
15- ; to force t0_isr to get linked in
16- . global t0_ovfl_isr
17-
18- ; read lower 16 bits of extended TCNT0 into r19:r18
19- r18_t0cnt:
20- in r18 , TCNT0
21- lds r19 , t0_millis
22- in r0 , TCNT0
23- sub r0 , r18 ; TCNT0 overflow?
24- brcs r18_t0cnt
25- ret
26-
27- ; delay for r27:r24 (ulong) ms
9+ #define remain r19
10+ #define start r20
11+ #define current r21
12+ ; delay for r26:r24 (u24) ms
2813GLABEL delay_impl
29- rcall r18_t0cnt
30- movw r20 , r18 ; r20 = start count
31- rjmp decms
32- dloop:
33- rcall r18_t0cnt
34- sub r18 , r20 ; current - start
35- sbc r19 , r21
36- subi r18 , lo8(T0CNT_PER_MS) ; > 1ms?
37- sbci r19 , hi8(T0CNT_PER_MS)
38- brcc dloop
39- subi r20 , lo8( - (T0CNT_PER_MS)) ; add 1ms to start
40- sbci r21 , hi8( - (T0CNT_PER_MS))
14+ in start , TCNT0
15+ ldi remain , lo8(T0CNT_PER_MS)
16+ wait1ms: ; check TCNT0 until 1ms has passed
17+ in current , TCNT0
18+ sub current , start
19+ add start , current ; advance start
20+ sub remain , current
21+ brcc wait1ms
22+ subi remain , lo8( - (T0CNT_PER_MS)) ; add 1ms
4123decms: ; decrement ms argument
4224 sbiw r24 , 1
4325 sbci r26 , 0
44- sbci r27 , 0
45- brcc dloop
26+ brne wait1ms
4627 ret
4728
You can’t perform that action at this time.
0 commit comments