Pytanie:
Podręcznik rozwoju systemu operacyjnego Raspberry Pi Uniwersytetu Cambridge Pytania
ArmenB
2012-10-05 12:04:18 UTC
view on stackexchange narkive permalink

Jestem programistą aplikacji wysokiego poziomu (C #, Python) i chciałbym pobrudzić sobie ręce, tworząc niskopoziomowe aplikacje osadzone. Uniwersytet Cambridge opublikował serię samouczków, w których dowiesz się, jak stworzyć system operacyjny dla Raspberry Pi o nazwie Baking Pi. Zamierzałem opublikować tutaj moje pytanie dotyczące tego samouczka i aktualizować odpowiedzi w miarę postępów. Może nawet opublikuj kilka punktów, które sam zrozumiałem.

Więc śledziłem lekcję 1 i już jestem zdezorientowany. Oto link do strony.

Pierwsza część samouczka mówi, że musimy (zakładam) włączyć kontroler GPIO, wpisując wartość 0x20200000 do rejestru r0. Nigdzie w arkuszu danych nie mogę znaleźć takich istotnych informacji. ( link). Zajrzałem do sekcji GPIO, ale nie widziałem żadnego wskazania 16 rejestrów lub r0. Gdzie są te informacje?

AKTUALIZACJA

Po pierwsze, tutorial mówi o włączaniu diody OK, która jest diodą stanu. Możesz się zastanawiać, gdzie w instrukcji jest napisane, że GPIO 16 jest podłączony do diody LED OK. Nie będzie. Musisz spojrzeć na schemat Raspberry i dowiedzieć się, do którego GPIO jest podłączony status_led. Oto łącze ze schematami. Strona 2, Zablokuj BCM2835.

Zatem celem jest wybranie pinu GPIO16. (więcej aktualizacji w przyszłości ...)

Trzy odpowiedzi:
#1
+5
Jivings
2012-10-05 12:08:43 UTC
view on stackexchange narkive permalink

Oto istotne informacje zawarte w tym samouczku:

Adresy w komputerach to tylko liczby, więc liczba 0x20200000 jest adresem kontrolera GPIO. To tylko decyzja projektowa podjęta przez producentów, mogli użyć innego adresu (pod warunkiem, że nie koliduje z niczym innym). Znam ten adres tylko dlatego, że sprawdziłem go w instrukcji [3], nie ma określonego systemu adresów (poza tym, że wszystkie są dużymi okrągłymi liczbami szesnastkowymi).

r0 to po prostu sekcja pamięci w procesorze, w której możesz przechowywać dowolne informacje; nazywane są rejestrami ogólnego przeznaczenia. Zapisujemy lokalizację kontrolera GPIO w tej lokalizacji, abyśmy mogli go później ponownie wykorzystać, tak jak zwykle robimy to przy użyciu zmiennej w programowaniu wysokiego poziomu.

Myślę, że wartość 0x20200000 faktycznie odnosi się do pierwszej pamięci miejsce w tabeli na stronie 90. Zauważysz, że zanim napiszemy do rejestru, zwiększamy go o 4, dając nam Function Select 1 (patrz tabela), rejestr, który kontroluje kilka pinów, w tym ten, do którego chcemy pisać.

Czy to w ogóle pomaga?

Moje pytanie brzmi: gdzie w arkuszu danych znajdują się te informacje?
@ArmenB .: Rozdział 6.1, strona 90
W dokumencie napisano: „GPIO ma 41 rejestrów”. gdzie samouczek mówi 16. Nie ma wskazania rejestru r0 w tej sekcji ani numeru 0x20200000, aby go włączyć.
@ArmenB .: Przepraszam Armen, przejdę do bardziej szczegółowych informacji.
#2
+3
ArmenB
2012-10-06 07:00:01 UTC
view on stackexchange narkive permalink

Podziękowania dla Jivings i emcconville za odpowiedź na pytanie.

W arkuszu danych pdf, strona 6 sekcja Adres fizyczny ARM , jest sekcja, która mówi

Adresy fizyczne mieszczą się w zakresie od 0x20000000 do 0x20FFFFFF dla urządzeń peryferyjnych. Adresy magistrali dla urządzeń peryferyjnych są skonfigurowane tak, aby były odwzorowywane na zakres adresów magistrali urządzeń peryferyjnych, zaczynając od 0x7E000000. Zatem urządzenie peryferyjne reklamowane tutaj pod adresem magistrali 0x7Ennnnnn jest dostępne pod adresem fizycznym 0x20nnnnnn.

Przechodząc do strony 90, pierwszy wiersz tabeli zawiera:

0x7E200000 GPFSEL0 Wybór funkcji GPIO 0 32 R / W

więc 0x7E200000 tłumaczy się na adres fizyczny 0x20200000, który jest bitem funkcji GPIO.

Jeśli chodzi o r0, w ARM jest 16 rejestrów ogólnego przeznaczenia, których możemy użyć do przechowywania liczb, dlatego w samouczku wybiera r0, ponieważ jest to pierwszy wolny rejestr.

Cieszę się, że mogłem pomóc i miła odpowiedź, to ładnie podsumowuje pozostałe dwie.
Nie, dziękuję za poświęcenie czasu na odpowiedź. Opublikowałem to jako wiki społeczności, aby inni mogli edytować / naprawiać / uzupełniać post.
#3
+1
emcconville
2012-10-05 18:55:05 UTC
view on stackexchange narkive permalink

Rejestry od r0 do r12 mają zastosowanie ogólne. Oczywiście najłatwiej jest zacząć od r0 . Jak zauważył Jivings, podręcznik podaje każdy adres i stwierdza:

Adresy fizyczne mieszczą się w zakresie od 0x20000000 do 0x20FFFFFF dla urządzeń peryferyjnych.

Nie mogę wybrać dwóch poprawnych odpowiedzi! to jest kiepskie. Popraw tę witrynę internetową ... Dziękujemy za wkład. W końcu zrozumiałem znaczenie RTFM.


To pytanie i odpowiedź zostało automatycznie przetłumaczone z języka angielskiego.Oryginalna treść jest dostępna na stackexchange, za co dziękujemy za licencję cc by-sa 3.0, w ramach której jest rozpowszechniana.
Loading...