#include <stdint.h>
void delay(volatile int a) {
while(a--);
}
int main(void) {
volatile uint32_t *RCC_APB2ENR = (uint32_t*)0x40021018;
volatile uint32_t *GPIOA_CRL = (uint32_t*)0x40010800;
volatile uint32_t *GPIOA_ODR = (uint32_t*)0x4001080C;
*RCC_APB2ENR |= (1 << 2); // enable GPIOA clock
// *GPIOA_CRL &= ~(0xF << 0);
//*GPIOA_CRL |= (0x2 << 0);
//*GPIOA_CRL &= ~(0xF << 4);
//*GPIOA_CRL |= (0x2 << 4);
//*GPIOA_CRL &= ~(0xF << 8);
//*GPIOA_CRL |= (0x2 << 8);
//*GPIOA_CRL &= ~(0xF << 12);
//*GPIOA_CRL |= (0x2 << 12);
//*GPIOA_CRL &= ~(0xF << 16);
//*GPIOA_CRL |= (0x2 << 16);
//*GPIOA_CRL &= ~(0xF << 20);
//*GPIOA_CRL |= (0x2 << 20);
//*GPIOA_CRL &= ~(0xF << 24);
//*GPIOA_CRL |= (0x2 << 24);
//*GPIOA_CRL &= ~(0xF << 28);
//*GPIOA_CRL |= (0x2 << 28);
*GPIOA_CRL &=~(0XFFFFFFFF<<0);
*GPIOA_CRL |= (0X22222222<<0);
while(1) {
*GPIOA_ODR |= 0x55;
delay(500000);
*GPIOA_ODR &= ~0x55;
delay(500000);
*GPIOA_ODR |= 0xAA;
delay(500000);
*GPIOA_ODR &= ~0xAA;
delay(500000);
*GPIOA_ODR |= 0x0F;
delay(500000);
*GPIOA_ODR &= ~0x0F;
delay(500000);
*GPIOA_ODR |= 0xF0;
delay(500000);
*GPIOA_ODR &= ~0xF0;
delay(500000);
for(int i = 0; i < 8; i++) {
*GPIOA_ODR |= (1 << i);
delay(50000);
*GPIOA_ODR &= ~(1 << i);
delay(50000);
}
}
}