format: B5
stron: 280
oprawa: twarda
rok wydania: 2010
Książka jest przeznaczona dla konstruktorów chcących stosować w swoich projektach mikroprocesory z rodziny AT91SAM9 firmy Atmel oraz amatorów chcących poznać tajniki programowania współczesnych, zaawansowanych mikroprocesorów. Przedstawiono w niej zarówno zagadnienia podstawowe (konfiguracja mikroprocesora, obsługa standardowych peryferiów, obsługa kart pamięciowych SD/MMC i SDHC) jak i zaawansowane (jak obsługa MMU, aplikacje DSP audio, obsługa kamer CCD), w obydwu przypadkach na przykładzie czytelnie napisanych i dobrze skomentowanych programów. Dużo miejsca poświęcono także przybliżeniu praktycznych zagadnień projektowych, dzięki czemu konstruktorzy projektujący płytki drukowane będą mogli unikać dokuczliwych i trudnych do wykrycia błędów podczas trasowania szybkich magistral 16/32-bitowych umożliwiających dołączenie do mikroprocesora pamięci SDRAM.
SPIS TREŚCI:
Wstęp 9
1. Podstawowe informacje o mikroprocesorach AT91SAM9 11
1.1. Krótka charakterystyka wybranych mikroprocesorów serii AT91SAM9 12
1.1.1. Cechy wspólne 12
1.1.2. Rodzina SAM9 w porównaniu z SAM7 13
1.1.3. Przenośność kodu pomiędzy SAM7 i SAM9 15
1.2. Rdzeń ARM926EJ-S 15
1.2.1. Szybkość działania 15
1.2.2. Pamięci cache 16
1.2.3. Architektura Harvard, ale 16
1.2.4. Jednostka zarządzania pamięcią MMU 18
1.3. Pamięci 18
1.3.1. Pamięci w AT91SAM9260 – co z nimi zrobić? 19
1.3.2. Pamięci zewnętrzne 19
1.3.3. Problem szybkości pamięci zewnętrznej 21
1.3.4. Pamięci TCM 22
2. Jak to podłączyć? 23
2.1. Zasilanie 24
2.2. Taktowanie 26
2.3. Interfejsy USB 27
2.3.1. Podłączenie modułu UDP 28
2.3.2. Podłączenie modułu UHP 28
2.4. Interfejs JTAG 29
2.5. Wyprowadzenia do sterowania pracą mikroprocesora 30
2.5.1. JTAGSEL 30
2.5.2. TST 31
2.5.3. OSCSEL 31
2.5.4. BMS 31
2.5.5. SHDN 32
2.5.6. WKUP 32
2.6. Podłączanie pamięci do zewnętrznej magistrali równoległej 33
2.6.1. Pojedyncza pamięć SDRAM z interfejsem 16-bitowym 33
2.6.2. Projekt płytki drukowanej 34
2.6.3. Dwie pamięci SDRAM i interfejs 32-bitowy 36
2.6.4. Pamięci Flash 38
2.7. Tanie płytki testowe dla mikroprocesorów z rodziny AT91SAM926x 40
3. Zaczynamy 43
3.1. Co się dzieje po zresetowaniu mikroprocesora? 44
3.1.1. Program w zewnętrznej pamięci równoległej 45
3.1.2. Program bootloadera w pamięci ROM 45
3.1.3. Rozpoznawanie programu wykonywalnego 47
3.1.4. Wykonanie skopiowanego programu 48
3.2. Instalacja programu SAM-BA 48
3.2.1. Wyłączenie inicjalizacji pamięci SDRAM 49
3.3. Uruchamianie własnych programów na AT91SAM9260 50
3.3.1. Działanie i uruchamianie bootloadera DataFlash_Programmer 50
3.3.2. Działanie bootloadera SDRAM_Bootloader_cache 55
3.3.3. Konfiguracja bootloadera SDRAM_Bootloader_cache 56
3.3.4. Programowanie pamięci SDRAM za pomocą terminalu 57
4. Pierwsze programy 59
4.1. Dostępne obszary pamięci i ich właściwości 60
4.1.1. Wewnętrzne pamięci mikrokontrolera 60
4.1.2. Pamięć SDRAM 62
4.1.3. Moduły peryferyjne 62
4.1.4. TT i pozostałe obszary pamięci 62
4.2. Projekt „zerowy” 63
4.2.1. main.c 63
4.2.2. board.h 63
4.2.3. common.h 65
4.2.4. Makefile 66
4.2.5. delay.c 66
4.2.6. syscalls.c 67
4.2.7. Pozostałe pliki 68
4.3. Plik startowy Ccstartup.S 69
4.3.1. Realizowane zadania 69
4.3.2. Obsługa wyjątków 69
4.3.3. Rozpoczęcie programu 70
4.3.4. Obsługa wyjątku IRQ 74
4.3.5. Obsługa wyjątku FIQ 76
4.3.6. Obsługa wyjątków Abort 77
4.4. Plik cstartup_SAM9.c 78
4.4.1. Inicjalizacja sygnałów zegarowych 78
4.4.2. Inicjalizacja kontrolera przerwań AIC 81
5. Jednostka MMU,zarządzanie pamięcią i inne nieprzyjemne rzeczy 83
5.1. Coś nowego, coś innego 84
5.1.1. Przestrzeń adresowa 84
5.1.2. Zabezpieczenia 85
5.1.3. Tabela translacji 86
5.1.4. Pamięci cache 87
5.1.5. Bufor TLB 89
5.1.6. Bufor zapisu 89
5.2. Rozmowa z MMU 90
5.2.1. Rejestry koprocesora i dostęp do nich 90
5.2.2. Tworzymy wstawkę 91
5.2.3. Gotowe funkcje obsługi koprocesora 92
5.2.4. Uaktywnianie samej pamięci ICache 93
5.3. Jak uaktywnić pamięć DCache? 94
5.3.1. Domeny 94
5.3.2. Tworzenie tabeli translacji 95
5.3.3. Włączenie MMU i uaktywnienie pamięci cache 100
5.4. Zabezpieczenie pamięci 101
5.4.1. Uruchomić program dostarczony z zewnątrz 101
5.4.2. Zarys sytuacji 102
5.4.3. Program testowy Supervisor_Simple 103
5.4.4. Programy „użytkownika” 103
5.4.5. Poprawny program 104
5.4.6. Program nieprawidłowy 105
5.4.7. Uruchamianie programu użytkownika 107
5.4.8. Obsługa wyjątku SWI 109
5.4.9. Obsługa wyjątków Abort 112
5.5. Translacja adresów w praktyce 115
5.5.1. Program przykładowy Supervisor_Virtual 115
5.5.2. Analiza kodu programu Supervisor_Virtual 117
5.5.3. Eksperyment z pamięciami cache 117
5.6. Tablice stron 118
5.6.1. Translacja adresów pod lupą 118
5.6.2. Pierwszy program przykładowy 121
5.6.3. Drugi program przykładowy 126
5.6.4. Dalsze pomysły 129
5.7. Wprowadzenie do wielozadaniowego systemu operacyjnego 130
5.7.1. Podejście najprostsze 130
5.7.2. Zastosowanie pamięci wirtualnej 131
5.7.3. Zastosowanie sprzętowego wspomagania w przełączaniu zadań 133
6. Obsługa kart pamięci za pomocą kontrolera MCI 137
6.1. MMC, SD, SDHC... najważniejsze, by się nie pogubić 138
6.2. Interfejs elektryczny 140
6.3. Transmisja danych kontrolnych 141
6.3.1. Wysyłanie komend 142
6.3.2. Rejestr MCI_CMDR 144
6.3.3. Komendy ACMD 145
6.4. Inicjalizacja kontrolera MCI i karty SD/SDHC 146
6.4.1. Inicjalizacja kontrolera MCI w funkcji mciInit 146
6.4.2. Rozpoznawanie i inicjalizacja kart SD/SDHC w funkcji cardInit 149
6.4.3. Odczyt rozmiarów karty przez program nadrzędny 155
6.5. Transfery danych bez użycia kanału DMA 156
6.5.1. Odczyt pojedynczego bloku 156
6.5.2. Zapis pojedynczego bloku do pamięci Flash karty 158
6.6. Transfery danych z wykorzystaniem kanału DMA 159
6.6.1. Odczyt danych z karty 160
6.6.2. Zapis danych na kartę 162
6.7. Funkcje interfejsowe sterownika sd.c 164
6.8. Program przykładowy i integracja z biblioteką FatFS 165
6.8.1. Inicjalizacja biblioteki FatFS i karty SD 166
6.8.2. Wyświetlenie listy plików i katalogów – obsługa długich nazw 166
6.8.3. Odczyt pojemności karty pamięci 171
6.8.4. Zapis i odczyt pliku 171
6.8.5. Test szybkości zapisu i odczytu 172
7. Przetwarzanie dźwięku,czyli jedno z najciekawszych zastosowań modułu SSC 175
7.1. Czym się zajmiemy? 176
7.2. Magistrala szeregowa I2S 176
7.2.1. Hierarchia układów na magistrali I2S 177
7.2.2. Realizacja transmisji danych przez I2S 179
7.3. Współpraca mikroprocesora z kodekiem na przykładzie AT91SAM9260 i UDA1380 180
7.3.1. Połączenie elektryczne kodeka i mikroprocesora 180
7.4. Oprogramowanie kodeka 183
7.4.1. Inicjalizacja kodeka 183
7.4.2. Inicjalizacja kontrolera SSC – funkcja codecSscConfig 183
7.4.3. Przesyłanie danych do i z kodeka 190
7.4.3. Włączenie i wyłączenie sygnału zegarowego 192
7.4.5. Pozostałe funkcje obsługi kodeka 196
7.5. Magnetofon cyfrowy 197
7.5.1. Obsługa magnetofonu 197
7.5.2. Działanie programu 199
7.6. Realizacja prostych algorytmów przetwarzania dźwięku 204
7.6.1. Obsługa programu 204
7.6.2. Działanie programu 205
7.6.3. Realizacja filtru FIR 208
7.6.4. Skąd wziąć współczynniki filtru, czyli przyspieszony kurs Octave 210
7.6.5. Efekt cyfrowego echa 213
8. Interfejs sensora obrazu ISI 215
8.1. Krótkie wprowadzenie, czyli „o co chodzi?” 216
8.2. Sensory obrazu 217
8.2.1. Typowe sygnały modułu kamery 217
8.2.2. Przesyłanie danych graficznych 219
8.3. Moduł ISI 222
8.3.1. Podstawowe funkcje realizowane przez ISI 222
8.3.2. Zapis danych do pamięci RAM 223
8.3.3. Interfejs elektryczny modułu ISI oraz podłączenie kamery do mikroprocesora 225
8.4. Program przykładowy 227
8.4.1. Podłączamy sprzęt 227
8.4.2. Uruchamiamy program 228
8.4.3. Inicjalizacja modułu ISI 229
8.4.3. Komunikacja z sensorami obrazu PO2030 i PO6030 231
8.4.4. Konfiguracja modułu ISI 233
8.4.5. Wyświetlanie obrazu ze ścieżki podglądu 237
8.4.7. Pobieranie obrazu ze ścieżki kodeka 238
8.5. Co dalej? 240
Dodatek A. Przyspieszony kurs asemblera 241
A.1. Jak zacząć? 242
A.2. Kod asemblera we własnym programie 243
A3. Rodzaje instrukcji asemblera 243
A.3.1. Instrukcje skoków 244
A.3.2. Instrukcje służące do przetwarzania danych 246
A.3.3. Operacje mnożenia 249
A.3.4. Rozkazy dostępu do słowa statusowego 250
A.3.5. Rozkazy przesłań (instrukcje Load i Store) 251
A.3.6. Rozkazy przesłań wielu rejestrów i działania na stosie 253
A.4. Wstawki asemblera w języku C 255
A.4.1. Podejście najprostsze 255
A.4.2. Pełna składnia polecenia asm 256
A.5. Przypisanie rejestru do zmiennej 258
Dodatek B. Jak napisać skrypt linkera? 259
B.1. Zadanie do wykonania 260
B.2. Podstawowe zasady tworzenia skryptów linkera 263
B.3. Bardzo prosty skrypt linkera 264
B.4. Rozbudowa skryptu 266
B.5. Definicja regionów pamięci 268
B.6. Usunięcie sekcji .bss z pliku wynikowego 270
B.7. Ostateczna postać skryptu linkera: sdram.lds 272
B.8. Wybór sekcji dla zmiennych 276
Literatura 277