#include <stdio.h>
// Where is the led is connected
// Port:A
// Pin:PA5
#define PERIPH_BASE (0x40000000UL)
#define IOPORTPERIPH_OFFSET (0x10000000UL)
#define AHBPERIPH_OFFSET (0X20000UL)
#define AHBPERIPH_BASE (PERIPH_BASE + AHBPERIPH_OFFSET)
#define IOPORTPERIPH_BASE (PERIPH_BASE + IOPORTPERIPH_OFFSET)
#define GPIOA_OFFSET (0x0000U)
#define GPIOA_BASE (IOPORTPERIPH_BASE + GPIOA_OFFSET)
#define RCC_OFFSET (0x21000U)
#define RCC_BASE (AHBPERIPH_BASE + RCC_OFFSET)
#define IOPAEN_R_OFFSET (0x2CUL)
#define GPIOAEN (1U<<0)
#define PIN5 (1UL<<5)
#define LED_PIN PIN5
typedef struct {
volatile uint32_t DUMMY[12];
volatile uint32_t AHB1ENR;
}RCC_typeDef;
typedef struct
{
volatile uint32_t MODER;
volatile uint32_t DUMMY[4];
volatile uint32_t ODR;
}GPIO_typeDef;
#define GPIOA ((GPIO_typeDef *)GPIOA_BASE)
#define RCC ((RCC_typeDef *)RCC_BASE)
void setup()
{
/*1.Enable clock to access the GPIOA port*/
RCC->AHB1ENR |=GPIOAEN;
/*2. Set PIN5 as output*/
GPIOA->MODER |=(1<<10);
GPIOA->MODER &=~(1<<11);
while(1)
{
// toggle the LED
GPIOA->ODR ^=LED_PIN ;
for(long i=0;i<1000000;i++);
}
}
void loop()
{
}