-
Notifications
You must be signed in to change notification settings - Fork 1
/
PICO_PIO_F007T_WH1080.pio
59 lines (51 loc) · 1.27 KB
/
PICO_PIO_F007T_WH1080.pio
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
.program PWMpulseBits
; divider 625.0F => sm clock period 5 us
; => short_timer 5*(2+1)=15 us; loop*16 = 240 us
; => long_timer 5*(3+1)=20 us; loop*30 = 600 us
; => gap_timer 5*(1+3)=20 us; loop*30 = 600 us
.wrap_target
start_of_hi:
wait 1 pin 0
already_hi:
set y, 15
short_timer:
jmp y-- test_short_hi
set y, 31
long_timer:
jmp y-- test_long_hi
set x, 0
wait 0 pin 0
gap_start:
set y, 28
gap_timer:
jmp pin already_hi
jmp y-- gap_timer [2]
in x, 1
jmp start_of_hi
test_short_hi:
jmp pin short_timer [1]
.wrap
test_long_hi:
jmp pin long_timer [2]
set x, 1
jmp gap_start
.program manchWithDelay
; 1 data bit @ 1024 kHz => 976.56 us,
; with 125 MHz clock and dividor = 2543.0F
; giving 48 cycles/bit => 1 cycle time = 20.34 us of resolution
; short wait=12 => 244.08 us, long wait=24 => 488.16 us
; giving long test at 36 => 732.24 us
start_of_1:
wait 0 pin 0 [9] ; 10 short wait
jmp pin start_of_1 ; 11
in x, 1 [23] ; 35 long wait
jmp pin start_of_1 ; 36 => 48-36=12
.wrap_target
start_of_0:
wait 1 pin 0 [9] ; 10 short wait
jmp pin emit_0 ; 11
jmp start_of_0
emit_0:
in null, 1 [23] ; 35 long wait
jmp pin start_of_1 ; 36 => 48-36=12
.wrap