Di Balik Layar: Bagaimana Alamat Memori Menyalakan Lampu?

Mungkin Anda bertanya-tanya: “Mengapa untuk menyalakan dan mematikan LED kita harus menulis ke dua alamat memori yang berbeda (GPSET dan GPCLR)? Mengapa tidak satu alamat saja seperti sakelar lampu di rumah?”

Jawabannya terletak pada konsep Atomic Operations dan arsitektur Memory Mapped I/O. Mari kita bedah cara kerjanya.

1. Memori sebagai Papan Kontrol

Dalam komputer biasa, memori (RAM) adalah gudang penyimpanan. Jika Anda menyimpan angka 10 di alamat 0x1234, angka itu akan diam di sana sampai Anda mengubahnya.

Namun, dalam Embedded System, area memori tertentu (seperti 0x20200000 ke atas di Raspberry Pi) bukan gudang, melainkan Papan Kontrol. Kabel-kabel fisik dari kaki prosesor (Pin GPIO) disambungkan langsung ke alamat-alamat ini.

  • Menulis ke alamat ini bukan “menyimpan data”.
  • Menulis ke alamat ini berarti menekan tombol pemicu.

2. Rahasia GPSET dan GPCLR (Operasi Atomik)

Pada mikrokontroler sederhana (seperti Arduino AVR), untuk mengubah satu pin menjadi HIGH tanpa mengganggu pin lain, CPU harus melakukan tiga langkah ribet (Read-Modify-Write):

  1. Baca kondisi seluruh Port (misal 8 pin sekaligus).
  2. Ubah hanya bit yang diinginkan.
  3. Tulis kembali hasilnya.Bahayanya: Jika di tengah proses ini ada interupsi, data bisa rusak (corrupt).

Prosesor BCM2835 menggunakan pendekatan yang lebih cerdas dan aman: Pemisahan Jalur SET dan CLEAR.

Bayangkan Anda memiliki papan tombol raksasa untuk 32 lampu:

A. Register GPSET0 (Alamat ...1C) = Tombol “Nyala Saja”

Register ini khusus untuk membuat pin menjadi HIGH (1).

  • Jika Anda menulis 1 di posisi bit ke-16: Pin 16 akan dipaksa HIGH.
  • Jika Anda menulis 0 di posisi lain: Tidak ada efek apa pun.
  • Analogi: Ini seperti tombol “ON” pada remote AC. Menekan tombol ini hanya bisa menyalakan, tidak bisa mematikan.

B. Register GPCLR0 (Alamat ...28) = Tombol “Mati Saja”

Register ini khusus untuk membuat pin menjadi LOW (0).

  • Jika Anda menulis 1 di posisi bit ke-16: Pin 16 akan dipaksa LOW.
  • Analogi: Ini adalah tombol “OFF”.

Dengan metode ini, kita bisa menembak langsung target kita tanpa perlu peduli kondisi pin tetangganya. Ini disebut Operasi Atomik—cepat, efisien, dan anti-tabrakan.

3. Matematika di Balik “Kedipan”

Mari kita telusuri perjalanan data saat perintah *GPCLR0 = (1 << 16) dieksekusi untuk menyalakan LED (Active Low):

  1. Kalkulasi Alamat:CPU mengambil Base Address GPIO (0x20200000) dan menambahkan offset GPCLR0 (0x28).Hasilnya: 0x20200028. Inilah alamat target kita.
  2. Persiapan Data (Bit Shifting):Perintah (1 << 16) mengambil angka biner 1 dan menggesernya ke kiri sebanyak 16 kali.Hasilnya: …00010000 00000000 00000000 (Sebuah angka di mana hanya bit ke-16 yang bernilai 1).
  3. Eksekusi Tembakan:CPU mengirim paket data 32-bit tersebut ke alamat 0x20200028.
  4. Reaksi Hardware:
    • Kontroler GPIO di dalam chip melihat ada nilai 1 masuk di bit ke-16 pada laci “CLEAR”.
    • Kontroler memutus aliran listrik ke Pin fisik nomor 16 (Tegangan turun ke 0V).
    • Karena rangkaian LED kita terhubung ke 3.3V (Anode) dan Pin 16 (Cathode), perbedaan potensial terjadi. Arus mengalir. LED Menyala.

Sebaliknya, saat kita menulis ke GPSET0 (0x2020001C), kontroler menaikkan tegangan pin ke 3.3V. Potensial menjadi seimbang (3.3V ketemu 3.3V), arus berhenti, dan LED Mati.