#include <stdint.h>
// registradores RCC - habilita clock
#define RCC_BASE_ADDRESS 0X40021000UL
#define RCC_IOPENR_OFFSET 0X34UL
#define RCC_IOPENR (*(volatile uint32_t*)(RCC_BASE_ADDRESS + RCC_IOPENR_OFFSET))
// registradores Gpio
#define GPIOA_BASE_ADDRESS 0X50000000UL
#define GPIOA_MODER_OFFSET 0X00L
#define GPIOA_MODER (*(volatile uint32_t*)(GPIOA_BASE_ADDRESS + GPIOA_MODER_OFFSET))
#define GPIOA_ODR_OFFSET 0X14UL
#define GPIOA_ODR (*(volatile uint32_t*)(GPIOA_BASE_ADDRESS + GPIOA_ODR_OFFSET))
#define GPIOA_IDR_OFFSET 0X10UL
#define GPIOA_IDR (*(volatile uint32_t*)(GPIOA_BASE_ADDRESS + GPIOA_IDR_OFFSET))
//mapeamento
#define pinoled (1U<<11)//PA8
#define bnt (1U<<13) //PA3
#define GPIOAEN (1U<<0)
int main(){
RCC_IOPENR |= GPIOAEN;
GPIOA_MODER &= ~(1U<<26); //PA3 INPUT
GPIOA_MODER &= ~(1U<<27); //PA3 INPUT
GPIOA_MODER |= (1U<<22) ;// PA8 OUTPUT
GPIOA_MODER &= ~(1U<<23); // PA8 OUTPUT
while(1){
if (GPIOA_IDR & bnt){
GPIOA_ODR |=pinoled;
}
else{
GPIOA_ODR &= ~pinoled;
}
}
}