Home | Izobraževanje, Znanost
Univerza v Ljubljani Fakulteta za elektrotehniko Aleš Hribar Mikrokrmilniški učni sistem Univerzitetno diplomsko delo Mentor: doc. dr. Roman Kamnik Somentor: prof. dr. Marko Munih V Ljubljani, avgusta 2006 Povzetek Diplomska naloga obravnava mikrokrmilni?ski razvojni sistem, ki je zgrajen na osnovi mikrokrmilnika Philips LPC2138. Delo predstavlja uporabo sistema v praksi. V ta namen je pripravljenih deset primerov, ki uporabnika uvedejo v delozmikrokrmilnikomternazorno prika?zejouporabnost mikrokrmilnikaoziroma celotnega razvojnega sistema. Delo je razdeljeno na?sest poglavij. Po uvodnem poglavju je predstavljena cen- tralno procesna enota mikrokrmilnika. Ta je obravnavana zgo?s?ceno, saj podrobno poznavanje za uporabnika ni klju?cnega pomena. V naslednjem poglavju sledi predstavitev mikrokrmilnika. Najprej sta obrav- navani RAM in Flash pomnilni?ski enoti. Za tem so v dveh lo?cenih podpoglavjih obravnavne sistemske in vhodno-izhodne enote. ?Cetrto poglavje obravnava razvojno plo?s?co ITLPC2138 in razvojno program- sko okolje WinIDEA. Opisani so konektorji, mosti?ci in vsa ostala periferija, ki se nahaja na tiskanem vezju razvojne plo?s?ce. Predstavljene so tudi osnovne funkcije razvojnega okolja. V petem poglavju so opisana dodatna raz?siritvena tiskana vezja. Ta so bila razvita z namenom demonstracije nekaterih zna?cilnosti mikrokrmilnika, ki se jih samo z razvojno plo?s?co ITLPC2138 ne da pokazati. Zadnje poglavje vklju?cuje deset primerov prakti?cne uporabe mikrokr- milni?skega razvojnega sistema. Primeri si sledijo po te?zavnosti od la?zjega proti te?zjem in jih je tako smiselno tudi obravnavati. Prvi primer je napisan v zbirnem jeziku, vsi ostali pa v programskem jeziku C/C++. Prva dva primera se ukvarjata s splo?snonamenskimi vhodno izhodnimi-linijami. Tretji primer predstavi uporabo prikazovalnika na teko?ce kristale. Sledi primer uporabe notranjega A/D pretvornika. Z modulom realnega ?casa se spoznamo v petem primeru. ?Sesti in sedmi primer obravnavata modul za generiranje pulzno-?sirinsko moduliranih signalov. Zadnji trije primeri se ukvarjajo s serijskim prenosom podatkov. Uporabljeni so UART, I2C in SPI serijski vmesniki. klju?cne besede: LPC2138, ARM7, mikrokrmilnik, PWM, I2C, SPI, UART 1 Abstract The thesis describes ARM7 based development board. The heart of development board is Philips?s LPC2138 microcontroller. Thesis tries to show how to use development system in practical applications. The best way to do that is to guide the user step by step trough small applications which can at the end be put together in a bigger project. The thesis consists of six chapters. The flrst is a short introduction into the world of microcontrollers. Second chapter describes the key features of the ARM7 core along with its programmers? model. It also discuses the instruction set used to program it. This is intended to give a reader a good feel for the CPU used in the LPC2000 family. Next chapter is divided in three sections and presents LPC2138 microcontrol- ler. First section describes memory mapping scheme, RAM and Flash memory. Second section summarizes system control block functions. The end of the third chapter describes user peripherals. In fourth chapter there is a description of a ITLPC2138 development board and WinIDEA integrated development environment. Here all connectors and jumpers located on development board are described. Chapter also describes key features of the WinIDEA environment. Fifth chapter describes additional printed circuit boards. These boards are: Motor control PCB; I2C, SPI and CAN serial interface demonstrational PCB and matrix keyboard PCB. Boards were developed to demonstrate the use of some additional features of LPC2138 microcontroller which can not be displayed by using only ITLPC2138 target board. Last chapter consists of ten sections. Each section is an example on how to use difierent user?s peripherals integrated in LPC2138 microcontroller. Code for flrst example is written in assembler. All other examples code is written in C/C++ language. Di?culty level increases trough examples so it is advised to treat them in presented order. key words: LPC2138, ARM7, microcontroller, PWM, I2C, SPI, UART 2 1. Uvod Mikrokrmilnik je zaklju?cena enota vgrajena v integrirano vezje, ki poleg mikro- procesorja vklju?cuje ?se pomnilni?ske enote in druge periferne naprave. Namenjen je vodenju elektronskih naprav. V zadnjih letih je razvoj mikrokrmilnikov dosegel nesluten napredek. Danes na trgu skoraj ni mogo?ce najti elektronske naprave, ki ne bi vsebovala mikrokrmilnika. Podro?cje uporabe je ?siroko: od medicine do mo- bilne telefonije preko avtomobilske industrije do vesoljske tehnike. V avtomobil srednjega razreda je danes vgrajenih ve?c deset raznovrstnih mikrokrmilnikov. Ti skrbijo za pravilno delovanje motorja, zavornega in pogonskega sistema, zra?cnih blazin in ?se bi lahko na?stevali. Prednosti uporabe mikrokrmilnikov, pred klasi?cnimi logi?cnimi vezji, so v ve- liki eksibilnosti v smislu nadgradnje in spremembe funkcionalnosti, saj je mar- sikaj mo?zno izbolj?sati le s spremembo programske kode. Poleg tega je razvoj strojne in programske opreme cenej?si in enostavnej?si, kot pri uporabi klasi?cnega splo?snonamenskega procesorja. Zaradi strogih zahtev po nizki porabi energije in visoki integriranosti, je k ra- zvoju mikrokrmilnikov najve?c pripomogel razmah izdelkov ?siroke potro?snje, kot so mobilni telefoni in prenosni organizatorji (ang. Personal Digital Assistant - PDA). Zaradi potreb trga so se za?celi pojavljati proizvajalci, ki se ukvarjajo samo z na?crtovanjem jeder mikrokrmilnikov; vse ostale komponente: pomnil- nik?ske enote, A/D pretvornike in ostale vmesnike pa razvije in skupaj z jedrom integrira drugo podjetje. Med najbolj raz?sirjenimi mikrokrmilni?skimi jedri so je- dra proizvajalca ARM. Jedra ARM uporabljajo podjetja Philips, Sharp, OKI in mnogi drugi svetovno znani proizvajalci mikrokrmilni?skih sistemov. Glede na ?siroko uporabnost in raz?sirjenost je smiselno, ?ce ne ?ze nujno, delo z mikrokrmilniki vklju?citi v izobra?zevalni proces bodo?cih tehni?skih kadrov. Dan- danes si je skorajda nemogo?ce zamisliti in?zinerja elektrotehnike brez poznavanja delovanja mikrokrmilnika. Diplomsko delo obravnava sodoben mikrokrmilnik Philips LPC2138. Ta je 3 Uvod Ale?s Hribar ?clan Philipsove dru?zine mikrokrmilnikov z imenom LPC2000. Srce mikrokrmil- nika predstavlja ARM7TDMI-Sr jedro, ki je 16/32 bitna RISC (ang. Reduced Instruction Set Computer) CPE (Centralno Procesna Enota). Maksimalni takt ure je 60 MHz. Mikrokrmilnik LPC2138 vsebuje 512 kB Flash in 32 kB SRAM (Static Random Acess Memory) pomnilnika. Odlikuje se z mnogimi vhodno- izhodnimi enotami, razli?cnimi serijskimi vmesniki in nizko porabo energije. Poudarekdela jenarazvojuu?cnihprogramskih primerov, kiuporabnikasezna- nijo z delovanjem in programiranjem mikrokrmilnika. Primeri, ki so predstavljeni, so namenjeni ?studentom drugega letnika avtomatike visoko?solskega strokovnega ?studija. Uporabni pa so za vsakogar, ki bi se rad seznanil z delovanjem in uporabo Philipsovega mikrokrmilnika. Uporabnik je v delo z mikrokrmilnikom uveden s preprostim primerom krmiljenja svetle?ce (LED) diode. Programska koda tega primera je napisana v zbirniku. Naslednji primer je nadgradnja prvega. V tem primeru zaporedno pri?zigamo ?stiri svetle?ce diode. Tako, kot tudi vsi naslednji, je ta program napisan v programskem jeziku C/C++. Pri tretjem primeru se spoznamo z delovanjem alfa numeri?cnega prikazovalnika na teko?ce kristale (v na- daljevanju LCD). Poleg inicializacije je potrebnih ?se nekaj dodatnih funkcij za pravilno delovanje prikazovalnika. Z uporabo 10-bitnega integriranega A/D pre- tvornika in LCD prikazovalnika uporabnik v ?cetrtem primeru razvije preprost voltmeter. Peti primer opisuje uporabo notranjega ?casovnika oz. RTC (Real Time Clock). V tem primeru se uporabnik prvi?c sre?ca s prekinitvami. Nasle- dnja primera se ukvarjata z generiranjem pulzno-?sirinskega signala (ang. Pulse Width Modulation - PWM). Tako ?sesti primer uvaja v krmiljenje enosmernega krta?cnega motorja. Medtem ko s pomo?cjo enkoderskega inkrementalnega dajal- nika in povratne zanke v sedmem primeru spoznavamo zaprtozan?cno regulacijo, ki se izvaja na istem motorju. Sledi primer uporabe zunanjega vhodno-izhodnega raz?siritvenega modula povezanega z mikrokrmilnikom preko I2C serijskega vme- snika. V zadnjem primeru uporabnik spozna uporabo SPI (Serial Peripheral Interface) serijskega vmesnika na katerega je priklju?cen zunanji 12-bitni A/D pretvornik. Razvoj programske opreme je potekal s pomo?cjo razvojnega okolja WinIDEA, ki ga je razvilo podjetje iSYSTEMS. Prvih pet primerov je bilo realiziranih na razvojni plo?s?ci ITLPC2138. Za potrebe ostalih primerov, ki vklju?cujejo doda- tno periferijo, pa sta bili razviti posebni tiskani vezji. Na prvem vezju, ki se uporablja pri ?sestem in sedmem primeru, se nahajajo mo?cnostni mosti?ci za po- gon enosmernega motorja in dekoder enkoderskega inkrementalnega dajalnika za potrebe regulacijske zanke. Drugo tiskano vezje pa vklju?cuje 12-bitni A/D pre- tvornik z zaporednim pribli?zevanjem povezan s SPI vodilom, dva vhodno-izhodno raz?siritvena modula povezana z I2C vodilom ter vmesnik in gonilnik za CAN vo- dilo. Diplomsko delo sestavlja ?sest poglavji. Po uvodnem poglavju je najprej pred- 4 Uvod Ale?s Hribar stavljena centralno procesna enota ARM7TDMI-Sr. Tretje poglavje opisuje mi- krokrmilnik Philips LPC2138. V ?cetrtem poglavju je predstavljena razvojna plo?s?ca ITLPC2138 in razvojno programsko okolje WinIDEATM. Peto poglavje predstavlja raz?siritvena tiskana vezja. V zadnjem poglavju so predstavljeni u?cni primeri uporabe mikrokrmilnika LPC2138. 5 2. Centralno procesna enota ARM7TDMI-Sr 2.1 Uvod Srce Philipsove dru?zine LPC2000, v katero sodi tudi obravnavani mikrokrmilnik LPC2138, predstavlja ARM7TDMI-Sr centralno procesna enota. Ker je da- nes ve?cina programske kode napisane v vi?sjenivojskih programskih jezikih, npr. C/C++, detaljno poznavanje centralno procesne enote ni potrebno. Za pravilno izvajanje programske kode poskrbi prevajalnik. Ker pa je zanesljivo delovanje najve?ckrat na prvem mestu, je potrebno vsaj osnovno znanje o delovanju cen- tralno procesne enote. ARM7TDMI-Sr spada med tako imenovane RISC (Reduced Instruction Set Computer) procesorje, kar pomeni, da je njegov nabor ukazov majhen. To ima za posledico tudi manj?se?stevilo vrat oz. tranzistorjev potrebnih za njegovo izdelavo. Take vrste procesorji so zaradi tega lahko zelo majhni, za svoje delovanje rabijo malo energije in so zato idealni za vgradnjo v mikrokrmilnike in podobne sisteme. 2.2 Zgradba in delovanje 2.2.1 Cevovod Za svoje delovanje procesor ARM7TDMI-Sr uporablja ti. cevovod (ang. pipe- line). Ta je sestavljen iz treh stopenj. Prva stopnja izvaja trenutni ukaz, druga stopnja dekodira ukaz, ki se bo izvr?sil v naslednjem urinem ciklu, tretja pa bere ukaz, ki se bo v naslednjem ciklu dekodiral. Tak princip delovanja omogo?ca, da se ve?cina ukazov navidezno izvr?si v enem samem urinem ciklu. Vendar pa se moramo zavedati, da tak sistem deluje najbolje na lilnearni kodi. To je koda brez skokov oz. vejitev. Takoj, ko pride do vejitve je potrebno cevovod izprazniti in 6 Centralno procesna enota ARM7TDMI-Sr Ale?s Hribar ga na novo napolniti. Slika 2.1: Prikaz delovanja cevovoda 2.2.2 Registri Obdelava podatkov v centralno procesni enoti poteka na naslednji na?cin: najprej se podatek nalo?zi iz pomnilnika v enega od ?sestnajstih uporabniku dostopnih registrov, po obdelavi pa se podatek prenese nazaj na ?zeleno mesto v pomnilniku. Arhitektura, ki omogo?ca delovanje te vrste, je v angle?s?cini imenovana load-and- store. Kot ?ze omenjeno ima uporabnik na voljo ?sestnajst 32-bitnih registrov R0 do R15. Registri R0 do R12 so splo?snonamenski in nimajo dolo?cene funkcije. Preostali trije R13 do R15 pa imajo posebno vlogo. Register R13 je kazalec sklada (ang. Stack Pointer - SP). R14 se imenuje povezovalni register (Link Register - LR). Kadar v programu kli?cemo funkcijo se povratni naslov (ang. return adress) avtomati?cno shrani v LR. To omogo?ca hiter povratek iz klicane funkcije. Vendar to samo v primeru kadar je klicana funkcija brez vejitev. ?Ce se klicana funkcija veji je potrebno vrednost povezovalnega registra R14 shraniti na sklad. Register R15 predstavlja programski ?stevec (ang. Program Counter - PC). Poleg omenjenih ?sestnajstih obstaja ?se dodaten 32-biten register z imenom CPRS. Kratica v angle?s?cini pomeni Current Program Status Register. To bi lahko prevedli kot register trenutnega stanja programa, ki je neke vrste kontrolni register. Slika 2.2 prikazuje razporeditev bitov v CPRS registru. Zgornji ?stirje biti predstavljajo zastavice (ang. ags), ki jih postavlja CPE pri operacijah nad podatki. Te so: negativen rezultat (ang. negativ), rezultat ni?c (ang. zero), pre- nos (ang. carry) in preliv (ang. over ow). Spodnjih osem bitov lahko neposredno postavlja ali bri?se programska koda. Sedmi in ?sesti bit omogo?cata vklop in izklop uporabe dveh zunanjih virov prekinitve. Vse periferne enote integrirane v mi- krokrmilniku uporabljajo ti dve liniji. Potrebna je pazljivost pri dolo?canju stanja teh dveh bitov, saj pomeni logi?cna ?1? maskiranje prekinitev. Ostali biti v tem registru so rezervirani in jih ni dovoljeno spreminjati. 7 Centralno procesna enota ARM7TDMI-Sr Ale?s Hribar Slika 2.2: Razporeditev bitov v CPRS registru Peti bit se imenuje THUMB. ARM7TDMI-Sr CPE lahko izvaja 32 bitni ARM ali 16 bitni Thumbr nabor ukazov. Peti bit omogo?ca preklop med njima. Spodnjih pet bitov dolo?ca na?cin delovanja centralno procesne enote. Ta lahko deluje v enem izmed sedmih na?cinov. Programska koda se normalno izvaja v uporabni?skem na?cinu delovanja (ang. User mode), z dostopom do zgoraj opisnih registrov. Pri vstopu v poseben na?cin delovanja se vloga nekaterih registrov spremeni. Detaljnej?sa razlaga sledi v naslednjem podpoglavju. V vseh na?cinih delovanja, razen v uporabni?skem, se pojavi dodatni register z imenom SPRS. Ko preidemo iz uporabni?skega v enega izmed posebnih na?cinov delovanja se vsebina CPRS shrani v SPRS, po kon?canju pa se zopet vzpostavi pr- votno stanje CPRS registra. Slika 2.3 prikazuje nabor registrov v mo?znih na?cinih delovanja procesorja ARM7. 2.2.3 Posebni na?cini delovanja Ob posebnih pogojih, ko se pojavi izjema, CPE preide v posebni na?cin pri ?cemer se v programski ?stevec nalo?zi ustrezen vektor. Tabela 2.1 prikazuje vektorje, ki pripadajo izjemam. Dogajanje si je najlep?se ogledati na primeru. Recimo, da se v uporabni?skem na?cinu pojavi zahteva po prekinitvi (IRQ). Potek dogodkov, ki sledijo, se zgodi v naslednjem vrstnem redu. Najprej se naslov naslednjega ukaza (PC + 4), shrani v LR. Nato se vsebina CPRS registra shrani v SPRS register. Sledi polnjenje PC z ustreznim vektorjem, ki ima za primer IRQ vrednost 0x0000 0018. V istem trenutku CPE preide v na?cin IRQ. Registra R13 in R14 sta nadome?s?cena z IRQ R13 in R14 (glej sliko 2.3). Poleg tega se v CPRS registru postavi I bit in onemogo?ci nadaljno IRQ prekinitev. ?Ce ?zelimo izvajati vgnezdene prekinitve, je potrebno ta bit programsko pobrisati, hkrati pa je potrebno LR register shraniti 8 Centralno procesna enota ARM7TDMI-Sr Ale?s Hribar Slika 2.3: Registri v razli?cnih na?cinih delovanja Tabela 2.1: Izjeme in njihovi vektorji Izjema Na?cin Naslov Reset Nadzorni 0x0000 0000 Nedeflniran ukaz Nedeflniran 0x0000 0004 Programska prekinitev Nadzorni 0x0000 0008 Prefetch abort Abort 0x0000 000C Data abort Abort 0x0000 0010 IRQ prekinitev IRQ 0x0000 0018 FIQ pekinitev FIQ 0x0000 001C na sklad, da shranimo izvirni povratni naslov. Sledi skok na prekinitveno servisno rutino. V tem trenutku je potrebno na sklad shraniti vse registre od R0 do R12, kateribodouporabljenivservisnirutini. Zatemseizvedeprekinitvenarutina. Ob kon?canem servisiranju prekinitve se CPE povrne v uporabni?ski na?cin in nadaljuje z izvajanjem programske kode tam kjer je bilo to prekinjeno. Ker ARM nabor ne vklju?cuje posebnega ukaza za vrnitev iz prekinitve, kot je to obi?cajno pri drugih procesorjih, je to potrebno izvesti z uporabo navadnih ukazov. V razli?cnih na?cinih 9 Centralno procesna enota ARM7TDMI-Sr Ale?s Hribar delovanja imajo nekateri splo?snonamenski registri od R7 do R14 posebne funkcije. Na sliki 2.3 so registri s posebnimi funkcijami obarvani. Ve?c o posebnih na?cinih delovanja je mogo?ce prebrati v dokumentaciji procesorja1. 2.3 Nabor ukazov Kot je ?ze bilo omenjeno lahko ARM7TDMI-Sr procesor izvaja tako 32-bitni ARM kot 16-bitni Thumbr nabor ukazov. Uporaba kraj?sih Thumbr ukazov je smiselna, kjer je obseg kode kriti?cen. Poraba pomnilni?skega prostora se namre?c v tem primeru zmanj?sa za 30 %, pri?cemer je hitrost izvajanja v popre?cju zmanj?sana za 40 %. Za razvoj programske kode v programskem jeziku C/C++ nam ni potrebno podrobno poznati ukazov zbirnika. Kljub temu pa je razumevanje le teh klju?cnega pomena za vsakogar, ki ?zeli dose?ci optimalno delovanje CPE. ARM7TDMI-Sr je na?crtan tako, da lahko deluje kot ?big-endian? ali ?little- endian? procesor. Besedni zvezi v angle?s?cini pomenita dve razli?cni ureditvi bitov v registrih. Prva ureditev ima bit z najve?cjo te?zo postavljen na enaintrideseto me- sto, bit z najmanj?so te?zo pa na ni?cto mesto. Pri drugi ureditvi je ravno obratno, tako da bit z najmanj?so te?zo zaseda ni?cto mesto, bit z najve?cjo te?zo pa enaintri- deseto mesto. V celotni dru?zini mikrokrmilnikov LPC2000 je mo?zno uporabljati samo ?little-endian? ureditev bitov, zaradi ?cesar odpade skrb pri programiranju. Potrebna je le nastavitev prevajalnika, ki ga uporabljamo, za ?little-endian? ure- ditev. Slika 2.4 prikazuje obe ureditvi. 2.3.1 ARM nabor ukazov Zanimiva lastnost ARM nabora ukazov je ta, da je lahko vsak ukaz pogojno izvr?sen. Za starej?se mikrokrmilnike velja, da obstaja samo nekaj posebnih po- gojnih ukazov. V ARM ukaznem naboru se zgornji ?stirje biti ukaza primerjajo s pogojnimi zastavicami (N, Z, C, V) v CPRS registru. ?Ce se biti ne ujemajo, se namesto ukaza v cevovod prenese ukaz, ki ne naredi ni?cesar (ang. no operation - NOP). Tako na primer izvedemo operacijo nad podatkom in v odvisnosti od rezultata se, ali pa ne, izvr?si naslednji ukaz. Vsakemu ukazu zbirnika lahko do- damo eno od ?sestnajstih predpon, ki deflnirajo pogoj se bo naslednji ukaz izvr?sil. Tabela 2.2 prikazuje te predpone. ARM nabor ukazov lahko razdelimo v ?sest skupin: ? Vejitve (ang. Branching) 1ARM7TDMI-S Technical Reference Manual 10 Centralno procesna enota ARM7TDMI-Sr Ale?s Hribar (a) little-endian (b) big-endian Slika 2.4: Dve razli?cni ureditvi bitov v registru Tabela 2.2: Pogojne predpone ukazov Predpona Zastavice Pomen EQ Z postavljena na ?1? enakost NE Z postavljena na ?0? neenakost CS C postavljena na ?1? prenos CC C postavljena na ?0? ni prenosa MI N postavljena na ?1? rezultat negativen PL N postavljena na ?0? rezultat 0 ali pozitiven VS V postavljena na ?1? preliv VC V postavljena na ?0? ni preliva HI C postavljena na ?1? Z na ?0? ve?cje (za nepredzna?cena ?st.) LS C postavljena na ?0? Z na ?1? manj?se ali enako (za nepredzna?cena ?st.) GE N = V ve?cje ali enako LT N 6= V manj kot GT Z na ?0? in hkrati N = V ve?c kot LE Z na ?1? ali N 6= V manj kot ali enako AL nima vpliva ukaz se izvr?si vedno ? Obdelava podatkov (ang. Data Processing) ? Prenos podatkov (ang. Data Transfer) 11 Centralno procesna enota ARM7TDMI-Sr Ale?s Hribar ? Prenos bloka podatkov (ang. Block Transfer) ? Mno?zenje (ang. Multiply) ? Programska prekinitev (ang. Software Interrupt) 2.3.2 Thumbr nabor ukazov ?Ceprav je ARM7TDMI-Sr 32 bitni procesor, zna izvajati tudi 16 bitini nabor ukazov imenovan Thumbr. Pravzaprav je Thumbr nabor samo skr?cena oblika ARM ukaznega nabora. ARM omogo?ca shranjevanje programske kode v 16- bitnem formatu, pri izvajanju pa raz?siritev v 32-bitni ARM format. Slika 2.5 prikazuje dogajanje pri izvajanju skr?cene 16-bitne Thumbr kode. Slika 2.5: Raz?siritev THUMB v ARM ukaz Thumbr ukazni nabor je podoben ukaznim naborom tradicionalnih mikro- krmilnikov. V tem primeru Thumbr ukazi niso izvajani pogojno kot so to pri ARM naboru. Poleg tega Thumbr ukazi ne omogo?cajo dostopa do vseh registrov. Ukazi za obdelavo podatkov imajo dostop le do registrov R0 do R7 (ti registri se angle?sko imenjejo ?low registers?). Kadar pride do reseta ali katere druge izjeme, CPE avtomati?cno preide iz Thumbr v ARM ukazni nabor. 12 3. Mikrokrmilnik Philips LPC2138 3.1 Uvod Jedro mikrokrmilnika LPC2138 predstavlja 16/32 bitna ARM7TDMI-Sr RISC centralno procesna enota, 512 kB hitrega Flash pomnilika in 32 kB stati?cnega RAM pomnilnika. Kadar je velikost programske kode kriti?cna je poleg 32-bitnih ukazov na voljo tudi 16-bitni Thumbr nabor. V Thumbr na?cinu se velikost programske kode zgosti, hitrost izvajanja pa se zmanj?sa. Odlika mikrokrmilnika LPC2138 sta majhnost in nizka poraba energije. Po- leg 47 programabilnih vhodno-izhodnih linij mikrokrmilnik vsebuje tudi 10-bitni 8-kanalni analogno/digitalni pretvornik, 10-bitni digitalno/analogni pretvornik, pulzno ?sirinski modulator in druge periferne module. Na sliki 3.1 je prikazan blokovni diagram mikrokrmilnika z vsemi moduli. Centralno procesna enota ARM7TDMI-Sr v osnovi lahko deluje s taktom 80 MHz, vendar jo pri tem omejuje dostopni ?cas Flash pomnilnika, ki zna?sa 50 ns. To takt delovanja mikrokrmilnika upo?casni na 20 MHz. Te?zavo so pri Philipsu re?silizuporabopospe?sevalnikadostopadopomnilnika(ang. MemoryAccelerator Modul - MAM). Ta omogo?ca delovni takt mikrokrmilnika do 60 MHz. Zna?cilnosti mikrokrmilnika Philips LPC2138: ? 16/32-bitna ARM7TDMI-Sr centralno procesna enota, ? majhno LQFP64 ohi?sje dimenzij 12x12 mm, ? 512 kB Flash pomnilnika (dostopni ?cas 50 ns), ? 32 kB stati?cnega RAM pomnilnika, ? ISP/IAP mo?znost programiranja Flash pomnilnika, 13 Mikrokrmilnik Philips LPC2138 Ale?s Hribar Slika 3.1: Blokovni diagram mikrokrmilnika LPC2138 ? integrirani emulator in sledilnik (EmbeddedICEr and Embedded Trace) omogo?cata razhro?s?cevanje v realnem ?casu, ? dva 8-kanalna 10-bitna A/D pretvornika (?cas pretvorbe 2.44 us), ? 10-bitni D/A pretvornik, ? dva 32-bitna ?casovnika/?stevca, ? pulzno-?sirinski modulator (PWM) s ?sestimi izhodi, 14 Mikrokrmilnik Philips LPC2138 Ale?s Hribar ? ve?c serijskih vodil: { dva serijska UART vmesnika, { dva hitra I2C vmesnika (400 kbit/s), { SPITM in SSP vmesnika, ? vektoriziran prekinitveni krmilnik z nastavljivo prioriteto prekinitev, ? modul realnega ?casa z mo?znostjo zunanjega baterijskega napajanja in vho- dnim taktom 32 kHz, ? do skupno 47 splo?sno namenskih vhodno-izhodnih linij, ? 9 na nivo ali prehod ob?cutljivih vhodnih prekinitvenih linij, ? maksimalni takt delovanja CPE 60 MHz, dose?zen z integrirano fazno zakle- njeno zanko PLL, ? enojno napajanje v obmo?cju od 3.0 V do 3.6 V in do 5 V tolerantne vhodno izhodne linije. 3.2 Naslavljanje in notranji pomnilnik Naslovni prostor mikrokrmilnika je razdeljen na ve?c obmo?cij. Obmo?cja so pri- kazana na sliki 3.2. Naslovni prostor med 0xF000 0000 in 0xFFFF FFFF je namenjen vhodno-izhodnim modulom. Sistemske enote se nahajajo med naslo- voma 0xE000 0000 in 0xF000 0000. Za Flash pomnilnik je namenjenega 512 kB naslovnega prostora med 0x0000 0000 in 0x0008 0000. 3.2.1 Flash pomnilnik Flash pomnilnik v velikosti 512 kB je lahko uporabljen za trajno shranjeva- nje programske kode kot tudi podatkov. Programirati ga je mogo?ce na ve?c na?cinov: preko vgrajenega serijskega JTAG vodila, z uporabo ISP na?cina (In System Programming) in UART0 vodila ali z IAP na?cinom (In Application Programming). Flash pomnilnik zagotavlja najmanj 10,000 brisalno/pisalnih ci- klov z desetletnim hranjenjem podatkov. 3.2.2 Stati?cni RAM pomnilnik - SRAM Prav tako kot Flash pomnilnik je mogo?ce tudi SRAM uporabiti tako za shranjeva- nje tako podatkov kot tudi za shranjevanje programske kode. V mikrokrmilniku 15 Mikrokrmilnik Philips LPC2138 Ale?s Hribar Slika 3.2: Osnovna razdelitev naslovnega prostora mikrokrmilnika LPC2138 je integriranega 32 kB stati?cnega RAM pomnilnika, ki se nahaja med naslovoma 0x4000 0000 in 0x4000 8000. 3.3 Sistemske enote mikrokrmilnika LPC2138 3.3.1 Kvar?cni oscilator in fazno zaklenjena zanka - PLL Za svoje delovanje mikrokrmilnik potrebuje zunanji urin takt. Tega zagotovimo preko linije XTAL1 ali pa z vgrajenim oscilatorjem. Frekvenca zunanjega signala se lahko giblje v obmo?cju od 1 MHz do 50 MHz. Kadar je v uporabi v mikrokr- milnik vgrajeni oscilator je resonan?cna frekvenca kvar?cnega kristala omejena na obmo?cje med 1 MHz in 30 Mhz. Slika 3.3 prikazuje obe mo?znosti priklju?citve. Frekvenca signala, ki prihaja iz oscilatorja se imenuje FOSC. Frekvenco s katero te?ce ARM centralno procesna enota imenujemo CCLK. Za doseganje najvi?sjih hitrosti delovanja je v mikrokrmilnik integrirana fazno zaklenjena zanka (ang. Phase Locked Loop - PLL). Ta omogo?ca, da se frekvenca vhodnega signala pomno?zi za dolo?cen faktor. Vhodna frekvenca v PLL mora biti med 10 MHz in 25 MHz. Izhodna pa zna?sa od 10 MHz do 60 MHz. 16 Mikrokrmilnik Philips LPC2138 Ale?s Hribar Slika 3.3: Mo?znosti priklopa urinega takta 3.3.2 Modul za nadzor naslovnega prostora - MMC Z modulom MMC je mogo?ce preslikati prekinitvene naslove, ki se za?cnejo na na- slovu 0x0000 0000, na druge lokacije. Preslikava omogo?ca izvajanje prekinitvene programske kode na drugi lokaciji. Z MAP bitoma v MEMMAP registru se dolo?ci lokacijo prekinitvenih vektorjev. Tabela 3.1 prikazuje MEMMAP register. Tabela 3.1: Register MEMMAP bit kratica vrednost opis 1:0 MAP 00 Prekinitveni vektorji so relocirani v Boot blok. 01 Prekinitveni vektorji so relocirani v Flash pomnilnik. 10 Prekinitveni vektorji so relocirani v RAM pomnilnik. 11 Kombinacija je rezervirana in se je ne uporablja. 7:2 - Biti so rezervirani in se jih ne sme uporabljati. 17 Mikrokrmilnik Philips LPC2138 Ale?s Hribar 3.3.3 Delilnik urinega takta perifernih enot - VPB delilnik Delilnik dolo?ca razmerje med urinim taktom CCLK s katerim deluje ARM7 cen- tralno procesna enota in taktom PCLK s katerim delujejo periferne enote. Tabela 3.2 prikazuje VPBDIV kontrolni register v katerem bita 0 in 1 dolo?cata delilno razmerje. Tabela 3.2: Register VPBDIV bit kratica vrednost opis 1:0 VPBDIV 00 PCLK je enak ?cetrtini CCLK. 01 PCLK in CCLK sta enaka. 10 PCLK je enak polovici CCLK. 11 Kombinacija je rezervirana in se je ne uporablja. 7:2 - Biti so rezervirani in se jih ne sme uporabljati. 3.3.4 Modul za nadzor prekinitev - VIC VIC je angle?ska kratica za Vectored Interrupt Controller. To je modul, ki nadzo- ruje izvajanje prekinitev glede na njihovo prioriteto. Vsak od 32 virov prekinitev je lahko razvr?s?cen v eno od treh prekinitvenih skupin: FIQ, IRQ ali nevektorizi- rana IRQ prekinitev. Uporabnik ima mo?znost sam nastaviti prioriteto posame- znim prekinitvam. FIQ (ang. Fast Interrupt reQuest) je skupina prekinitev z najvi?sjo prioriteto. Za najhitrej?se izvajanje prekinitvene rutine je v to kategorijo priporo?ceno pripisati samo eno prekinitev. Vmesno prioriteto servisiranja prekinitve ima skupina IRQ. V to skupino je mo?zno razvrstiti do 16 prekinitev. Katerokoli od dvaintridesetih prekinitev lahko razvrstimo v eno od ?sestnajstih praznih mest. Prekinitev razvr?s?cena na mesto 0 ima najvi?sjo prioriteto, tista razvr?s?cena na mesto 15 pa najni?zjo. Nevektorizirana IRQ prekinitev ima najni?zjo prioriteto izvajanja. Podrobnej?si opis VIC krmilnika in ostalih sistemskih enot je mogo?ce najti v dokumentaciji proizvajalca1. 1LPC213x Users Manual, Rev. 01 - 24 June 2005 18 Mikrokrmilnik Philips LPC2138 Ale?s Hribar 3.4 Vhodno-izhodne enote V tem podpoglavju bodo podrobneje predstavljene vhodno-izhodne enote, upo- rabljene v primerih, ki so opisani v naslednjih poglavjih. 3.4.1 Splo?sno namenske vhodno-izhodne linije Mikrokrmilnik LPC2138 ima na razpolago dvoje 32-bitnih splo?sno namenskih vhodno-izhodnihvrat. NavratihPORT0jeskupnodostopnih30vhodnoizhodnih in ena izhodna linija. Na vratih PORT1 je dostopnih 16 vhodno-izhodnih linij. Za nadzor vhodno-izhodnih vrat sta namenjeni dve skupini ?stirih registrov: IOPIN, IOSET, IODIR, IOCLR. IOPIN register 0 in 1 (IOPIN0 - 0xE002 8000 in IOPIN1 - 0xE002 8010) hranita vrednosti prisotne na vhodno-izhodnihlinijah. Z njih lahko beremo tre- nutno stanje na linijah neglede na to ali gre za vhodno ali izhodno linijo. Vendar to velja samo za primer kadar so linije konflgurirane kot splo?sno namenske (ang. General Purpose Input Output - GPIO). ?Ce linije postavimo v katerikoli drug na?cin delovanja, vrednosti v teh registrih niso veljavne. IOSET register 0 in 1 (IOSET0 - 0xE002 8004 in IOSET1 - 0xE002 8014) Registra se uporabljata za dolo?canje stanja izhodnih linij. V primeru ko je linija konflgurirana kot GPIO izhod, bo pisanje logi?cne ?1? v register postavilo ustrezno linijo na visok nivo. Pisanje logi?cne ?0? nima nikakr?snega vpliva na dogajanje na izhodu. Kadar je linija konflgurirana kot GPIO vhod ali ima dodeljeno kak?sno drugo funkcijo, je pisanje v IOSET register brez pomena. IOCLR register 0 in 1 (IOCLR0 - 0xE002 800C in IOCLR1 - 0xE002 801C) Kadar so linije na vratih nastavljene kot GPIO izhodi, jih je mogo?ce v nizko logi?cno stanje postaviti s pisanjem v ta dva registra. Z vpisom logi?cne ?1? v IOCLR register resetiramo pripadajo?ci bit v IOSET registru in postavimo izhod v nizko stanje. ?Ce je linija konflgurirana kot GPIO vhod ali ima dodeljeno kak?sno drugo funkcijo je pisanje v IOCLR register brez pomena. IODIR register 0 in 1 (IODIR0 - 0xE002 8008 in IODIR1 - 0xE002 8018) Registra se uporabljata za dolo?citev smeri vhodno-izhodne linije, kadar je ta konflgurirana kot GPIO. Logi?cna ?0? pomeni, da je linija konflgurirana kot vhod; logi?cna ?1? pa nastavi linijo kot izhod. Napetostni nivo na liniji vrat dolo?camo s pisanjem v registra IOSET in IOCLR. Stanje na vratih je rezultat zadnjega vpisa. Naslednji primer prikazuje uporabo: 19 Mikrokrmilnik Philips LPC2138 Ale?s Hribar IODIR0 = 0x0000 0080 // Pin P0.7 nastavljen kot izhod IOCLR0 = 0x0000 0080 // Pin P0.7 postavljen v nizko stanje IOSET0 = 0x0000 0080 // Pin P0.7 postavljen v visoko stanje IOCLR0 = 0x0000 0080 // Pin P0.7 postavljen v nizko stanje Podobno lahko storimo z uporabo IOPIN registra: IODIR0 = 0x0000 0080 // Pin P0.7 nastavljen kot izhod IOPIN0 = 0x0000 0000 // Pin P0.7 postavljen v nizko stanje IOPIN0 = 0x0000 0080 // Pin P0.7 postavljen v visoko stanje IOPIN0 = 0x0000 0000 // Pin P0.7 postavljen v nizko stanje 3.4.2 A/D pretvornik V mikrokrmilnik LPC2138 sta integrirana dva Analogno/Digitalna - A/D pre- tvornika. Pretvornika delujeta na principu zaporednega pribli?zevanja (sukcesivna aproksimacija). Njuna najve?cja lo?cljivost je deset bitov. Hitrost vzor?cenja je 410 tiso?c vzorcev na sekundo pri maksimalni lo?cljivosti. Napetostno obmo?cje v katerem lahko merita je od 0 do 3 V. Vhod v vsakega od njiju predstavlja ena od osmih multipleksiranih linij. Kot skoraj vse periferne enote tudi A/D pretvornika delujeta s taktom PCLK. Ta mora biti ustrezno deljen na najbli?zjo vrednost okoli 4.5 MHz. Vrednost delilnega razmerja je shranjena v PCLKDIV, to pa izra?cunamo po (3.1). CLKDIV = PCLKADclk ˇ 1 = PCLK4:5MHz ˇ 1 (3.1) Delilno razmerje, kot tudi ostale kontrolne funkcije A/D pretvornika, se nahajajo v kontrolnem registru. Poleg mo?znosti izklopa ure imamo mo?znost tudi popolnega odklopa napajanja. To zmanj?sa porabo energije in ?sum, ki ga sicer povzro?ca A/D pretvornik. Po resetu ima A/D pretvornik odklopljeno napajanje in urin takt. Liniji za vklop urinega takta in napajanja nadzirata bita PDN in ADCR v kontrolnem registru. Za vklop A/D pretvornika ju je potrebno postaviti na logi?cno ?1?. Za razliko od ostalih perifernih modulov lahko A/D pretvornik zajema tudi kadar so njegove vhodne linije v PINSEL registru konflgurirane kot GPIO. Vendar pa je natan?cnost A/D pretvorbe ve?cja, kadar so linije konflgurirane kot linije A/D pretvornika. V kontrolnem registru je mogo?ce nastaviti tudi lo?cljivost A/D pretvornika. Ta je lahko med tremi in desetimi biti. ?Cas pretvorbe pri nastavljeni tri-bitni reso- luciji so ?stirje takti ADclk. Pri deset-bitni lo?cljivosti zajemanja se ?cas pretvorbe pove?ca na enajst taktov takta ADclk. 20 Mikrokrmilnik Philips LPC2138 Ale?s Hribar 3.4.3 Modul realnega ?casa - RTC Modul realnega ?casa je (ang. Real Time Clock - RTC) uporabljen pri aplika- cijah, kjer je potreba prikaza oz. uporabe trenutnega ?casa ali koledarja. Prikaz datuma je mogo?c do leta 2099. RTC modul lahko poganjata dva razli?cna izvora ure. Ta je lahko notranji takt PCLK ali poseben zunanji takt dodatnega osci- latorja. Prav tako je mo?zno modul posebaj napajati z zunanjo baterijo in tako omogo?citi njegovo delovanje tudi kadar je mikrokrmilnik v mirovanju. Zaradi tega je modul na?crtan tako, da za svoje delovanje porablja minimalno energijo. Slika 3.4 prikazuje blokovno shemo RTC modula. Slika 3.4: Blokovni diagram RTC modula Za upravljanje z modulom skrbi ve?cje ?stevilo registrov. Ti so razdeljeni v ?stiri skupine: ? me?sana skupina registrov, ? skupina registrov za nadzor ?casa, ? registri za upravljanje z alarmi in ? registri za nadzor delilnika vhodnega takta v modul. Kadar ?zelimo uporabljati RTC modul mora biti zunanja linija mikrokrmil- nika VBAT priklju?cena na linijo V3 ali na neodvisen zunanji vir napajanja. V nasprotnem primeru mora biti linija VBAT vezana na maso. 21 Mikrokrmilnik Philips LPC2138 Ale?s Hribar 3.4.4 Modul za pulzno-?sirinsko modulacijo Na prvi pogled je modul za pulzno-?sirinsko modulacijo (Pulse Width Modulation - PWM) bolj kompliciran kot splo?sno namenski ?stevci/?casovniki. Pravzaprav pa je to le dodatni?casovnik s posebnim nadzornim vezjem. Z njim lahko krmilimo ali 6 pulzno ?sirinsko moduliranih kanalov, ki jih pro?zimo na en prehod, ali 3 kanale, ki jih pro?zimo na dva prehoda. Slika 3.5 prikazuje blokovno shemo PWM modula. Upozoriti je potrebno, da blokovna shema ne prikazuje dejanske izvedbe, ampak le diagram za enostavnej?so razlago delovanja. Slika 3.5: Prikaz blokovnega diagrama PWM modula 22 Mikrokrmilnik Philips LPC2138 Ale?s Hribar Pri splo?sno namenskem ?casovniku/?stevcu novo vpisana izena?citvena vrednost postane aktivna takoj. Za pravilno delovanje PWM izhodov pa to ni sprejemljivo, zato ima PWM modul dodaten register (ang. Shadow Latch), ki na novo vpisano vrednost zadr?zi do za?cetka naslednjega PWM cikla in jo ?sele nato postavi kot aktivno. Tako lahko ?zelene vrednosti PWM izhodov v registre pi?semo kadarkoli, te pa bodo osve?zene na za?cetku cikla. Ta sistem olaj?sa delo zlasti, kadar upo- rabljamo ve?c PWM izhodov hkrati. Poleg tega avtomatsko izvajanje razbremeni centralno procesno enoto. Slika 3.6: Primer signalov generiranih s PWM modulom Delovanje PWM modula si je najbolje ogledati na sliki. ?Ce ?zelimo na izhodu generirati signale kot jih prikazuje slika 3.6 je potrebno v registre PWM modula vpisati naslednje vrednosti: ? MR0 = 100 ? MR1 = 41 (izhod PWM2) ? MR2 = 78 (izhod PWM2) ? MR3 = 53 (izhod PWM4) ? MR4 = 27 (izhod PWM4) ? MR5 = 65 (izhod PWM5) Vrednost registra MR0 deflnira reset ?stevca oz. cikel. To je hkrati tudi dol?zina PWM cikla. Izhoda PWM2 in PWM4 sta pro?zena na oba prehoda. Medtem ko je izhod PWM5 pro?zen samo na padajo?ci prehod. Tako naprimer za izhod PWM2 z vrednostjo v registru MR1 dolo?cimo nara?s?cajo?ci prehod z MR2 pa padajo?ci prehod. Cikel se ponovi vsakih 100 ?stevcevih impulzov. ?Ce ?zelimo lahko ob zaklju?cku cikla modul spro?zi prekinitev. Glavne zna?cilnosti PWM modula: 23 Mikrokrmilnik Philips LPC2138 Ale?s Hribar ? Sedem primerjalnih registrov (ang. Match Register - MR), ki omogo?cajo krmiljenje ali?sestih izhodov pro?zenih na en prehod, ali tri izhode pro?zene na dva prehoda ali pa kombinacijo obeh na?stetih mo?znosti. Poleg tega modul omogo?ca ?se: { neprekinjeno delovanje z mo?znostjo pro?zitve prekinitve ob izena?citvi, { ustavitev ?stevca z mo?znostjo pro?zitve prekinitve ob izena?citvi, { reset ?stevca z mo?znostjo pro?zitve prekinitve ob izena?citvi. ? Izhod vsakega od primerjalnih registrov ima mo?znost da se: { ob izena?citvi postavi v visoko stanje, { ob izena?citvi postavi v nizko stanje, { ob izena?citvi spremeni stanje nasprotno prej?snemu, { ob izena?citvi ne zgodi ni?c. ? Izhodi pro?zeni na en prehod so ob pri?cetku cikla na visokem nivoju, razen v primeru ko so stalno nizki. Izhodom pro?zenim na oba prehoda pa lahko prehoda postavljamo na poljubno mesto v ciklu. Na tak na?cin je mogo?ce generirati tako pozitivne kot negativne impulze. ? Perioda in ?sirina pulza je lahko katerakoli nastavljena vrednost ?stevca. ? Obnavljanje izena?citvenih registrov je sinhronizirano, kar prepre?ci da na izhodu dobimo ne?zelene impulze ali ?spice. ? ?Stevec lahko uporabljamo tudi kot splo?snonamenski, ?ce izklju?cimo PWM delovanje. ? 32-biten ?stevec/?casovnik z 32-bitnim delilnikom. 24 Mikrokrmilnik Philips LPC2138 Ale?s Hribar 3.4.5 UART serijski vmesnik Mikrokrmilnik LPC2138 ima integrirana dva vmesni?ska modula tipa UART. Ra- zen tega, da ima modul UART1 podporo za modem, sta modula identi?cna. Vgra- jena imata ?Baud rate? generator in dva 16 bajtov velika FIFO sklada, sprejemni in oddajni. Inicializacija UART modula poteka na naslednji na?cin: void __UART_init(void) { /* Inicializiramo pina P0.0 in P0.1 kot Tx in Rx */ PINSEL0=0x05; /* Vklopimo FIFO sklada in ju resetiramo */ U0FCR=0x07; /* Nastavimo DLAB in dol?zino besede na 8 bitov */ U0LCR=0x83; /* Baud rate nastavimo na 9600 */ U0DLL=0x14; U0DLM=0x00; /* Zbri?semo DLAB */ U0LCR=0x03; } Najprej v PINSLE0 registru konflguriramo pina P0.0 in P0.1 za delovanje v UART na?cinu. Nato vklopimo in resetiramo UART FIFO sklada. Sledi nastavlja- nje dol?zine besede na osem bitov. V istem registru nastavimo ?se uporabo enega stop bita in delovanje brez preverjanja paritete. Sedaj je potrebno nastaviti ?se hitrost prenosa. Tega najprej izra?cunamo po (3.2). UART0baudrate = PCLK16˘(16˘U0DLM +U0DLL) (3.2) Ker sistem te?ce na 12 MHz in imamo VPDIV nastavljen na delilno razmerje 4 zna?sa PCLK 3 MHz. ?Ce ?zelimo dobiti hitrost prenosa 9600 bit/s moramo v register U0DLL vpisati vrednost 0x14, v U0DLM pa 0x00. Vrednost, ki jo izra?cunamo po (3.2) je 9375. Najve?ckrat ni mo?zno natan?cno nastaviti vrednosti hitrosti prenosa. Vendar pa je najve?cja dovoljena napaka do pet procentov. Ko je modul inicializiran, lahko za?cnemo s prenosom podatkov. To omogo?cata naslednji funkciji: /* Funkcija, ki pi?se na serijska vrata. */ unsigned long UART_send(unsigned long ch) { if (ch == ?\n?) 25 Mikrokrmilnik Philips LPC2138 Ale?s Hribar { while (!(U0LSR & 0x20)); U0THR = ch; } while (!(U0LSR & 0x20)); return (U0THR= ch); } /* Funkcija, ki bere iz serijskih vrat. */ UART_read(void) { while (!(U0LSR & 0x01)); return (U0RBR); } S prvo lahko pi?semo z drugo pa beremo s serijskih vrat. Obe funkciji bereta povezovalni statusni register (ang. LSR -LinkStatusRegister) in tako preverjata napake na vodilu, kot tudi oba FIFO sklada. UART modul ima en prekinitveni kanal in tri mo?zne izvore. Prekinitev lahko spro?zi sprememba v LSR registru. Tako lahko v primeru napake na serijskem vodilu v prekinitveni rutini preberemo LSR register in ustrezno ukrepamo. Drugi dve mo?zni prekinitvi lahko spro?zita spremembi v FIFO skladih. 26 Mikrokrmilnik Philips LPC2138 Ale?s Hribar 3.4.6 I2C serijski vmesnik Standard za serijsko vodilo I2C je nastal prav v podjetju Philips, zato ni presene- tljivo, da je dru?zina mikrokrmilnikov LPC2000 opremljena z dvema I2C serijskima moduloma. Modula lahko delujeta v nadzornem (ang. master) ali podrejenem (ang. slave) na?cinu. Maksimalna hitrost prenosa podatkov je 400 kbit/s. Slika 3.7 prikazuje tipi?cno postavitev blokov povezanih z I2C vodilom. Slika 3.7: Tipi?cna I2C konflguracija: ena nadrejena ?master? in ve?c podrejenih ?slave? naprav priklopljenih na liniji I2C vodila. Za sinhroni prenos podatkov sta potrebni dve liniji. SDA je podatkovna linija, SLC linija prena?sa urin takt. Omeniti velja, da sta obe liniji tipa odprt kolektor (ang. open collector), zato ju je potrebno z ustreznimi upori vezati na napajnje VCC. Vrednosti uporov je mogo?ce izra?cunati po formuli (3.3), kjer je N ?stevilo priklopljenih naprav na I2C vodilo. Rp ? 50 k?N (3.3) Za nadzor I2C modula v mikrokrmilniku LPC2138 skrbi sedem registrov. Bite v kontrolnem registru postavljamo s pisanjem logi?cnih enic v I2CONSET register, bri?semo pa jih s pisanjem v I2CONCLR register. Za nastavitev hitrosti prenosa sta na voljo dva registra. To sta I2SCLH in I2SCLL. V statusnem registru se nahajaj stanje, ki signalizira dogajanje na vodilu. Podatek, ki ga ?zelimo poslati, oziroma smo ga prejeli se nahaja v podatkovnem registru I2CDAT. Kadar modul konflguriramo za delovanje v podrejenem na?cinu, v register I2ADR vpi?semo?zeleni naslov na?sega mikrokrmilnika, ki ga uporablja nadrejena naprava za naslavljanje. Za inicializacijo I2C modula poskrbi nekaj naslednjih vrstic programske kode: 27 Mikrokrmilnik Philips LPC2138 Ale?s Hribar void __I2C_init(void) { /* Inicializiramo pina P0.2 in P0.3 kot SCL in SDA */ PINSEL0 = 0x50; /* Pobri?semo vse zastavice */ I2C0CONCLR = 0x6c; /* Dolo?cimo hitrost prenosa */ I2C0SCLH = 0x1f; I2C0SCLL = 0x1f; /* Inicializiramo VIC za I2C */ /* Izberemo IRQ na?cin prekinitve */ VICIntSelect = 0x0; /* Dolo?cimo najvi?sjo prioriteto */ VICVectCntl0 = 0x29; /* Dolo?cimo naslov izvajanja prekinitvene rutine */ VICVectAddr0 = (unsigned long) I2C_ISR; /* Vklopimo I2C prekinitev */ VICIntEnable = 0x200; } Na za?cetku v PINSEL0 dolo?cimo pinoma P0.2 in P0.3 funkciji SCL in SDA. Sledi brisanje zastavic v kontrolnem registru. Za pravilno delovanje vodila v naslednjem koraku nastavimo hitrost prenosa podatkov. ?Zeleno hitrost najprej izra?cunamo po (3.4): I2Cbitfrequency = fPCLKI2CSCLH +I2CSCLL (3.4) Na vsak dogodek, ki se zgodi na vodilu, se mora I2C modul ustrezno odzvati. Do- gajanje na vodilu je mikrokrmilniku signalizirano s prekinitvami. Zato je najprej potrebno pravilno konflgurirati modul za nadzor prekinitev - VIC (glej poglavje 3.3.4). Za servisiranje I2C vodila izberemo IRQ na?cin prekinitve z najvi?sjo prio- riteto. Nato dolo?cimo naslov izvajanja prekinitvene rutine in omogo?cimo preki- nitev. Podatke lahko beremo in po?siljamo samo kadar je modul konflguriran kot nadrejeni ?master?. Ko je I2C modul v podrejenem ?slave? na?cinu lahko podatke samo beremo in odgovarjamo na zahteve glavnega na vodilu. Prenos se dogaja na naslednji na?cin. Nadrejeni na vodilu ?master? mora naj- prej signalizirati za?cetek prenosa. To se zgodi tako, da linija SCL ostane na visokem nivoju linija SDA pa gre na nizek nivo. Nato se po podatkovni liniji po?slje naslov podrejene naprave s katero ?zeli komunicirati nadrejeni. ?Ce je po- drejena naprava sprejela naslov in bit, ki dolo?ca zahtevo po branju ali pisanju, 28 Mikrokrmilnik Philips LPC2138 Ale?s Hribar po?slje potrditev. Sedaj se lahko za?cne prenos podatkov v paketih dol?zine enega bajta. Vsakemu od paketov sledi potrditev (ang. acknowledgement). Prenos se ne zaklju?ci dokler ga s posebnim (Stop) stanjem ne prekine nadzornik na vodilu. Slika 3.8 prikazuje signale na vodilu. Slika 3.8: Dogajanje na I2C vodilu med prenosom podatkov Funkcija , ki omogo?ca prenos je naslednja: void I2C_Transfer(unsigned Addr,unsigned Data) { I2CAddress = Addr; I2CData = Data; I2CONCLR = 0x000000FF; // Izbri?semo vse I2C nastavitve I2CONSET = 0x00000040; // Vklopimo I2C prenos I2CONSET = 0x00000020; // Po?sljemo start signal } V globalni spremenljivki I2CAddress in I2CData shranimo naslov in podatke, ki jih bo med prenosom potrebovala prekinitvena servisna rutina. Nato pobri?semo vse nastavitve, vklopimo modul in po?sljemo signal za za?cetek prenosa. Nadaljnje dogajanje se preseli v prekinitveno servisno rutino, ki v okrnjeni verziji izgleda takole: void I2C_ISR(void) { switch (I2CSTAT) // Preberemo rezultat kode in ustrezno ukrepamo { case ( 0x08): // Start bit je bil poslan I2CONCLR = 0x20; // Resetiramo start bit I2DAT = I2CAddress; // Po?sljemo naslov in W bit break; 29 Mikrokrmilnik Philips LPC2138 Ale?s Hribar case (0x18): // Po?sljemo naslov in W bit, potrditev I2DAT = I2Cdata; // Vpi?semo podatke v TX register break; case (0x20): // Po?sljemo naslov in W bit, brez potrditev I2DAT = I2CAddress; // Ponovno po?sljemo naslov break; case (0x28): // Podatek je bil poslan, potrditev I2CONSET = 0x10; // Po?sljemo stop signal break; default: break; } I2CONCLR = 0x08; // Zbri?semo I2C prekinitveno zastavico VICVectAddr = 0x00000000; // Osve?zimo VIC } Programska koda v servisni rutini mora glede na vrednost v statusnem registru ustrezno nastavljati kontrolni register in vpisovati vrednosti v podatkovni register I2C modula. Zgornji primer obravnava samo najpomembnej?sa stanja na vodilu. Ta so opisana v tabeli 3.3 in veljajo kadar je mikrokrmilnik konflguriran kot nadzornik. Podrobnej?si opis delovanja I2C vodila je mogo?ce najti v [2]. Tabela 3.3: Pomen vrednosti v I2C statusnem registru I2CSTAT Stanje na vodilu Naslednja operacija modula 0x08 Poslano je bilo START stanje. Po?siljanje naslova in W bita. 0x18 Poslan je bil naslov in W bit in podrejena Po?siljanje podatkov. naprava je potrdila sprejem. 0x20 Poslan je bil naslov in W bit in podrejena Ponovno po?siljanje podatkov. naprava ni potrdila sprejema. 0x28 Poslan je bil podatkovni bajt in podrejena Po?siljanje podatkov. naprava je potrdila sprejem. 30 Mikrokrmilnik Philips LPC2138 Ale?s Hribar 3.4.7 SPI serijski vmesnik Podobno kot I2C vmesnik je tudi SPI modul namenjen komunikaciji po SPI serij- skem vodilu. SPI vodilo je namenjeno predvsem prenosu podatkov med mikrokr- milnikom in raznimi spominskimi moduli, LCD prikazovalniki, A/D pretvorniki, itd.. Zunanjo povezavo z ostalimi enotami predstavljajo ?stiri linije. Te so SCK, SS, MISO in MOSI. Po liniji SCK se prena?sa urin takt. Z linijo SS (ang. Slave Select) izberemo podrejeno napravo na SPI vodilu. MISO (ang. Master Input Slave Output) in MOSI (ang. Master Output Slave Input) liniji skrbita za pre- nos podatkov. SPI vodilo je v prvi vrsti namenjeno hitremu prenosu podatkov in v nasprotju z I2C vodilom nima vgrajene naslovne sheme. Zunanja naprava je izbrana s posebnim pinom, v angle?s?cini imenovanim ?slave select?. Podatkovni liniji sta priklju?ceni na zunanjo napravo in njuna orientacija je odvisna od na?cina v katerem naprava deluje, v nadrejenem ali v podrejenem. Maksimalna hitrost prenosa podatkov je 400 kbit/s. Uporabnik ima dostop do petih SPI registrov. V ?casovnem registru nastavimo vrednost delilnega razmerja PCLK in takta ure na SPI vodilu. V kontrolnem re- gistru nastavimo ?zeleni na?cin delovanja vodila. Ker je prenos po serijskem SPI vmesniku relativno enostaven, obstaja mnogo naprav, ki jih lahko nanj priklo- pimo. Zato je potrebno tako podatkovno, kot tudi SCK linijo pravilno nastaviti. Najprej je potrebno poskrbeti za pravilno polariteto in fazo urinih impulzev na vodilu. Polariteta je lahko aktivna v visokem ali nizkem stanju. Na sliki 3.9 je nazorno prikazana vrednost konflguracijskih bitov in njihov vpliv. Slika 3.9: Nastavitev polaritete in faze urinih impulzov na SPI vodilu Faza urinih impulzov je lahko naravnana na rob ali sredino podatkovnih im- pulzov. Pred prenosom je potrebno nastaviti?se orientacijo podatkov, ki prihajajo po vodilu. Izberemo lahko prenos, ki se za?cne z najpomembnej?sim in kon?ca z naj- manj pomembnim, ali pa prenos z ravno obratno orientacijo. Vse zgoraj opisane nastavitve so odvisne od naprave s katero ?zelimo komunicirati, kar si je potrebno ogledati v dokumentaciji same naprave. 31 4. Razvojna plo?s?ca ITLPC2138 in programsko razvojno okolje WinIDEATM 4.1 Predstavitev ITLPC2138 je mikrokrmilni?ski razvojni sistem zasnovan na osnovi Philipsovega mikrokrmilnika LPC2138. Namenjen je razvoju, testiranju in razhro?s?cevanju pro- gramske opreme. Poleg integriranega USB razhro?s?cevalnika iSYSTEM sta na vo- ljo tudi JTAG in ETM trace konektorja kot alternativna na?cina razhro?s?cevanja. Razvojna plo?s?ca je napajanja preko USB povezave, tako da ni potreb po zunanjem napajanju. Slika 4.1: Razvojna plo?s?ca ITPLC2138 Za razvoj programske opreme, nalaganje in razhro?s?cevanje skrbi programsko okolje winIDEATM, ki te?ce na operacijskem sistemu Windows. 32 Razvojna plo?s?ca ITLPC2138 in okolje WinIDEATM Ale?s Hribar 4.2 Opis ITLPC2138 Za preizku?sanje in razhro?s?cevanje programske kode se na plo?s?ci nahaja nekaj ele- mentov, na katere so priklju?cene nekatere izmed vhodno izhodnih enot. Razvojna plo?s?ca vsebuje naslednje elemente: ? mikrokrmilnik LPC2138, ? analogni vhod za uporabo notranjega A/D pretvornika, ? 4 tipke priklju?cene na vhodno izhodne linije (od P0.12 do P0.15), ? reset tipka, ? baterijsko napajanje za notranjo uro (RTC), ? analogni izhod priklju?cen na linijo D/A pretvornika, ? dva RS232 komunikacijska vmesnika, ? RS232 DB9 konektor, ? mesto pripravljeno za priklop prikazovalnika na teko?ce kristale, ? ?stiri svetle?ce diode priklopljene na vhodno izhodne linije (od P0.8 do P0.11), ? konektorji za dostop do vseh vhodno-izhodnih linij mikrokrmilnika, ? ETM trace konektor, ? JTAG razhro?s?cevalni konektor, ? USB konektor, ? stabilizirani napetostni napajalnik z vhodom preko USB; izhodi: 5 V, 3.3 V in 2.5 V, ? iONE - USB/JTAG vmesnik, ? mosti?ci za nastavitve delovanja mikrokrmilnika. Slika 4.2 prikazuje blokovno shemo razvojne plo?s?ce. Postavitev konektorjev in drugih elementov na tiskanem vezju pa je prikazana na sliki 4.3. 33 Razvojna plo?s?ca ITLPC2138 in okolje WinIDEATM Ale?s Hribar Slika 4.2: Blokovni diagram ITPLC2138 Seznam konektorjev in mosti?cev na razvojni plo?s?ci, kot jih prikazuje slika 4.3: ? J1 do J6: Raz?siritveni konektorji: Konektorji za dostop do vseh vhodno-izhodnih (vrata PORT0 in PORT1) linij mikrokrmilnika. ? J7: ETM Trace vrata: Z J7 nastavimo linije P1.16 do P1.25, da po resetu delujejo kot ETM Trace vrata. Privzeta pozicija je izklopljena. ? J8: JTAG razhro?s?cevalna vrata: J8 vklaplja linije P1.26 do P1.31, da po resetu delujejo kot JTAG vrata. Privzeta pozicija je vklopljena. ? J9: Vklop razhro?s?cevalnega na?cina: Z J9 izbiramo med uporabo iSYSTEM-ovega USB razhro?s?cevalnika in zunanjim razhro?s?cevalnim orod- jem. Privzeta postavitev je na 1-2. 34 Razvojna plo?s?ca ITLPC2138 in okolje WinIDEATM Ale?s Hribar Slika 4.3: Pogled na tiskano vezje ? J10: Izbira napajanja notranje ure (RTC): Z J10 priklju?cimo 3.3 V na mikrokrmilni?sko Vbat linijo. ? J11: Napajanje notranje ure (RTC): Priklju?cek za zunanje baterijsko napajanje notranje ure (RTC). ?Ce je priklopljena zunanja baterija moramo odklopiti J10. ? J12: Rezerviran za proizvajalca ? J13: Analogni izhod: J13 je analogni izhod iz operacijskega oja?cevalnika, katerega vhod je priklju?cen na izhod internega D/A pretvornika. ? J14: Serijska vrata: Tripolni konektor serijskih vrat UART0. 35 Razvojna plo?s?ca ITLPC2138 in okolje WinIDEATM Ale?s Hribar ? J15: Vklop LED diod: Z J15 vklopimo gonilnik, ki preko linij P0.8 do P0.11 krmili svetle?ce diode. ? J16: Vklop tipk: J16 vklopi gonilnik ?stirih tipk, ki je priklju?cen na P0.12 do P0.15. S pritiskom tipke generiramo nizek nivo na vhodno-izhodni liniji. ? J17: LCD E signal: J17 pove?ze P0.21 z LCD E linijo. ? J18: LCD R/W signal: J18 pove?ze P0.22 z LCD R/W linijo. ? J19: Vklop analognega izhoda: J19 pove?ze izhod D/A pretvornika (na liniji P0.25) in vhod operacijskega oja?cevalnika. ? J20: Vklop analognega vhoda: J20 ve?ze trierm potenciometer na ana- logni vhod AD0.0 (linija P0.27). ? J21: 16 pinski LCD konektor ? J22: Vklop osvetlitve LCD-ja: S postavitvijo J22 vklopimo osvetlitev prikazovalnika na teko?ce kristale (LCD). ? J25: Na?cin zagona: (name?s?cen na spodnji strani tiskanega vezja): Z J25 dolo?cimo na?cin zagona mikrokrmilnika. Kadar ve?zemo P0.14 visoko postavimo mikrokrmilnik v Uporabni?ski na?cin (User mode), kadar pa nizko pa v ?BOOT-loader? na?cinu. Privzeta je prva postavitev J25. Kadar ?zelimo preklop v ?BOOT-loader? na?cin moramo hkrati odstraniti J16. 4.3 Programsko razvojno okolje WinIDEATM WinIDEATM je kratica za Windows Integrated Development Environment Ad- vance. Okolje je uporabno skozi celotni razvojni cikel programske kode. Tako je v enem programskem paketu zdru?zeno ve?c orodij, ki pomagajo pri pisanju, prevajanju, nalaganju in rezhro?s?cevanju programov. Ta orodja so: ? Upravitelj projektov (ang. Project Manager) ? Urejevalnik C datotek (ang. Multi-File C Source Editor) ? Prevajalni?ski upravitelj (ang. Build Manager) ? Visoko nivojski razhro?s?cevalnik (ang. High Level Source Debugger) ? Ob?sirna pomo?c (ang. Extensive Help) 36 Razvojna plo?s?ca ITLPC2138 in okolje WinIDEATM Ale?s Hribar Slika 4.4: Uporabni?sko delovno okno razvojnega okloja WinIDEATM Slika 4.4 prikazuje uporabni?sko okno programskega okolja WinIDEATM. Osrednje okno predstavlja urejevalnik datotek. V njem imamo lahko hkrati odprtih po- ljubno ?stevilo datotek. Za prevajanje projektov nam okolje ponuja ?siroko izbiro razli?cnih proizvajalcev prevajalnikov. Primeri, ki jih opisuje diplomska naloga, so bili prevedeni z GNU prevajalnikom. Ta se po kakovosti uvr?s?ca sicer v ni?zji razred ARM7 prevajalnikov, vendar pa je brezpla?cen. Pri razhro?s?cevanju nam je v veliko pomo?c razhro?s?cevalnik, s katerim te- stno izvajamo C/C++ programsko kodo (ang. High Level Source Debugger). Omogo?ceno nam je tudi postavljanje ustavitvenih to?ck (ang. Break Point). V desnem oknu lahko spremljamo vrednosti vseh registrov mikrokrmilnika. Kadar ?zelimo spremljati vrednost katere od funkcij ali spremenljivko, jo enostavno po- stavimo v ogledno okno (ang. Watch window), ki se na sliki 4.4 nahaja levo spodaj. 37 5. Raz?siritvena tiskana vezja 5.1 Uvod Za celovito predstavitev zmogljivosti mikrokrmilnika LPC2138 so bila razvita do- datna raz?siritvena tiskana vezja, ki vsebujejo dodatne periferne enote. Razvoj je potekal s pomo?cjo programskega paketa P-CAD 2004. Izdelana so bila tri tiskana vezja. Prvo tiskano vezje slu?zi kot vmesnik za vodenje enosmernega elektri?cnega motorja. S pomo?cjo drugega vezja je prikazano delovanje razli?cnih serijskih vodil. Na tretjem vezju se nahaja matri?cna tipkovnivnica velikosti 4x4 tipke. 5.2 Tiskano vezje za vodenje enosmernega elektri?cnega motorja Vezje za vodenje enosmernega elektri?cnega motroja je namenjeno predstavitvi krmiljenja in regulacije enosmernega motorja s pomo?cjo pulzno?sirinskega modula vgrajenega v mikrokrmilnik LPC2138. Vezje sestavljajo naslednji elementi: ? L298N: mo?cnostni H mosti?c za pogon motorja, ? HCTL2022: dekoder/?stevec namenjen ?stetju impulzov enkoderskega dajal- nika, ki se nahaja na motorju, ? LM339 in 74LS14: sta namenjena pretvorbi sinusnega signala iz enkoder- skega dajalnika v vlak pravokotnih impulzov, ? 74LS244: linijski gonilnik za napetostno oja?canje signalov iz mikrokrmilnika LPC2138 (iz 3.3 V na 5 V), ? L7805: pet voltni napetostni stabilizator. 38 Raz?siritvena tiskana vezja Ale?s Hribar Slika 5.1: Blokovni diagram tiskanega vezja za vodenje enosmernega elektri?cnega motroja Slika 5.1 prikazuje blokovno shemo tiskanega vezja. Na konektor CON1 se pri- klju?cita motor in inkrementalni dajalnik impulzov, ki se nahaja na motorju. Tri sinusne signala (signal A, signal B in indeksni signal) se s pomo?cjo pri- lagodilnega vezja pretvori v pravokotne signale. Pravokotne impulze ?steje 32- bitni ?stevec/dekodirnik HCTL-2022. Branje ?stevca/dekodirnika poteka preko 8- bitnega podatkovnega vodila. ?Stevec/dekodirnik se konflgurira preko kontrolnega vodila. Obe vodili sta povezani s konektorjem CON3, preko katerega se tiskano vezje za vodenje enosmernega elektri?cnega motorja s plo?s?catim kablom pove?ze na razvojno plo?s?co ITLPC2138. Delovanje integriranega vezja HCTL-2022 je opi- sano v dokumentaciji1. Na konektor CON3 sta vezani tudi signalni liniji (PWM in smer), ki krmilita mo?cnostni H mosti?c L298N. Mo?cnostni liniji iz H mosti?ca, ki poganjata enosmerni motor, sta vezani na konektor CON1. Elektri?cna shema in shema tiskanega vezja za vodenje enosmernega motorja sta prilo?zeni v prilogi. 1HCTL-2022 Quadrature Decoder/Counter Interface ICs Data Sheet 39 Raz?siritvena tiskana vezja Ale?s Hribar 5.3 Tiskano vezje za demonstracijo uporabe I2C, SPI in CAN serijskih vodil Tiskano vezje je bilo razvito z namenom demonstracije delovanja I2C, SPI in CAN serijskih vodil. Plo?s?ca tiskanega vezja se pove?ze s plo?s?catim kablom na razvojno plo?s?co ITLPC2138 preko konektorjev CON1 in CON2. Na sliki 5.2 je prikazana blokovna shema raz?siritvenega tiskanega vezja za demonstracijo uporabe serijskih vodil. Na vezju so naslednji elementi: ? dva vhodno-izhodno raz?siritvena modula Philips PCF8574T priklju?cena na I2C vodilo, ki omogo?cata uporabo dodatnih vhodno-izhodnih linij, ? 12-bitni A/D pretvornik Analog Devices AD7928 priklju?cen na SPI vodilo, ? CAN krmilnik Philips SJA1000T, ? CAN gonilnik PCA82C251, ? LM4040 2.5 V napetostna referenca za A/D pretvornik, ? dva L7805 in LP317 tvorijo stabiliziran napetostni napajalnik (z izhodi 2x 5 V in 3.3 V), ? potenciometer vezan na vhod A/D pretvornika. Za predstavitev delovanja I2C vodila se na tiskanem vezju nahajata dva vhodno- izhodna raz?siritvena modula PCF8574T. Naslov se vsakemu raz?siritvenemu mo- dulu nastavi s pomo
Ta prispevek je na portalu publikacije.net objavil/a Aleš Hribar dne 2006-09-16.
Aleš Hribar, fak. za elektrotehniko
Ocenite prispevek:
5 out of 54 out of 53 out of 52 out of 51 out of 5
# of Ratings = 22 | Rating = 2.6/5
publikacije.net - portal svobodnega znanja