Brzoza-Woch R. - Mikrokontrolery AT91SAM7 w przykładach.pdf

(40444 KB) Pobierz
Robert Brzoza-Woch
3
Spis treści
Wstęp
1. Podstawy
1.1.
1.2.
1.3.
Co oznacza A R M ?
S A M 7 - mikrokontrolery z rdzeniem A R M
A R M 7 T D M I - to w a r t o w i e d z i e ć
1.3.1.
1.3.2.
1.3.3
1.4.
Architektura von Neumanna
Wyrównanie
Little-endian
kontra
big-endian
13
15
16
17
17
17
18
18
19
19
20
20
21
21
22
23
23
25
26
27
28
29
31
J a k to działa?
1.4.1.
1.4.2.
1.4.3.
1.4.4.
1.4.5.
1.4.6.
Mikrokontroler a mikroprocesor
Rejestry mikroprocesora
Rejestry ogólnego przeznaczenia i prowadzenie obliczeń
Licznik programu
Rejestr statusowy
Stos
1.5.
Rdzeń A R M 7 T D M I
1.5.1.
1.5.2.
1.5.3.
1.5.4.
1.5.5.
1.5.6.
1.5.7.
Wyjątki i przerwania
Poziomy uprzywilejowania
Tryb ARM i tryb Thumb
Rejestry statusowe w rdzeniu ARM
Pozostałe rejestry rdzenia ARM
Rejestry a wyjątki
Kontroler przerwań w SAM7
2. Krótka powtórka z języka C
2.1.
2.2.
2.3.
2.4.
Wstęp
Założenia
Stosujmy jednolite typy zmiennych
U ż y w a n i e m o d y f i k a t o r ó w (
q u a l i f i e r s ) \ static, volatile
i
extern
Zmienne
volatile -
„ulotne"
Zmienne
static
- „statyczne"
Deklaracje zmiennych i funkcji
extern
- „zewnętrzne"
Modyfikator
static
zastosowany do funkcji
33
34
34
35
35
35
36
37
37
38
38
39
2.4.1.
2.4.2.
2.4.3.
2.4.4.
2.5.
Struktury danych
Krótki wstęp dla nowicjuszy
Co zyskujemy, czyli najprostsze zastosowania
2.5.1.
2.5.2.
4
Spis
treści
2.5.3.
2.5.4.
2.6.
Tworzenie struktur danych
Wyrównanie - odsłona druga
39
40
44
45
45
46
48
49
49
51
Wskaźniki
2.6.1.
2.6.2.
2.6.3.
2.6.4.
2.6.5.
2.6.6.
2.6.7.
Co to jest wskaźnik?
Tworzenie wskaźników
Uzyskiwanie adresów zmiennych i funkcji
Zapis i odczyt danych za pomocą wskaźników
Wskaźniki do struktur
Wskaźniki i tablice
Wskaźniki a problem wyrównania
3. Strategia
3.1.
Dobieramy SAM-a do naszego projektu
3.1.1.
3.1.2.
3.1.3.
3.2.
Porównanie wybranych modeli SAM7
Przenośność kodu pomiędzy mikrokontrolerami SAM7
Przenośność na inne mikrokontrolery firmy Atmel
53
54
54
56
57
57
58
59
62
62
63
63
64
65
65
66
66
67
Dobre n a w y k i
Podział na moduły
Dobry kod sam się komentuje
3.2.1.
3.2.2.
3.3.
Testowanie i debugging
Sposób najprostszy - dioda LED
Sposób wydajny - port szeregowy UART
Sposób dokładny - interfejs JTAG
W y b ó r metody
Algorytm postępowania
Testowanie długoterminowe
3.3.2.
3.3.3.
3.3.4.
3.3.5.
3.3.6.
3.3.1.
3.4.
W y b ó r środowiska programistycznego i narzędzi
3.4.1.
3.4.2.
Środowiska komercyjne
Pakiety darmowe
3.5.
Nie w s z y s t k o t r z e b a u m i e ć - w y k o r z y s t a n i e g o t o w y c h
fragmentów programu
3.5.1.
3.5.2.
Biblioteki w języku C
Fragmenty kodu realizujące specyficzne zadania
68
69
69
4. Zaczynamy
4.1.
Jak p o d ł ą c z y ć S A M 7 ?
Najogólniej
Zasilanie
Źródła sygnału zegarowego
4.1.1.
4.1.2.
4.1.3.
71
72
72
73
74
5
Spis treści
4.1.4.
4.1.5.
4.1.6.
JTAG
Interfejs USB
Podsumowanie i uwagi
75
76
77
4.2.
Software
Podstawa: edytor, kompilator, programator
Konfiguracja portu LPT
Pierwsza kompilacja
Instalacja AT91-ISP i aktywacja bootloadera SAM-BA
Instalacja na komputerze PC
Aktywacja
bootloadera
SAM-BA w mikrokontrolerze
79
79
82
82
85
85
85
86
4.2.1.
4.2.2.
4.2.3.
4.2.4.
4.2.4.1.
4.2.4.2.
4.2.5.
Przygotowanie SAM7X i SAM7XC do pracy i programowanie
za pomocą SAM-BA
4.3.
Problemy
Brak portu LPT
Nie działają narzędzia kompilacji
Wywoływanie poleceń
87
87
89
90
4.3.1.
4.3.2.
4.3.3.
5. Omówienie pierwszego projektu
5.1.
Dostęp do układów peryferyj nych
Do czego zmierzamy?
Potrzebne informacje
Pierwsze podejście (bezpos'redni wpis do pamięci)
Czy można bardziej przejrzys'cie? (bezpośrednie adresy rejestrów)
Definicje bitów
Zadbajmy o przenos'ność kodu! (zastosowanie adresów bazowych)
5.1.1.
5.1.2.
5.1.3.
5.1.4.
5.1.5.
5.1.6.
91
92
92
92
93
94
95
97
5.2.
Omówienie plików projektu
Blink_SAM7XC
main.c
Funkcjamain
Funkcja
init
5.2.1.1.
5.2.1.2.
101
101
101
102
102
104
104
105
105
106
106
107
107
107
5.2.1.
5.2.2.
5.2.3.
board.h
Makefile
Wybór typu mikrokontrolera
Dodawanie nowych plików projektu
Zmiana poziomu optymalizacji
5.2.3.1.
5.2.3.2.
5.2.3.3.
5.2.4.
Linker scripts
- pliki
.Id
Omówienie najistotniejszego fragmentu
Podział pamięci na sekcje
Nazwy plików
.Id
5.2.4.1.
5.2.4.2.
5.2.4.3.
5.2.5.
Pliki startowe - ogólnie
6
Spis
treści
6. Kontroler PIO czyli port uniwersalnych wejść/wyjść cyfrowych
6.1.
6.2.
6.3.
Wstęp
W ł ą c z e n i e s y g n a ł u z e g a r o w e g o k o n t r o l e r a PIO
K o n f i g u r a c j a j a k o w y j s ' c i e : m i g a n i e diodą L E D
Pierwszy sposób generowania sygnału wyjs'ciowego (SODR, CODR)
Drugi sposób sterowania sygnału w y j ś c i o w e g o (ODSR)
Przykład do skompilowania
Rejestry komplementarne
109
110
110
111
111
112
114
115
116
116
117
117
118
118
119
120
122
123
123
124
126
127
127
128
129
129
130
131
133
6.3.1.
6.3.2.
6.3.3.
6.3.4.
6.4.
P r a c a j a k o w e j ś c i e c y f r o w e : o d c z y t stanu p r z y c i s k ó w
6.4.1.
6.4.2.
6.4.3.
Sposób najprostszy
Program demonstracyjny
Dalsze usprawnienia odczytu
6.5.
Obsługa popularnych wyświetlaczy LCD 2 x 1 6 znaków
6.5.1.
6.5.2.
6.5.3.
6.5.4.
Hardware
Sposób sterowania wyprowadzeniami PIO
Realizacja praktyczna
Programowy interfejs wyświetlacza
6.6.
Interfejs 1-Wire
Hardware
Konfiguracja PIO
Funkcje wyższego poziomu (z pliku
one_wire.c)
Funkcje obsługi termometru DS18B20
6.6.1.
6.6.2.
6.6.3.
6.6.4.
6.7.
Przerwanie od kontrolera PIO
6.7.1.
6.7.2.
6.7.3.
6.7.4.
6.7.5.
6.7.6.
Wstęp dla niewtajemniczonych
Przykładowy program
Konfiguracja kontrolera przerwań AIC
Konfiguracja układu PIO
Funkcja obsługi przerwania PIO
Dla dociekliwych: jak to jest naprawdę?
7. Najprostsza komunikacja szeregowa przez DBGU
oraz elementy interfejsu USART
7.1.
Wstęp
7.1.1.
7.1.2.
7.2.
Co to jest i do czego służy jednostka DBGU?
DBGU a typowy port szeregowy
135
136
136
136
136
137
138
Sposób podłączenia
7.2.1.
7.2.2.
Hardware
Brak portu COM
Zgłoś jeśli naruszono regulamin