Projektovanje ugrađenih sistema pomoću ARM Cortex-M razvojne ploče od 0 do 1
Ova knjiga je studija slučaja u ugrađenom sistemu, uključujući razmatranje hardvera, inicijalizaciju procesora, razvoj drajvera niskog nivoa i dizajn interfejsa aplikacije za proizvod. Iako ovo opisujemo kroz specifičnu primenu Cortex-M3 razvojne ploče, naša misija je da pomognemo čitaocu da izgradi osnovne veštine koje su izuzetno važne da bi postao odličan u razvoju proizvoda. Kompletna razvojna ploča je dostupna da biste povećali uticaj ove knjige i da biste radnu platformu koju kreirate, zatim, koristili kao osnovu za dalji razvoj i učenje.
Detaljan opis
Hobisti mogu da kombinuju odlične funkcionalne sisteme pomoću platformi, kao što su Arduino ili Raspberry Pi, ali je neophodno da inženjeri i dizajneri proizvoda imaju osnovno znanje o projektovanju ugrađenih sistema. Postoji vrlo malo dostupnih izvora u kojima se opisuju razmišljanje, strategije i procesi koji će vam dati uvid u dizajn hardvera i razvoj drajvera niskog nivoa i uspešnu izradu potpuno ugrađenog sistema. Mnogi inženjeri na kraju nauče na teži način ili nikada stvarno ne nauče.
ARM procesori su u suštini sveprisutni u ugrađenim sistemima. Projektanti koji izrađuju nove uređaje moraju da znaju osnove ovih sistema i da budu u stanju da podele velike komplikovane ideje na delove kojima se može upravljati. Uspešan razvoj proizvoda znači da treba da pročitate obimnu dokumentaciju da biste mogli da razumete kako da postignete ono što vam je potrebno, a zatim da sastavite sve da biste kreirali robusni sistem koji će pouzdano funkcionisati i biti održiv u godinama koje dolaze.
Ova knjiga je studija slučaja u ugrađenom sistemu, uključujući razmatranje hardvera, inicijalizaciju procesora, razvoj drajvera niskog nivoa i dizajn interfejsa aplikacije za proizvod. Iako ovo opisujemo kroz specifičnu primenu Cortex-M3 razvojne ploče, naša misija je da pomognemo čitaocu da izgradi osnovne veštine koje su izuzetno važne da bi postao odličan u razvoju proizvoda. Kompletna razvojna ploča je dostupna da biste povećali uticaj ove knjige i da biste radnu platformu koju kreirate, zatim, koristili kao osnovu za dalji razvoj i učenje.
Program Embedded in Embedded se bavi podučavanjem osnovnih veština koje inženjerima pomažu da izgrade čvrste temelje znanja koji se mogu primeniti u svakom okruženju za projektovanje. Sa skoro 20 godina iskustva u industriji autor govori o razvoju veština kritičkog mišljenja koje zahtevaju kompanije i koje su od suštinskog značaja za uspešno projektovanje. U ovoj knjizi se podjednako razmatraju odlični procesi projektovanja, kritičko razmišljanje, pa čak i društveni aspekti koji su važni za programere, koliko i tehnički dizajn hardvera i firmvera.
O autoru
Jason Long je dizajnirao i koristio proizvode, od GPS uređaja za praćenje do vojnih komunikacionih sistema. On je 1999. godine pokrenuo univerzitetski program Embedded in Embedded (EiE), a 2010. godine osniva svoju kompaniju „Engenuics Technologies“ specijalizovanu za inženjersko obrazovanje. Jason je viši član organizacije IEEE.
Sadržaj
Predgovor
POGLAVLjE 1 POČETAK
1.1 Mikro šta?
1.2 32-bitni procesor
1.3 Programi mikrokontrolera
1.4 Radnitakt
1.5 Funkcije
1.5.1 Brojčani sistemi
1.5.2 Omov zakon
1.6 Prekidači
1.7 Svetleće diode (LED-ovi)
1.8 Tranzistori
1.9 Napajanja
1.9.1 Linearni regulatori
1.9.2 Prekidačka napajanja
1.10 Hardver razvojne ploče
1.11 Blok dijagrama
1.12 Ulaz napajanja
1.13 Glavni procesor, JTAG, radni takt i veze
1.14 ANT 2.4 GHz primopredajnik
1.15 Korisnički IO: LCD, LED-ovi, dugmad, zujalica
1.16 Link ploča
1.17 Rezime
POGLAVUE 2 RAZVOJNO OKRUŽENJE I UPRAVLJANJE VERZIJAMA.
2.1 Integrisano razvojno okruženje IAR
2.2 Instalacija lAR-a
2.3 Podešavanje novog projekta
2.4 Datoteke u novom projektu
2.5 IAR simulator i debager
2.6 Druge programerske alatke
2.6.1 Tera Term
2.6.2 GitHub Desktop
2.6.3 ANTware II
2.6.4 nRFgo Studio
2.6.5 Windows postavke
2.7 Upravljanje verzijama pomoću Git-a
POGLAVLJE 3 ARM CORTEX-M3 ASEMBLERSKI JEZIK, 91
3.1 Registri jezgra, 91
3.2 Instrukcije, 93
3.3 Sintaksa asemblerskog jezika, 94
3.4 Instrukcije za učitavanje i skladištenje, 101
3.5 Hello World na asemblerskom jeziku, 103
POGLAVLJE 4 UGRAĐENI C, 115
4.1 Dokumentacija, 115
4.2 Doxygen, 117
4.2.1 Dokumentovanje "pravih informađja", 117
4.2.2 Kreiranje konfiguracione datoteke, 118
4.2.3 Blokovi specijalnih komentara, 120
4.2.4 Doxgen tagovi u kodu, 122
4.2.5 Doxygen primer, 123
4.3 Konvencije kodiranja, 125
4.3.1 Definicije tipova, 125
4.3.2 Mađarska notacija, 126
4.3.3 Definicija pretprocesorskih simbola, 127
4.3.4 Zagrade { } , 127
4.3.5 Iskazi switch, 127
4.3.6 Razmak, 128
4.3.7 Globalne promenljive, 128
4.3.8 Doxygen tagovi, 129
4.3.9 Deklaracije funkcija, 129
4.3.10 Deklaracije stanja, 130
4.3.11 Tabulatori i uvlačenje, 130
4.3.12 Prioritet operatora, 130
4.4 Pregled C datoteke projekta, 131
4.4.1 Pristupanje registrima, 135
4.5 Kako pokrenuti procesor, 137
4.5.1 Watchdog tajmer, 137
4.5.2 Inicijalizacija radnog takta i napajanja, 139
4.5.3 Implementiranje podešavanja radnog takta, 141
4.6 Inicijalizacija GPIO-a, 143
4.7 Programske strukture, 144
4.7.1 Beskonačna petlja, 144
4.7.2 Operativni sistemi, 146
4.7.3 Nadređena petlja mašine stanja, 147
4.8 Implementiranje SM nadređene petlje, 151
4.8.1 Inicijalizacija, 1 52
4.8.2 Nadređena petlja stanja mašine, 152
4.9 helloworld.c, 155
4.10 Sledeći koraci, 159
POGLAVLJE 5 GPIO I LED DRAJVER, 161
5.1 SAM3U2 ulazi i izlazi opšte namene, 1 61
5.2 Spoljni hardver, 1 62
5.2.1 Dodela pinova, 163
5.3 PIO periferija, 168
5.4 PIO unutrašnji hardver, 169
5.4.1 Logički blok dijagram, 170
5.5 PIO registri, 1 74
5.6 Dodavanje novog zadatka, 1 78
5.7 LED drajver, 1 81
5.8 Implementacija drajvera, 184
5.9 Treptanje, 1 88
5.9.1 Datoteka mape, 191
5.10 Poglavlje za vežbu, 1 93
POGLAVLJE 6 PREKIDI I DRAJVERI DUGMADI, 194
6.1 Prekidi, 1 94
6.2 Prekidi na mikrokontroleru SAM3U2, 195
6.2.1 Prekidi zavise od hardvera, 196
6.2.2 Prekide treba konfigurisati pomoću firmvera, 196
6.2.3 Prekidi se mogu omogućiti i onemogućiti globalno, 197
6.2.4 Prekid „prisiljava" procesor da pokrene rutinu za obradu prekida.197
6.2.5 Prekidi imaju prioritete, 198
6.2.6 Prekidi mogu (i hoće) da se dešavaju bilo kada, bilo gde, 199
6.2.7 Prekidi zahtevaju očuvanje konteksta, 199
6.2.8 Prekidi postavljaju flegove koje treba izbrisati, 200
6.2.9 ISRtreba da bude kratak i brz, 200
6.3 Izvori korisničkog vodiča za prekid, 200
Odeljak2.15 Model izuzetka, 200
Odeljak 12.5.4 Vektorska tabela, 200
Odeljak 12.5.5 Prioriteti izuzetaka, 201
Odeljak 12.5.7.5. Unos izuzetka, 202
Odeljak 12.9 Unutrašnje funkcije, 202
Odeljak 12.19 Nested Vectored Interrupt Controller, 202
Odeljak 11.1 Identifikatori periferija, 203
6.4 Prekidi i C, 204
6.4.1 Vektorska tabela, 204
6.4.2 Prioriteti, 204
6.4.3 Omogućavanje i onemogućavanje izvora prekida periferija, 205
6.5 Prekidi periferija, 208
6.5.1 GPIO prekidi, 208
6.5.2 Prekidi tajmera/brojača, 208
6.5.3 Prekidi komunikacionih periferija, 209
6.5.4 Drugi prekidi periferija, 209
6.6 Pregled i podešavanje drajvera dugmeta, 209
6.6.1 Debaunsiranje, 209
6.6.2 Istorija dugmeta ili detekcija ivice, 210
6.6.3 Duži pritisak dugmeta, 210
6.7 Rad dugmeta, 210
6.7.1 Dugme definicija tipova (typedefs), 212
6.8 PIO prekidi, 213
6.9 API dugmeta, 223
6.10 Vežba za poglavlje, 225
POGLAVLJE 7 Spavanje, sistemski otkucaj i periferija tajmera, 226
7.1 Spavanje, 226
7.2 Konfiguracija sistemskog otkucaja, 227
7.2.1 Vreme otkucaja i CTRL INIT vrednosti, 228
7.3 Periferija tajmera, 234
7.4 Istaknute stavke tajmera brojača (Timer Counter), 236
7.5 Registri brojača tajmera, 238
7.6 Drajver tajmera, 241
7.7 API tajmera, 242
7.8 Vežba za poglavlje, 247
POGLAVLJE 8 MODULISANJE ŠIRINE IMPULSA, 248
8.1 PWM koncepti, 248
8.2 PWM na lakši način: SAM3U2 PWM periferija, 250
8.3 Istaknute stavke periferije, 251
8.4 PWM i zvuk, 252
8.5 EiE hardverzvuka, 253
8.6 PWM registri, 254
8.7 Audio drajver razvojne ploče, 257
8.7.1 Inicijalizacija audio funkcije, 258
8.7.2 Audio API funkcije, 259
8.7.3 Funkcije PWMAudioOn() i PWMAudioOff(), 262
8.8 PWM na teži način: bit bashing, 263
8.9 LED PWM projektovanje, 264
8.10 Zvučni bitovi, 270
8.1 1 Više korisničkih zadataka, 272
8.12 Vežba za poglavlje, 274
POGLAVLJE 9 DMA I RAZMENA PORUKA, 275
9.1 Prenos podataka, 275
9.2 Konflikti resursa, 277
9.3 Direktan pristup memoriji - DMA, 278
9.3.1 PDC registri, 282
9.3.2 PDC prekidi, 284
9.3.3 Prenos pomoću DMA-a, 285
9.3.4 Prijem pomoću DMA, 286
9.4 Povezane liste, 286
9.5 Hardverske greške, 289
9.6 EiE zadatak razmene poruka, 292
9.6.1 Strukture podataka zadatka razmene poruka, 294
9.6.2 Zaštićene funkcije zadataka razmene poruka, 299
9.7. Slanje poruka javnih funkcija, 309
9.7.1 QueryMessageStatus(), 309
9.8 Mašina stanja razmene poruka, 31 1
9.9 Vežba za poglavlje, 312
POGLAVLJE 10 SERIJSKA KOMUNIKACIJA I BAGOVI, 313
10.1 Pregled RS-232 serijske komunikacije, 313
10.1.1 Taktovanje, 316
10.1.1 Signaliziranje, 318
10.2 Greške podataka, 319
10.3 ASCII, 321
10.4 Skladištenje i prikaz znakova, 322
10.5 SAM3U2 periferija, 325
10.5.1 Istaknute stavke periferije, 326
10.5.2 Baud Rate Generator, 328
10.6 UART registri, 330
10.6.1 EIE UART drajver, 332
10.6.2 UART strukture podataka zadataka, 333
10.6.3 Funkcije UART drajvera, 335
10.7 UART prekidi, 342
10.8 Dizajn UART drajvera, 343
10.8.1 Prenos podataka, 343
10.8.2 Prijem podataka, 347
10.9 Dodela dinamičke memorije, 349
10.10 Zadatak debagovanja, 352
10.11 API za debagovanje, 353
10.11.1 DebugPintfO, 354
10.11.2 DebugPrintNumber(), 355
10.12* Citanje unosa znakova, 356
10.12.1 Debug lnitialize(), 3 57
10.12.2 DebugRxCallback(), 358
10.13 Programerski pristup debagovanju, 359
10.14 Kontrolni kodovi terminala, 369
10.15 Vežba za poglavlje, 370
POGLAVLJE 11 SPI KOMUNIKACIJA POMOĆU I2C, 371
11.1 SPI signaliziranje, 371
11.2 SPI hardver, 377
11.3 SPI registri, 378
11.4 EIE SPI drajver, 382
11.5 Master prenos, 385
11.6 Master slanje, 385
11.7 Slave prenos, 386
11.8 Slave prijem, 386
11.9 Slave prenos sa kontrolom toka, 386
11.10 Slave slanje i kontrola toka, 387
11.11 Chip Select, 387
11.12 SPI strukture podataka, 388
11.13 SPI funkcije drajvera zajedno sa UART-om, 390
11.14 Nove SPI funkcije drajvera, 391
11.14.1 SspRequest(), 391
11.14.2 SspRelease (), 392
11.14.3 SspAssertCS() / SspDeassertCS() , 394
11.14.4 SspReadByte() / SspReadData(), 394
11.14.5 SspQueryReceiveStatus() , 395
11.14.6 SspGenericHandler() , 397
11.15 Ssp mašina stanja, 403
11.16 Interfejs Blade priključne ploče, 407
11.17 Primer projekta za Blade, 409
11.17.1 Konfiguracione podrazumevane vrednosti i interfejs Blade firmvera 409
11.17.2 UserAppl lnitialize(), 412
11.17.3 UserApplSM, 41 3
11.18 Vežba za poglavlje, 414
POGLAVLJE 12 I2C I ASCII LCD, 416
12.1 Inter-lntegrated Circuit (l2C) komunikacija, 416
12.2 I2C hardver, 417
12.3 I2C signaliziranje, 419
12.4 EiE TWI hardver, 422
12.5 I2C (TWI) na procesoru SAM3U2, 422
12.6 TWI i PDC, 423
12.7 TWI registri, 425
12.8 TWI drajver, 427
12.8.1 TWI strukture podataka, 428
12.8.2 TWI funkcije drajvera, 429
1 2.9 TWI mašina stanja i ISR, 434
12.9.1 TWI Transmit, 434
12.10 TWI drajver, 439
12.10.1 NACK i greške, 442
12.11 ASCII LCD, 444
12.11.1 Hardver LCD-a, 445
12.11.2 LCD kontroleri, 446
12.11.3 Interfejs LCD-a, 447
12.12 Character i Control Data režimi, 449
12.13 Korišćenje LCD kontrolera, 450
12.14 Kontrolni bajt sa bitovima Co i Rs, 451
12.14.1 RAM za adrese znakova, 452
12.14.2 Skup komandi za LCD, 453
12.14.13 Inicijalizacija LCD-a, 454
12.15 LCD aplikacija, 457
12.15.1 LcdCommand(), 458
12.15.2 LcdMessage(), 458
12.15.3 LcdClearChars(), 459
12.16 Vežba za poglavlje, 460
POGLAVLJE 13 * ANALOGNO-DIGITALNA KONVERZIJA, 461
13.1 Osnove ADC-a, 461
13.1.1 Kvantizacija, 461
13.1.2 Uzorkovanje, 461
13.1.3 Propusni opseg i alijasing, 462
13.1.4 Nikvistova frekvencija, 463
13.1.5 Rezolucija, 464
13.1.6 Isecanje (Clipping), 465
13.2 Karakteristike ADC-ova, 465
13.2.1 Preciznost, greška i ENOB, 466
13.2.2 Nedostajući kodovi, 467
13.2.3 Referentne napone, 467
13.2.4 Šum, 468
13.2.5 Pojedinačno i diferencijalno merenje, 468
13.2.6 Obrada signala, 469
13.3 EiE ADC hardver, 470
13.4 SAM3U2 12-bitna ADC periferija, 471
13.4.1 ADC registri, 472
13.5 EIE ADC drajver, 475
13.5.1 ADC inicijalizacija, 477
13.5.2 ADC prekid, 478
13.5.3 ADC mašina stanja, 478
13.6 EIE ADC API, 479
13.6.1 void Adcl 2AssignCallback() , 479
13.6.2 bool Adcl 2StartConversion() , 480
13.7 Vežba za poglavlje, 481
POGLAVLJE 14 ANT RADIO SISTEM, 483
14.1 ANT bežični radio, 484
14.2 Izrada ANT steka, 485
14.2.1 ANT fizički sloj, 486
14.3 Dokument ANT Message Protocol and Usage, 487
14.3.1 ANT protokol: odeljci od 1 do 4, 487
14.3.2 Odeljak 5 ANT protokola: parametri kanala, 488
14.3.3 ANTIDkanala, 489
14.3.4 Tipovi podataka prenosa, 490
14.3.5 Odeljak 6 ANT protokola: Uparivanje, 491
14.3.6 Odeljak 7 ANT protokola: ANT interfejs, 492
14.3.7 Odeljci 8 i 9 ANT protokola: Primeri i dodaci, 493
14.4 Upravljanje porukama, 494
14.4.1 Razmena poruka sa zatvorenim kanalom, 494
14.4.2 Razmena poruka kada je kanal otvoren, 496
14.5 Debagovanje ANT sistema, 497
14.6 Programiranje ANT podsistema, 498
14.6.1 Dizajn firmvera ant.c i ant_apl.c, 499
14.6.2 Strukture podataka, 500
14.6.3 Serijski drajveri i ANT hardverski interfejs, 502
14.6.5 ANT_TICK i ANT_DATA, 528
14.7 ANT mašina stanja, 536
14.7.1 Inicijalizovanje ANT SM-a, 536
14.8 Implementiranje ANT mašine stanja, 539
14.9 Rezima API-ja, 542
14.9.1 ANT konfiguracija, 543
14.9.2 ANT poruke podataka, 546
14.10 Vežba za poglavlje, 549
14.1 1 Zaključak, 550
Detaljni podaci o knjiziNaslov: Projektovanje ugrađenih sistema pomoću ARM Cortex-M razvojne ploče od 0 do 1
Izdavač: EHO
Strana: 550 (cb)
Povez: meki
Pismo: latinica
Format: B5
Godina izdanja: 2019
ISBN: 978-86-80134-23-9