Skip to content

Commit 71dcd51

Browse files
committed
examples: Add example script to flash an LED using inline assembler.
1 parent 6ce4277 commit 71dcd51

1 file changed

Lines changed: 81 additions & 0 deletions

File tree

examples/asmled.py

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
# flash LED #1 using inline assembler
2+
@micropython.asm_thumb
3+
def flash_led(r0):
4+
movw(r1, (stm.GPIOA + stm.GPIO_BSRRL) & 0xffff)
5+
movt(r1, ((stm.GPIOA + stm.GPIO_BSRRL) >> 16) & 0x7fff)
6+
movw(r2, 1 << 13)
7+
movt(r2, 0)
8+
movw(r3, 0)
9+
movt(r3, 1 << 13)
10+
11+
b(loop_entry)
12+
13+
label(loop1)
14+
15+
# turn LED on
16+
str(r2, r1, 0)
17+
18+
# delay for a bit
19+
movw(r4, 5599900 & 0xffff)
20+
movt(r4, (5599900 >> 16) & 0xffff)
21+
label(delay_on)
22+
subs(r4, r4, 1)
23+
cmp(r4, 0)
24+
bgt(delay_on)
25+
26+
# turn LED off
27+
str(r3, r1, 0)
28+
29+
# delay for a bit
30+
movw(r4, 5599900 & 0xffff)
31+
movt(r4, (5599900 >> 16) & 0xffff)
32+
label(delay_off)
33+
subs(r4, r4, 1)
34+
cmp(r4, 0)
35+
bgt(delay_off)
36+
37+
# loop r0 times
38+
subs(r0, r0, 1)
39+
label(loop_entry)
40+
cmp(r0, 0)
41+
bgt(loop1)
42+
43+
# flash LED #1 using inline assembler
44+
# this version uses the convenience assembler operation 'movwt'
45+
@micropython.asm_thumb
46+
def flash_led_v2(r0):
47+
movwt(r1, stm.GPIOA + stm.GPIO_BSRRL)
48+
movwt(r2, 1 << 13)
49+
movwt(r3, 1 << (16 + 13))
50+
51+
b(loop_entry)
52+
53+
label(loop1)
54+
55+
# turn LED on
56+
str(r2, r1, 0)
57+
58+
# delay for a bit
59+
movwt(r4, 5599900)
60+
label(delay_on)
61+
subs(r4, r4, 1)
62+
cmp(r4, 0)
63+
bgt(delay_on)
64+
65+
# turn LED off
66+
str(r3, r1, 0)
67+
68+
# delay for a bit
69+
movwt(r4, 5599900)
70+
label(delay_off)
71+
subs(r4, r4, 1)
72+
cmp(r4, 0)
73+
bgt(delay_off)
74+
75+
# loop r0 times
76+
subs(r0, r0, 1)
77+
label(loop_entry)
78+
cmp(r0, 0)
79+
bgt(loop1)
80+
81+
flash_led_v2(5)

0 commit comments

Comments
 (0)