summaryrefslogtreecommitdiffstatshomepage
path: root/examples/asmled.py
diff options
context:
space:
mode:
Diffstat (limited to 'examples/asmled.py')
-rw-r--r--examples/asmled.py34
1 files changed, 19 insertions, 15 deletions
diff --git a/examples/asmled.py b/examples/asmled.py
index e0d6c73ce4..917d9ba03c 100644
--- a/examples/asmled.py
+++ b/examples/asmled.py
@@ -1,4 +1,5 @@
# flash LED #1 using inline assembler
+# this version is overly verbose and uses word stores
@micropython.asm_thumb
def flash_led(r0):
movw(r1, (stm.GPIOA + stm.GPIO_BSRRL) & 0xffff)
@@ -13,69 +14,72 @@ def flash_led(r0):
label(loop1)
# turn LED on
- str(r2, r1, 0)
+ str(r2, [r1, 0])
# delay for a bit
movw(r4, 5599900 & 0xffff)
movt(r4, (5599900 >> 16) & 0xffff)
label(delay_on)
- subs(r4, r4, 1)
+ sub(r4, r4, 1)
cmp(r4, 0)
bgt(delay_on)
# turn LED off
- str(r3, r1, 0)
+ str(r3, [r1, 0])
# delay for a bit
movw(r4, 5599900 & 0xffff)
movt(r4, (5599900 >> 16) & 0xffff)
label(delay_off)
- subs(r4, r4, 1)
+ sub(r4, r4, 1)
cmp(r4, 0)
bgt(delay_off)
# loop r0 times
- subs(r0, r0, 1)
+ sub(r0, r0, 1)
label(loop_entry)
cmp(r0, 0)
bgt(loop1)
-# flash LED #1 using inline assembler
-# this version uses the convenience assembler operation 'movwt'
+# flash LED #2 using inline assembler
+# this version uses half-word sortes, and the convenience assembler operation 'movwt'
@micropython.asm_thumb
def flash_led_v2(r0):
- movwt(r1, stm.GPIOA + stm.GPIO_BSRRL)
- movwt(r2, 1 << 13)
- movwt(r3, 1 << (16 + 13))
+ # get the GPIOA address in r1
+ movwt(r1, stm.GPIOA)
+
+ # get the bit mask for PA14 (the pin LED #2 is on)
+ movw(r2, 1 << 14)
b(loop_entry)
label(loop1)
# turn LED on
- str(r2, r1, 0)
+ strh(r2, [r1, stm.GPIO_BSRRL])
# delay for a bit
movwt(r4, 5599900)
label(delay_on)
- subs(r4, r4, 1)
+ sub(r4, r4, 1)
cmp(r4, 0)
bgt(delay_on)
# turn LED off
- str(r3, r1, 0)
+ strh(r2, [r1, stm.GPIO_BSRRH])
# delay for a bit
movwt(r4, 5599900)
label(delay_off)
- subs(r4, r4, 1)
+ sub(r4, r4, 1)
cmp(r4, 0)
bgt(delay_off)
# loop r0 times
- subs(r0, r0, 1)
+ sub(r0, r0, 1)
label(loop_entry)
cmp(r0, 0)
bgt(loop1)
+flash_led(5)
flash_led_v2(5)