Cambridge University Raspberry Pi Panduan pengembangan sistem operasi Pertanyaan

9

Saya seorang pengembang aplikasi tingkat tinggi (C #, python) dan saya ingin membuat tangan saya kotor dengan pengembangan aplikasi tertanam tingkat rendah. Universitas Cambridge telah memposting serangkaian tutorial yang mengajarkan Anda cara membuat sistem operasi untuk Raspberry Pi yang disebut Baking Pi. Saya bermaksud memposting pertanyaan saya mengenai tutorial ini di sini dan memperbarui jawabannya ketika saya melanjutkan. Mungkin bahkan memposting beberapa poin yang saya temukan sendiri.

Jadi saya sudah mengikuti pelajaran 1 dan saya sudah bingung. Inilah tautan halaman .

Bagian pertama dari tutorial mengatakan kita perlu (saya berasumsi) menyalakan pengendali GPIO dengan menulis nilai 0x20200000 untuk mendaftar r0. Saya tidak dapat menemukan informasi yang relevan di mana saja di lembar data. ( tautan ). Saya telah melihat bagian GPIO tetapi saya tidak melihat indikasi 16 register atau r0. Di mana informasi ini?

MEMPERBARUI

Pertama-tama, tutorial berbicara tentang menyalakan LED OK, yang merupakan status LED. Anda mungkin bertanya-tanya di mana dalam Manual ini dikatakan bahwa GPIO 16 terhubung ke LED OK. Tidak akan. Anda perlu melihat Skema Raspberry dan menemukan GPIO yang terhubung dengan status_led. Berikut ini tautan skemanya. Halaman 2, Blok BCM2835.

Jadi tujuannya adalah untuk memilih pin GPIO16. (lebih banyak pembaruan akan datang ...)

ArmenB
sumber

Jawaban:

5

Berikut adalah informasi yang relevan dalam tutorial itu:

Alamat di komputer hanya angka, dan angka 0x20200000 adalah alamat pengendali GPIO. Ini hanya keputusan desain yang diambil oleh produsen, mereka bisa menggunakan alamat lain (asalkan tidak bertentangan dengan yang lain). Saya tahu alamat ini hanya karena saya mencarinya di manual [3] , tidak ada sistem khusus untuk alamat (selain itu mereka semua angka bulat besar dalam heksadesimal).

r0hanyalah bagian memori pada prosesor di mana Anda dapat menyimpan informasi apa pun yang Anda suka; ini disebut register tujuan umum. Kami menulis lokasi pengendali GPIO ke lokasi ini sehingga kami dapat menggunakannya kembali nanti, seperti yang biasanya kami lakukan menggunakan variabel dalam pemrograman tingkat tinggi.

Saya pikir nilai 0x20200000 sebenarnya merujuk pada lokasi memori pertama dalam tabel di halaman 90. Anda akan melihat bahwa sebelum kita menulis ke register, kita menambahnya dengan 4, memberi kita Function Select 1(lihat tabel), register yang mengontrol beberapa pin , termasuk yang ingin kami tulis.

Apakah itu membantu?

Jivings
sumber
Pertanyaan saya adalah di mana dalam lembar data informasi ini terkait?
ArmenB
@ArmenB .: Bagian 6.1, Halaman 90
Jivings
Dokumen itu mengatakan "GPIO memiliki 41 register." di mana tutorial mengatakan 16. Tidak ada indikasi register r0 di bagian itu, atau nomor 0x20200000 untuk mengaktifkannya.
ArmenB
@ArmenB .: Maaf Armen, saya akan membahas sedikit lebih detail.
Jivings
3

Terima kasih kepada Jivings dan emcconville untuk menjawab pertanyaan.

Dalam lembar data pdf, halaman 6 bagian alamat fisik ARM , ada bagian yang mengatakan

Alamat fisik berkisar dari 0x20000000 hingga 0x20FFFFFF untuk periferal. Alamat bus untuk periferal diatur untuk memetakan ke kisaran alamat bus periferal mulai dari 0x7E000000. Jadi perangkat yang diiklankan di sini di alamat bus 0x7Ennnnnnn tersedia di alamat fisik 0x20nnnnnnn.

Pergi ke halaman 90, baris pertama dari tabel menyatakan:

0x7E200000 GPFSEL0 GPIO Fungsi Pilih 0 32 R / W

jadi 0x7E200000 diterjemahkan ke alamat fisik 0x20200000, yang merupakan Fungsi GPIO pilih 0 bit.

Adapun r0, ada 16 register tujuan umum di ARM, yang dapat kita gunakan untuk menyimpan angka, dan itulah sebabnya dalam tutorial dia memilih r0 karena ini adalah register gratis pertama.

ArmenB
sumber
Senang membantu, dan jawaban diri yang baik, ini merangkum dua lainnya dengan baik.
Jivings
Tidak, terima kasih telah meluangkan waktu untuk menjawab. Saya memposting ini sebagai wiki komunitas sehingga orang lain dapat mengedit / memperbaiki / menyelesaikan posting.
ArmenB
1

Daftar r0melalui r12adalah tujuan umum. Secara alami, ini paling mudah untuk memulai r0. Seperti yang ditunjukkan Jivings, Manual mencantumkan setiap alamat, dan menyatakan:

Alamat fisik berkisar dari 0x20000000 hingga 0x20FFFFFF untuk periferal.

emcconville
sumber
Saya tidak dapat memilih dua Jawaban yang benar! ini lumpuh. Silakan perbaiki situs web ini ... Terima kasih atas masukan Anda. Saya akhirnya mengerti arti RTFM.
ArmenB