To jest stara wersja strony!
RCC_AHB1ENR EQU 0x40023830 ;adres rejestru APB1 clock enable GPIOG_MODER EQU 0x40021800 ;itd. GPIOG_OTYPER EQU 0x40021804 GPIOG_ODR EQU 0x40021814 THUMB AREA vector_table, DATA, READONLY ;tablia wektorow przerwan - niepelna! DCD 0x2000FFFF ;wartosc wskaznika stosu pod adresem 0x00000000 DCD reset_handler ;komorka 0x00000004 - adres procedury obslugi przerwania reset ALIGN AREA program_data, DATA, READWRITE ;dane inicjowane wartoscia - tablica 8 liczb 32bitowych delay_tab DCD 0x0004, 0x0001, 0x0001, 0x0001, 0x0001 ALIGN AREA program_code, CODE, READONLY ;kod programu ENTRY ;punkt wejsciowy - adres 1 instrukcji (ldr) reset_handler LDR R3,= delay_tab LDR R4,[R3], #4 MOVS R1, #0 tab_loop LDR R0,[R3], #4 MOVS R2, #32 main_loop EOR R1, R1, R0 ;R1=R1xR0 LSR R0, R0, #1 SUBS R2, R2, #1 BNE main_loop SUBS R4, R4, #0 BNE tab_loop AND R1, R1, #1 endless_loop B endless_loop ; ;BL clock_config ; LDR R0,=RCC_AHB1ENR ;wlacz zegar portu GPIOG ; LDR R1,[R0] ; ORR R1,R1,#(1<<6) ; STR R1,[R0] ; ; LDR R0,=GPIOG_MODER ;tryb pracy lini 13 i 14 portu G - wyjscie ; LDR R1,[R0] ; ORR R1,R1,#((1<<(2*13)) :OR: (1<<(2*14))) ; STR R1,[R0],#0x14 ;R0=GPIOG_ODR ; ; ;LDR R0,=GPIOG_OTYPER ;typ wyjscia przeciwsobne ; ;LDR R1,[R0] ; ;ORR R1,R1,#0 ; ;STR R1,[R0] ; ; ;LDR R0,=GPIOG_ODR ;GPIO output data register ; ; MOV R2,#((1<<13) :OR: (1<<14)) ;maska ledow - jedynki na 13 i 14 pozycji ; MOV R1,#(1<<13) ;wartosc poczatkowa - zielony led ;; ; LDR R7,=delay_tab ;R7 - baza- adres tablicy ; MOV R6,#0 ;w R6 wskaznik na pierwszy element ;main_loop ; LDR R4,[R7,R6, LSL #2] ;R4=delay_tab[baza+4*R6] ; ADD R6,R6,#1 ; AND R6,R6,#7 ;przesun wskaznik (mod 8) ; ; MOV R5,#5 ;5 iteracji z kazda wartoscia zwloki ;inner_loop ; EORS R1,R1,R2 ;zamien ledy ; STR R1,[R0] ;wyslij do portu i/o ; ; MOV R3,R4 ;wladuj liczbe iteracji ;delay_loop ;zwloka regulowana wartoscia z tablicy ; SUBS R3,R3,#1 ; BCS delay_loop ; SUBS R5,R5,#1 ; BCS inner_loop ; B main_loop END