861fbf6ab5
These files all use decorators (@asm_thumb, @asm_pio) that add names to the function scope, that the linter cannot see. It's useful to clear them in the file not in pyproject.toml as example code will be copied and adapted elsewhere, and those developers may also use Ruff (we hope!) Signed-off-by: Angus Gratton <angus@redyak.com.au>
92 lines
1.7 KiB
Python
92 lines
1.7 KiB
Python
# flash LED #1 using inline assembler
|
|
# this version is overly verbose and uses word stores
|
|
#
|
|
# ruff: noqa: F821 - @asm_thumb decorator adds names to function scope
|
|
|
|
|
|
@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)
|
|
sub(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)
|
|
sub(r4, r4, 1)
|
|
cmp(r4, 0)
|
|
bgt(delay_off)
|
|
|
|
# loop r0 times
|
|
sub(r0, r0, 1)
|
|
label(loop_entry)
|
|
cmp(r0, 0)
|
|
bgt(loop1)
|
|
|
|
|
|
# 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):
|
|
# 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
|
|
strh(r2, [r1, stm.GPIO_BSRRL])
|
|
|
|
# delay for a bit
|
|
movwt(r4, 5599900)
|
|
label(delay_on)
|
|
sub(r4, r4, 1)
|
|
cmp(r4, 0)
|
|
bgt(delay_on)
|
|
|
|
# turn LED off
|
|
strh(r2, [r1, stm.GPIO_BSRRH])
|
|
|
|
# delay for a bit
|
|
movwt(r4, 5599900)
|
|
label(delay_off)
|
|
sub(r4, r4, 1)
|
|
cmp(r4, 0)
|
|
bgt(delay_off)
|
|
|
|
# loop r0 times
|
|
sub(r0, r0, 1)
|
|
label(loop_entry)
|
|
cmp(r0, 0)
|
|
bgt(loop1)
|
|
|
|
|
|
flash_led(5)
|
|
flash_led_v2(5)
|