ºìÁªLinuxÃÅ»§
Linux°ïÖú

MicroPythonÈçºÎǶÈë»ã±à

·¢²¼Ê±¼ä:2016-09-05 12:03:26À´Ô´:ºìÁª×÷Õß:roeta
MicroPython °üº­¿ÉÄÚÁªµÄ»ã±à£¬ÔÊÐíÓû§Ê¹Óûã±àÓïÑÔ×÷Ϊ Python µÄ×Ó³ÌÐò£¬ÇÒÄã¿ÉÒÔÏñÕý³£Ê¹Óú¯Êý°ãʹÓÃËüÃÇ¡£

1¡¢·µ»ØÖµ

ÄÚÁª»ã±àº¯ÊýÓÃÌØ¶¨µÄº¯Êý×°ÊÎÆ÷±êʾ¡£ÎÒÃÇ´Ó×î¼òµ¥µÄÀý×ÓÏÂÊÖ£º

@micropython.asm_thumb
def fun():
movw(r0, 42)

Äã¿ÉÒÔÔڽű¾»òÊǽâÊÍÆ÷Àï±ßʹÓøú¯Êý¡£¸Ãº¯ÊýûÓÐÈκβÎÊýÇÒ·µ»ØÊýÖµ42 ¡£r0 ÊÇÒ»¸ö¼Ä´æÆ÷£¬ÆäÖеÄÊýÖµÔÚº¯Êý·µ»ØÖµ·µ»ØÊ±±»¸ü¸Ä¡£MicroPython Ò»Ö±½« r0ÊÓΪһ¸öÕûÊý²¢½«Æä×÷ΪÕûÊý±äÁ¿¹©Ê¹ÓÃÕßµ÷Óá£

Èç¹ûʹÓÃÁËÃüÁî print(fun( )) ½«ÄÜ¿´µ½ÊýÖµ42±»´òÓ¡³öÀ´¡£

2¡¢»ã±àÓïÑÔ»ù´¡

ÉÔ΢¸´ÔÓһЩЩ£¬ÎÒÃdz¢ÊÔµãÁÁÒ»ÕµµÆ£º

@micropython.asm_thumb
def led_on():
movwt(r0, stm.GPIOA)
movw(r1, 1 << 13)
strh(r1, [r0, stm.GPIO_BSRRL])

ÉÏÊö´úÂëʹÓÃÁËһЩеĸÅÄ

. stm Ϊ pyboard µÄ΢´¦ÀíÆ÷ÌṩÁËһϵÁÐÄÚÈÝÒÔ±ãÓÚÁ¬½Ó¼Ä´æÆ÷¡£³¢ÊÔÔÚ REPL ÀïÔËÐÐ import stm ºÍ help(stm) ¡£Õ⽫µÃµ½Ò»Çåµ¥µÄÓÐÓÃÄÚÈÝ£º

. stm.GPIOA ¶ÔÓ¦ÍâΧÉ豸GPIOA ÔÚÄÚ´æÖеĵØÖ·¡£ÔÚ pyboard °åÉϺìÉ«µÄled µÆ¶ÔÓ¦ A¶Ë¿Ú£¬PA13 Òý½Å£»

. movwt ½«32λÊýÖµ·ÅÈë¼Ä´æÆ÷ÖС£Æä¿ÉÊÓΪÓÉÁ½¸öÖ¸Á×é³ÉµÄ¼ò±ãº¯Êý£ºÏÈÊÇ movw È»ºó movt ¡£movt ½«16λÁ¢¼´ÊýÒÆ ¶¯¡£

.strh ´æ´¢°ë×ÖÊý¾Ý¡£ÉÏÊö´úÂëÀォr1µÄµÍ16λÊýÖµ´æÈë r0 +stm.GPIO_BSRRL µÄÄÚ´æµØÖ·ÖС£Õ⽫°´ÕÕ r0 ÀïÉ趨µÄÊýÖµ½« A ¶Ë¿Ú¶ÔÓ¦µÄÒý½ÅÉèÖÃΪ¸ß¡£Àý³ÌÖÐr0µÄµÚ13λֵ±»ÖÃ룬¹ÊPA13 ±»À­¸ß¡£Òò´ËºìÉ«LED µÆ±»µãÁÁ¡£

3¡¢½ÓÊܲÎÊý

ÄÚÁª»ã±àÓïÑÔ×î¶à¿ÉÒÔ½ÓÊÕËĸö²ÎÊý¡£Ò»µ©±»Ê¹Ó㬱ØÐëΪ r0,r1,r2,r3 µÄ¼Ä´æÆ÷»òÆäÀï±ßµÄµ÷ÓÃÄÚÈÝ¡£ÒÔÏÂÊÇʹÓÃÁËÕâЩ²ÎÊýµÄº¯Êý£º

@micropython.asm_thumb
def asm_add(r0, r1):
add(r0, r0, r1)

ÕâÀïʹÓÃÁË r0=r0+r1 µÄ¼ÆËã¡£ÓÉÓÚ½«½á¹û·ÅÈëÁË r0 ÖУ¬¹ÊÆäΪ·µ»Ø½á¹û¡£³¢ÊÔÔËÐÐasm(1,2)£¬½«Äܵõ½ 3 µÄ·µ»ØÖµ¡£

4¡¢Ñ­»·

ÎÒÃÇ¿ÉÒÔ·ÖÅä label(my_label)µÄ±êºÅ£¬È»ºóʹÓà b(my_label) Ìø×ªµ½¸Ã·ÖÖ§£¬»òÕßÓà bgt(my_lable)½øÐÐÓÐÌõ¼þµÄÌø×ª¡£ÏÂÃæÀý³ÌʹÂÌÉ«µÄ LED µÆÉÁ˸£¬ÉÁ˸´ÎÊý´æ·ÅÔÚ r0 Àï±ß¡£

@micropython.asm_thumbdef flash_led(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)

ÏÂÔØµØÖ·£ºhttps://micropython.org/download

À´×Ô:¿ªÔ´ÖйúÉçÇø
ÎÄÕÂÆÀÂÛ

¹²ÓÐ 0 ÌõÆÀÂÛ