typedef struct
{
volatile unsigned int GPIO_MODE;
volatile unsigned int GPIO_TYPE;
volatile unsigned int GPIO_SPEED;
volatile unsigned int GPIO_PUPD;
volatile unsigned int GPIO_IDR;
volatile unsigned int GPIO_ODR;
volatile unsigned int GPIO_BSRR;
}GPIOX;
volatile GPIOX * GPIO_A = (volatile GPIOX *)0x52020000;
volatile GPIOX * GPIO_B = (volatile GPIOX *)0x52020400;
volatile GPIOX * GPIO_C = (volatile GPIOX *)0x52020800;
void SystemInit(void)
{
*(unsigned int*) 0xE000ED88=((3UL << 20U)|(3UL << 22U));
}
int main(void)
{
*(unsigned int *)0x56020C8C |= 1 << 0;
*(unsigned int *)0x56020C8C |= 1 << 1;
*(unsigned int *)0x56020C8C |= 1 << 2;
GPIO_B->GPIO_MODE &= ~(1 << 5);
GPIO_B->GPIO_MODE &= ~(1 << 4);
GPIO_B->GPIO_PUPD &= ~(1 << 5);
GPIO_B->GPIO_PUPD &= ~(1 << 4);
GPIO_B->GPIO_MODE &= ~(1 << 7);
GPIO_B->GPIO_MODE &= ~(1 << 6);
GPIO_B->GPIO_PUPD &= ~(1 << 7);
GPIO_B->GPIO_PUPD &= ~(1 << 6);
GPIO_A->GPIO_MODE &= ~(1 << 31);
GPIO_A->GPIO_MODE |= 1 << 30;
GPIO_A->GPIO_TYPE &= ~(1 << 15);
GPIO_A->GPIO_SPEED &= ~(1 << 31);
GPIO_A->GPIO_SPEED &= ~(1 << 30);
GPIO_C->GPIO_MODE &= ~(1 << 13);
GPIO_C->GPIO_MODE |= 1 << 12;
GPIO_C->GPIO_TYPE &= ~(1 << 6);
GPIO_C->GPIO_SPEED &= ~(1 << 13);
GPIO_C->GPIO_SPEED &= ~(1 << 12);
while(1)
{
if((GPIO_B->GPIO_IDR & 1 << 2) == 0)
{
GPIO_C->GPIO_ODR &= ~(1 << 6);
}
if(GPIO_B->GPIO_IDR & 1 << 2)
{
GPIO_C->GPIO_ODR |= 1 << 6;
}
if((GPIO_B->GPIO_IDR & 1 << 3) == 0)
{
GPIO_A->GPIO_ODR &= ~(1 << 15);
}
if(GPIO_B->GPIO_IDR & 1 << 3)
{
GPIO_A->GPIO_ODR |= 1 << 15;
}
}
return 0;
}