32-bitni mikrokontroleri i primena - MS1BMP 2017/2018 Nenad Jovičić
Režimi rada procesora Nakon reseta nema razlike između Thread i handler režima. Moguće je slobodno pristupati svim resursima procesora i celog sistema.
Ulazak u neprivilegovani Thread režim Preko kontrolnog registra je moguće ograničiti mogućnosti softvera koji se izvršava u Thread režimu. To se vrši preko kontrolnog registra. Control registar poseduje samo dva bita (3 ako postoji FPU). Njime se kontroliše korišćenje steka i nivo privilegije softvera. Control registar može da se menja samo iz privilegovanog softvera. Bit 2 (FPCA) govori da li se FPU koristi ili ne.
Neprivilegovani režim Nije dozvoljeno raditi sledeće stvari: Pristupati kontrolnom registru Od specijalnih registara moguće je pristupati samo APSR registru. Nije moguće uticati ni na maske za prekide u IPSR registru. Nije dozvoljeno pristupati NVIC-u, Systick-u, ni System Control Block-u. Drugim rečima moguće je samo izvršavati korisnički kod bilo da je u glavnom programu ili prekidnim rutinama.
Korišćenje steka Privilegovani Thread koristi MSP. Neprivilegovani Thread koristi PSP. Potencijalni problem: PSP nije inicijalizovan i korisnik mora da ga inicijalizuje na pogodnu vrednost. Šta je pogodno?
Pristup registrima Postoje posebne intrinsic funkcije kojima je moguce pristupati registrima procesora.
Privilegovani/neprivilegovani rad Promena nivoa privilegije je moguća samo u privilegovanom modu rada. U prekidu je moguće uticati na nivo privilegije prilikom povratka u thread režim procesora. OS aplikacije Jednostavne aplikacije
Jednostavne OS aplikacije Softver je praktično uvek privilegovan, ali se deo softvera koji je Kernel OS-a izvršava na MSP steku, a deo softvera koji je korisnički na PSP steku.
Vežba 5.1 Operating Modes MSP se inicijalizuje korišćenjem prva 4 bajta IVT tabele Prelazak u neprivilegovani režim
Korišćenje PSP
Modifikacija? Pokušati upis u CONTROL registar nakon prebacivanja u neprivielgovani režim. Šta se dešava?
Šta se dešava u prekidu? U prekidu se uvek koristi MSP
SVC – Supervisor Call Koristi se kada korisnički neprivilegovani softver ipak ima potrebu da izvrši određene operacije koje zahtevaju sve privilegije. SVC je nešto kao softverski prekid koji poziva određenu funkciju.
Vežba 5.2 Supervisor Call
Poziv funkcije kroz prekid
Poziv funkcije kroz prekid Ako je potrebno da korisnički neprivilegovan softver implementira neku funkcionalnost koja traži privilegije, SVC-om se efektivno generiše prekid unutar koga se poziva određena funkcija.
Cortex-M4/M7 FPU IEEE 754 standard Broj ciklusa potrebnih za izvršavanje osnovnih aritmetičkih operacija. tzv. Skalarani registri: 32 single precision ili 16 double precision registra. Svi registri su memorijski mapirani. Ali u njima je moguce cuvati i integere. Konverzija integer/float i obrnuto se vrši za samo jedan ciklus...!
FPU FPU je sastavni deo procesora i praktično se izvršavanje FPU instrukcija odvija paralelno izvršavanju klasičnih instrukcija. Po default-u FPU je disable-ovan. Enable-uje se setovanjem odgovarajućih bita u Co processor Access Control Register (CPARC) registru. It is necessary to use the data barrier instruction to ensure that the write is made before the code continues. The instruction barrier command is also used to ensure that the pipeline is flushed before the code continues.
FPU i prekidi Sa aktiviranim FPU kontekst koji se automatski čuva na steku se povećava sa 32 na 100 bajtova. Da ovo ne bi povećalo latency uvodi se tzv lazy stacking procedura. http://infocenter.arm.com/help/topic/com.arm.doc.dai0298a/DAI0298A_cortex_m4f_lazy_stacking_and_context_switching.pdf
Vežba EX 8.1 Floating Point Unit Proveriti u opcijama projekta da li je uključeno korišćenje FPU.
Opcije projekta
Testiranje sa i bez FPU
Testiranje sa i bez FPU C nema operator za koren pa se forsiranje hardversko korenovanja vrši pozivom intrinsic funkcije __sqrtf(e) sqrt(e) je standardna math.h funkcija za korenovanje koja se implementira preko ostalih operacija
SIMD instrukcije Aritmetičke SIMD instrukcije sa modifikatorima
SIMD Sabiranje i oduzimanje sa “polovljenjem” rezultata Množenje sa sabiranjem i oduzimanjem
SIMD - instrukcije za podršku
Vežba EX 8.2 SIMD Uporediti vreme izvršavanja za operaciju nad nizovima sa i bez SIMD instrukcije
DSP algoritmi na Cortex M4 Tipičan FIR filter
Vežba 8.5 CMSIS-DSP FIR Uključivanje CMSIS DSP biblioteke
Logic Analyzer BLOCK_SIZE postavimo na 1. Uvodimo globalne promenljive koje mogu da se prikazuju u Logic Analyzer-u
Logic Analyzer