#include <stdint.h> // Untuk definisi uint32_t
#define RCC_APB2ENR (*(volatile uint32_t*)0x40021018) // Alamat register RCC_APB2ENR
#define GPIOA_CRL (*(volatile uint32_t*)0x40010800) // Alamat register GPIOA_CRL
#define GPIOA_ODR (*(volatile uint32_t*)0x4001080C) // Alamat register GPIOA_ODR
#define GPIOA_IDR (*(volatile uint32_t*)0x40010808) // Alamat register GPIOA_IDR
int main(void) {
// Mengaktifkan clock untuk GPIOA
RCC_APB2ENR |= (1 << 2); // Bit ke-2 untuk GPIOA
// Konfigurasi PA0 sebagai output (Push-Pull, Low-Speed)
GPIOA_CRL &= ~(0xF << (0 * 4)); // Clear konfigurasi PA0
GPIOA_CRL |= (0x2 << (0 * 4)); // Set PA0 sebagai output push-pull
// Konfigurasi PA1 sebagai input (Pull-Down)
GPIOA_CRL &= ~(0xF << (1 * 4)); // Clear konfigurasi PA1
GPIOA_CRL |= (0x8 << (1 * 4)); // Set PA1 sebagai input dengan pull-down
while (1) {
// Membaca status tombol di PA1
if (GPIOA_IDR & (1 << 1)) { // Jika PA1 HIGH
GPIOA_ODR |= (1 << 0); // Menyalakan LED di PA0
} else {
GPIOA_ODR &= ~(1 << 0); // Mematikan LED di PA0
}
}
}