Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ASM:
- .syntax unified
- .set PRESCALER_MAX,50
- .set PERIPH_BASE,0x40000000
- .set AHB1PERIPH_OFFSET, 0x00020000
- .set GPIOG_BASE,PERIPH_BASE+AHB1PERIPH_OFFSET+0x1800
- .set BSRR_OFFSET,0x18
- .set DELAY_INTERVAL,0x186004
- .global dioda
- on:
- @ R0 przez cały czas przechowuje adres BSRR
- start:
- LDR R0,=GPIOG_BASE+BSRR_OFFSET @ przypisanie do R0 adresu BSRR
- MOV R1,#0x20000000 @ reset PG13
- ORR R1,#0x4000 @ set PG14
- STR R1,[R0] @ wykonanie zapalenia
- @ przygotowanie zgaszenia diody PG14 i zapalenia PG13
- @ od teraz w R1 jest stan, jaki należy wysłać do BSRR
- MOV R1,#0x40000000 @ set PG14
- ORR R1,#0x2000 @ reset PG13
- PRZELACZ_OPZ:
- LDR R2, =DELAY_INTERVAL @ załadowanie czasu oczekiwania do R2
- OPZ:
- SUBS R2,R2,#1 @ zmniejsz pozostały czas oczekiwania
- CBNZ R2, OPZ @ jeżeli nie odliczono do zera, zmniejsz stan licznika (R2) i porównaj
- PRZELACZ:
- STR R1,[R0] @ zaświeć i zgaś diody wysyłając stan R1 do BSRR
- CMP R1,#0x40000000 @ jeżeli to pierwszy raz wartość R1 = 0x40002000 > 0x4000000
- BLO LR @ natomiast w drugim przejściu 0x20004000 < 0x40000000 i wtedy należy zakończyć funkcję
- @ (LR zawiera adres powrotu, BLO - B (skok) LO (lower flag))
- MOV R1,#0x20000000 @ reset PG13
- ORR R1,#0x4000 @ set PG14
- B PRZELACZ_OPZ:
- // 1 przejscie 40002000>4000000 wiec BLO LR sie nie wykona idzie do MOV
- // 2 przejscie 20004000<4000000 wiec wykonuje BLO LR i skacze do gory
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement