#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 RCC_IOPAEN_R (*(volatile unsigned int*)(RCC_BASE+IOPAEN_R_OFFSET))
#define GPIOAEN (1U<<0)
#define MODE_R_OFFSET (0x00UL)
#define GPIOA_MODE_R (*(volatile unsigned int*)(GPIOA_BASE + MODE_R_OFFSET))
#define OD_R_OFFSET (0x14UL)
#define GPIOA_OD_R (*(volatile unsigned int*)(GPIOA_BASE + OD_R_OFFSET))
#define PIN5 (1UL<<5)
#define LED_PIN PIN5
void setup()
{
/*1.Enable clock to access the GPIOA port*/
RCC_IOPAEN_R |=GPIOAEN;
/*2. Set PIN5 as output*/
GPIOA_MODE_R |=(1<<10);
GPIOA_MODE_R &=~(1<<11);
while(1)
{
// toggle the LED
GPIOA_OD_R ^=LED_PIN ;
for(long i=0;i<1000000;i++);
}
}
void loop()
{
}