Advertisement
voik3

Untitled

Jul 2nd, 2019
942
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ASM:
  2.  .syntax unified
  3.  .set PRESCALER_MAX,50
  4.  .set PERIPH_BASE,0x40000000
  5.  .set AHB1PERIPH_OFFSET, 0x00020000
  6.  .set GPIOG_BASE,PERIPH_BASE+AHB1PERIPH_OFFSET+0x1800
  7.  .set BSRR_OFFSET,0x18
  8.  .set DELAY_INTERVAL,0x186004
  9.  
  10.   .global dioda
  11.  
  12.     on:
  13.     @ R0 przez cały czas przechowuje adres BSRR
  14.     start:
  15.     LDR R0,=GPIOG_BASE+BSRR_OFFSET  @ przypisanie do R0 adresu BSRR
  16.     MOV R1,#0x20000000  @ reset PG13
  17.     ORR R1,#0x4000  @ set PG14
  18.     STR R1,[R0] @ wykonanie zapalenia
  19.     @ przygotowanie zgaszenia diody PG14 i zapalenia PG13
  20.     @ od teraz w R1 jest stan, jaki należy wysłać do BSRR
  21.     MOV R1,#0x40000000  @ set PG14
  22.     ORR R1,#0x2000  @ reset PG13
  23.  
  24. PRZELACZ_OPZ:
  25.     LDR   R2,  =DELAY_INTERVAL  @ załadowanie czasu oczekiwania do R2
  26. OPZ:
  27.     SUBS R2,R2,#1   @ zmniejsz pozostały czas oczekiwania
  28.     CBNZ R2, OPZ    @ jeżeli nie odliczono do zera, zmniejsz stan licznika (R2) i porównaj
  29. PRZELACZ:
  30.     STR R1,[R0] @ zaświeć i zgaś diody wysyłając stan R1 do BSRR
  31.     CMP R1,#0x40000000  @ jeżeli to pierwszy raz wartość R1 = 0x40002000 > 0x4000000
  32.  
  33.     BLO LR  @ natomiast w drugim przejściu 0x20004000 < 0x40000000 i wtedy należy zakończyć funkcję
  34.     @ (LR zawiera adres powrotu, BLO - B (skok) LO (lower flag))
  35.     MOV R1,#0x20000000  @ reset PG13
  36.     ORR R1,#0x4000  @ set PG14
  37.     B PRZELACZ_OPZ:
  38.    
  39. // 1 przejscie 40002000>4000000 wiec BLO LR sie nie wykona idzie do MOV
  40. // 2 przejscie 20004000<4000000 wiec wykonuje BLO LR i skacze do gory
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement