From 71dcd5198944b59f8f69e4027032f8ef0346eabf Mon Sep 17 00:00:00 2001 From: Damien George Date: Sat, 12 Apr 2014 18:27:23 +0100 Subject: [PATCH] examples: Add example script to flash an LED using inline assembler. --- examples/asmled.py | 81 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 examples/asmled.py diff --git a/examples/asmled.py b/examples/asmled.py new file mode 100644 index 0000000000..e0d6c73ce4 --- /dev/null +++ b/examples/asmled.py @@ -0,0 +1,81 @@ +# flash LED #1 using inline assembler +@micropython.asm_thumb +def flash_led(r0): + movw(r1, (stm.GPIOA + stm.GPIO_BSRRL) & 0xffff) + movt(r1, ((stm.GPIOA + stm.GPIO_BSRRL) >> 16) & 0x7fff) + movw(r2, 1 << 13) + movt(r2, 0) + movw(r3, 0) + movt(r3, 1 << 13) + + b(loop_entry) + + label(loop1) + + # turn LED on + str(r2, r1, 0) + + # delay for a bit + movw(r4, 5599900 & 0xffff) + movt(r4, (5599900 >> 16) & 0xffff) + label(delay_on) + subs(r4, r4, 1) + cmp(r4, 0) + bgt(delay_on) + + # turn LED off + str(r3, r1, 0) + + # delay for a bit + movw(r4, 5599900 & 0xffff) + movt(r4, (5599900 >> 16) & 0xffff) + label(delay_off) + subs(r4, r4, 1) + cmp(r4, 0) + bgt(delay_off) + + # loop r0 times + subs(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' +@micropython.asm_thumb +def flash_led_v2(r0): + movwt(r1, stm.GPIOA + stm.GPIO_BSRRL) + movwt(r2, 1 << 13) + movwt(r3, 1 << (16 + 13)) + + b(loop_entry) + + label(loop1) + + # turn LED on + str(r2, r1, 0) + + # delay for a bit + movwt(r4, 5599900) + label(delay_on) + subs(r4, r4, 1) + cmp(r4, 0) + bgt(delay_on) + + # turn LED off + str(r3, r1, 0) + + # delay for a bit + movwt(r4, 5599900) + label(delay_off) + subs(r4, r4, 1) + cmp(r4, 0) + bgt(delay_off) + + # loop r0 times + subs(r0, r0, 1) + label(loop_entry) + cmp(r0, 0) + bgt(loop1) + +flash_led_v2(5)