key_it.c
#include"key_it.h"
void key3_it_config()
{
RCC -> MP_AHB4ENSETR |= (0x1 << 5);
GPIOF -> MODER &= (~(0x3 << 16));
EXTI -> EXTICR3 &= (~(0xFF << 0));
EXTI -> EXTICR3 |= (0x5 << 0);
EXTI -> FTSR1 |= (0x1 << 8);
EXTI -> C1IMR1 |= (0x1 << 8);
GICD -> ISENABLER[3] |= (0x1 << 2);
GICD -> IPRIORITYR[24] &= (~(0x1F << 19));
GICD -> ITARGETSR[24] &= (~(0x3 << 16));
GICD -> ITARGETSR[24] |= (0x1 << 16);
}
void key_it_config()
{
RCC -> MP_AHB4ENSETR |= (0x1 << 5);
GPIOF -> MODER &= (~(0x3 << 18));
GPIOF -> MODER &=(~(0x3 << 14));
EXTI -> EXTICR2 &= (~(0xFF << 24));
EXTI -> EXTICR2 |= (0x5 << 24);
EXTI -> EXTICR3 &= (~(0xFF << 8));
EXTI -> EXTICR3 |= (0x5 << 8);
EXTI -> FTSR1 |= (0x1 << 7);
EXTI -> FTSR1 |= (0x1 << 9);
EXTI -> C1IMR1 |= (0x1 << 7);
EXTI -> C1IMR1 |= (0x1 << 9);
GICD -> ISENABLER[3] |= (0x1 << 1);
GICD -> ISENABLER[3] |= (0x1 << 3);
GICD -> IPRIORITYR[24] &= (~(0x1F << 11));
GICD -> IPRIORITYR[24] &= (~(0x1F << 27));
GICD -> ITARGETSR[24] &= (~(0x3 << 8));
GICD -> ITARGETSR[24] |= (0x1 << 8);
GICD -> ITARGETSR[24] &= (~(0x3 << 24));
GICD -> ITARGETSR[24] |= (0x1 << 24);
GICC -> CTRL |= 0x1;
GICC -> PMR |= (0x1F << 3);
GICC -> CTRL |= 0x1;
}
void all_led_init()
{
RCC -> MP_AHB4ENSETR |= (0x3 << 4);
GPIOE -> MODER &= (~(0x3 << 20));
GPIOE -> MODER |= (0x1 << 20);
GPIOF -> MODER &= (~(0x3 << 20));
GPIOF -> MODER |= (0x1 << 20);
GPIOE -> MODER &= (~(0x3 << 16));
GPIOE -> MODER |= (0x1 << 16);
GPIOE -> MODER &= (~(0x1 << 10));
GPIOF -> MODER &= (~(0x1 << 10));
GPIOE -> MODER &= (~(0x1 << 8));
GPIOE -> OSPEEDR &= (~(0x3 << 20));
GPIOF -> OSPEEDR &= (~(0x3 << 20));
GPIOE -> OSPEEDR &= (~(0x3 << 16));
GPIOE -> PUPDR &= (~(0x3 << 20));
GPIOF -> PUPDR &= (~(0x3 << 20));
GPIOE -> PUPDR &= (~(0x3 << 16));
}
void beep_init()
{
RCC -> MP_AHB4ENSETR |= (0x1 << 1);
GPIOB -> MODER &= (~(0x3 << 12));
GPIOB -> MODER |= (0x1 << 12);
GPIOB -> MODER |= (0x1 << 6);
GPIOB -> OSPEEDR &= (~(0x3 << 12));
GPIOB -> PUPDR &= (~(0x3 << 12));
}
void fan_init()
{
RCC -> MP_AHB4ENSETR |= (0x1 << 4);
GPIOE -> MODER &= (~(0x3 << 18));
GPIOE -> MODER |= (0x1 << 18);
GPIOE -> MODER |= (0x1 << 9);
GPIOE -> OSPEEDR &= (~(0x3 << 18));
GPIOE -> PUPDR &= (~(0x3 << 18));
}
do_irq.c
#include"key_it.h"
extern void printf(const char *fmt, ...);
unsigned int i = 0;
void deley(int ms)
{
for(int i = 0; i < ms; i++)
{
for(int j = 0; j < 2000; j++);
}
}
void do_irq(void)
{
int i = 0,j = 0,k = 0;
int irqno;
printf("%d\n",irqno);
irqno = GICC -> IAR & 0x3FF;
switch(irqno)
{
case 99:
if(i == 0)
{
GPIOE -> ODR |= (0x1 << 10);
GPIOF -> ODR |= (0x1 << 10);
GPIOE -> ODR |= (0x1 << 8);
i = 1;
}
else
{
GPIOE -> ODR &= (~(0x1 << 10));
GPIOF -> ODR &= (~(0x1 << 10));
GPIOE -> ODR &= (~(0x1 << 8));
i = 0;
}
printf("KEY1\n");
GICD -> ICPENDR[3] |= (0x1 << 3);
EXTI -> FPR1 |= (0x1 << 9);
break;
case 97:
if(j == 0)
{
GPIOB -> ODR |= (0x1 << 6);
j = 1;
}
else
{
GPIOB -> ODR &= (~(0x1 << 7));
j = 0;
}
printf("KEY2\n");
GICD -> ICPENDR[3] |= (0x1 << 1);
EXTI -> FPR1 |= (0x1 << 7);
break;
case 98:
if(k == 0)
{
GPIOE -> ODR |= (0x1 << 9);
k = 1;
}
else
{
GPIOE -> ODR &= (~(0x1 << 9));
k = 0;
}
printf("KEY3\n");
GICD -> ICPENDR[3] |= (0x1 << 2);
EXTI -> FPR1 |= (0x1 << 8);
break;
}
GICC -> EOIR = irqno;
}
main.c
#include "key_it.h"
int main()
{
all_led_init();
key3_it_config();
key_it_config();
fan_init();
beep_init();
while(1)
{
}
return 0;
}