Dalam pengembangan sistem pada level Bare Metal, register bukan sekadar variabel, melainkan gerbang fisik untuk berinteraksi dengan silikon. Pada SoC BCM2835 (Raspberry Pi 1/Zero), terdapat berbagai jenis register yang dikelompokkan berdasarkan letak dan fungsinya dalam peta memori 32-bit.
1. Register Internal CPU (General Purpose)
Register ini berada tepat di dalam inti prosesor ARM dan tidak memiliki alamat memori fisik. Mereka diakses langsung melalui instruksi Assembly untuk operasi aritmatika dan logika.
- R0 – R12 (General Purpose): Digunakan sebagai “meja kerja” untuk menyimpan data sementara saat komputasi berlangsung.
- SP (Stack Pointer – R13): Menunjuk ke alamat memori aktif di Stack. Secara standar diatur ke
0x8000pada awal program. - LR (Link Register – R14): Menyimpan alamat “jalan pulang” saat sebuah fungsi dipanggil menggunakan instruksi
BL. - PC (Program Counter – R15): Menunjuk ke alamat instruksi yang sedang atau akan dieksekusi oleh CPU.
2. Register Status dan Sistem (Special Purpose)
Register ini berfungsi untuk mengatur kondisi internal CPU dan mode operasional.
- CPSR (Current Program Status Register): Menyimpan bendera (flags) kondisi seperti Zero, Negative, dan Carry, serta menentukan mode interupsi (User, System, IRQ).
- SPSR (Saved Program Status Register): Menyimpan salinan CPSR saat terjadi interupsi agar CPU dapat kembali ke status semula setelah penanganan selesai.
- CP15 (System Control Coprocessor): Sekumpulan register khusus untuk mengatur fitur tingkat tinggi seperti L1 Cache dan Memory Management Unit (MMU).
3. Register Periferal (Memory-Mapped I/O)
Inilah register yang menghubungkan kode program dengan perangkat keras. Register ini dipetakan ke dalam alamat memori (MMIO) mulai dari Base Peripheral 0x20000000.
- GPIO Function Select (GPFSELn): Mengatur mode setiap pin (Input, Output, Alt). Setiap pin dialokasikan 3 bit, sehingga satu register 32-bit mengontrol 10 pin dengan 2 bit tersisa sebagai reserved.
- Contoh:
GPFSEL1(0x20200004) mengontrol GPIO 10-19.
- Contoh:
- GPIO Output Set/Clear (GPSETn & GPCLRn): Digunakan untuk mengubah status logika pin menjadi High atau Low.
- System Timer: Register untuk mengakses stempel waktu presisi dan mengatur delay perangkat keras (0x20003000).
4. Ringkasan Peta Memori Sistem (32-bit)
Memahami posisi seluruh register dan memori dalam satu peta utuh sangat penting untuk mencegah terjadinya memory collision.
| Rentang Alamat (Hex) | Deskripsi Wilayah | Keterangan Teknis |
| 0x00000000 | Exception Vectors | Gerbang utama penanganan reset dan interupsi. |
| 0x00008000 | Kernel Start (_start) | Titik masuk utama instruksi program di RAM. |
| 0x20000000 | Base Peripheral | Awal wilayah kontrol hardware (GPIO, DMA, Timer). |
| 0x20200000 | GPIO Base | Alamat dasar untuk seluruh konfigurasi pin fisik. |
| 0xFFFFFFFF | Address Limit | Batas maksimum pengalamatan arsitektur 32-bit. |
Kesimpulan
Bagi seorang pengembang Bare Metal, register adalah bahasa ibu dari mesin. Dengan menguasai posisi dan cara manipulasi bit pada register-register di atas, kita memiliki kendali penuh atas setiap elektron yang mengalir di dalam SoC BCM2835.
