przejście do zawartości
WoGu Wiki
Narzędzia użytkownika
Zaloguj
Narzędzia witryny
Szukaj
Narzędzia
Pokaż stronę
Poprzednie wersje
Odnośniki
Ostatnie zmiany
Menadżer multimediów
Indeks
Zaloguj
>
Ostatnie zmiany
Menadżer multimediów
Indeks
studia:magisterskie:1sem:mikroprocesory
Edytujesz nieaktualną wersję strony!
Jeśli ją zapiszesz to stanie się ona wersją aktualną.
Wysyłanie pliku
===== Zajęcia 3 ====== <code asm>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 END</code> ===== Zajęcia 4 ===== <code asm> 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 DCB 0x0004, 0x0002, 0x0001, 0x0005, 0x0001 ALIGN AREA program_code, CODE, READONLY ;kod programu ENTRY reset_handler ;punkt wejsciowy - adres 1 instrukcji (ldr) LDR R1,=delay_tab LDRB R2,[R1],#1 MOV R3,#0 petla_loop LDRB R0,[R1],#1 CMP R0,R3 IT HI MOVHI R3,R0 SUBS R2,R2,#1 BNE petla_loop endless_loop B endless_loop END</code> ===== Zajęcia 5 ===== <code asm>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 DCB 0x0002, 0x0001, 0x0005, 0x0001 ALIGN AREA program_code, CODE, READONLY ;kod programu ENTRY reset_handler ;punkt wejsciowy - adres 1 instrukcji (ldr) MOV R0,#0x0004 LDR R1,=delay_tab BL maks ; skok do labelki maks maks PUSH {R4, R5} ; wrzucenie na stos zeby ich nie zgubic MOV R4,#0x80000000 petla_loop LDRB R5,[R1],#1 ;ladowanie pierwszego elementu CMP R5,R4 ;porownanie IT GT MOVGT R4,R5 SUBS R0,R0,#1 BNE petla_loop MOV R0, R4 POP {R4, R5} ;pobranie ze stosu BX LR ;skok do LR (adresu do ktorego ma wrocic funkcja) endless_loop B endless_loop nop END</code> ===== Zajęcia 6 ====== ==== asm_simple.s ==== <code asm>RCC_AHB1ENR EQU 0x40023830 ;adres rejestru APB1 clock enable GPIOG_MODER EQU 0x40021800 ;itd. GPIOG_OTYPER EQU 0x40021804 GPIOG_ODR EQU 0x40021814 THUMB IMPORT clock_config 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 0xC000, 0x10000, 0x18000, 0x20000, 0x30000, 0x40000, 0x60000, 0x80000 ALIGN AREA program_code, CODE, READONLY ;kod programu ENTRY ;punkt wejsciowy - adres 1 instrukcji (ldr) reset_handler 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 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</code> ==== clock_config.s ==== <code asm>RCC_CR EQU 0x40023800 RCC_PLLCFGR EQU 0x40023804 RCC_CFGR EQU 0x40023808 RCC_AHB1ENR EQU 0x40023830 RCC_AHB2ENR EQU 0x40023834 RCC_APB1ENR EQU 0x40023840 RCC_PLLCFGR_CLR_MASK EQU 0xF0BC0000 THUMB EXPORT clock_config AREA config_code, CODE, READONLY ALIGN clock_config PUSH {R4-R6} ;po resecie - wlaczony wewnetrzny oscylator (HSI) - 16MHz LDR R4,=RCC_CR ;RCC_CR - CLOCK CONTROL REGISTER LDR R5,[R4] BIC R5,R5,#1<<0 ;HSI off ORR R5,R5,#1<<16 ;HSE on STR R5,[R4] hse_stabilization LDR R5,[R4] ANDS R5,R5,#1<<17 ;czekaj na ustabilizowanie HSE BEQ hse_stabilization ;konfiguracja PLL: fout = (fin/M)*(N/P) ;fin=16MHz dla HSI, 8MHz dla HSE ;wartosci po resecie: ;M=16 (bity 5-0) ;N=192 (bity 14-6) ;P=2 (bity 16-17) ;Q=4 (bity 24-27) LDR R6,=RCC_PLLCFGR_CLR_MASK LDR R5,[R4,#4] ;RCC_PLLCFGR - PLL CONFIGURATION REGISTER ANDS R5,R5,R6 ;maska - zostaw tylko bity 'reserved' ORR R5,R5,#30 ;PLLM: 2 - 63 ORR R5,R5,#432<<6 ;PLLN: 100 - 432 ORR R5,R5,#1<<16 ;PLLP 0=/2 1=/4 2=/6 3=/8 ORR R5,R5,#1<<22 ;wejscie PLL 22 bit HSE=1 HSI=0 ORR R5,R5,#4<<24 ;PLLQ STR R5,[R4,#4] LDR R5,[R4] ;RCC_CR ORR R5,R5,#1<<24 ;wlacz PLL STR R5,[R4] pll_stabilization LDR R5,[R4] ANDS R5,R5,#1<<25 ;czekaj na zatrzasniecie PLL BEQ pll_stabilization LDR R5,[R4,#8] ;RCC_CFGR ORR R5,R5,#02 ;System Clock source: 0-HSI 1-HSE 2-PLL ORR R5,R5,#0<<4 ;AHB PRESCALER 0 - /1, 8 - /2, 9 - /4 ,10 - /8 ... 15 - /512 ORR R5,R5,#0<<10 ;APB1 PRESCALER LOW SPEED 0 - /1, 4 - /2, 5- /4, 6 - /8, 7 - /16 ORR R5,R5,#0<<13 ;APB2 PRESCALER HI SPEED 0 - /1, 4 - /2, 5- /4, 6 - /8, 7 - /16 STR R5,[R4,#8] sys_clk_check LDR R5,[R4,#8] ANDS R5,R5,#02<<2 ;zaczekaj az bedzie gotowy, wartosci jak wyzej BEQ sys_clk_check POP {R4-R6} BX LR ALIGN END</code>
Zapisz
Podgląd
Anuluj
Opis zmian
studia/magisterskie/1sem/mikroprocesory.1460482625.txt.gz
· ostatnio zmienione: 2016/04/12 19:37 przez
149.156.112.6
Narzędzia strony
Pokaż stronę
Poprzednie wersje
Odnośniki
Do góry