• 按键中断


    key_it.c

    1. #include"key_it.h"
    2. void key3_it_config()
    3. {
    4. RCC -> MP_AHB4ENSETR |= (0x1 << 5);
    5. GPIOF -> MODER &= (~(0x3 << 16));
    6. EXTI -> EXTICR3 &= (~(0xFF << 0));
    7. EXTI -> EXTICR3 |= (0x5 << 0);
    8. EXTI -> FTSR1 |= (0x1 << 8);
    9. EXTI -> C1IMR1 |= (0x1 << 8);
    10. GICD -> ISENABLER[3] |= (0x1 << 2);
    11. GICD -> IPRIORITYR[24] &= (~(0x1F << 19));
    12. GICD -> ITARGETSR[24] &= (~(0x3 << 16));
    13. GICD -> ITARGETSR[24] |= (0x1 << 16);
    14. }
    15. void key_it_config()
    16. {
    17. RCC -> MP_AHB4ENSETR |= (0x1 << 5);
    18. GPIOF -> MODER &= (~(0x3 << 18));
    19. GPIOF -> MODER &=(~(0x3 << 14));
    20. EXTI -> EXTICR2 &= (~(0xFF << 24));
    21. EXTI -> EXTICR2 |= (0x5 << 24);
    22. EXTI -> EXTICR3 &= (~(0xFF << 8));
    23. EXTI -> EXTICR3 |= (0x5 << 8);
    24. EXTI -> FTSR1 |= (0x1 << 7);
    25. EXTI -> FTSR1 |= (0x1 << 9);
    26. EXTI -> C1IMR1 |= (0x1 << 7);
    27. EXTI -> C1IMR1 |= (0x1 << 9);
    28. GICD -> ISENABLER[3] |= (0x1 << 1);
    29. GICD -> ISENABLER[3] |= (0x1 << 3);
    30. GICD -> IPRIORITYR[24] &= (~(0x1F << 11));
    31. GICD -> IPRIORITYR[24] &= (~(0x1F << 27));
    32. GICD -> ITARGETSR[24] &= (~(0x3 << 8));
    33. GICD -> ITARGETSR[24] |= (0x1 << 8);
    34. GICD -> ITARGETSR[24] &= (~(0x3 << 24));
    35. GICD -> ITARGETSR[24] |= (0x1 << 24);
    36. GICC -> CTRL |= 0x1;
    37. GICC -> PMR |= (0x1F << 3);
    38. GICC -> CTRL |= 0x1;
    39. }
    40. void all_led_init()
    41. {
    42. RCC -> MP_AHB4ENSETR |= (0x3 << 4);
    43. GPIOE -> MODER &= (~(0x3 << 20));
    44. GPIOE -> MODER |= (0x1 << 20);
    45. GPIOF -> MODER &= (~(0x3 << 20));
    46. GPIOF -> MODER |= (0x1 << 20);
    47. GPIOE -> MODER &= (~(0x3 << 16));
    48. GPIOE -> MODER |= (0x1 << 16);
    49. GPIOE -> MODER &= (~(0x1 << 10));
    50. GPIOF -> MODER &= (~(0x1 << 10));
    51. GPIOE -> MODER &= (~(0x1 << 8));
    52. GPIOE -> OSPEEDR &= (~(0x3 << 20));
    53. GPIOF -> OSPEEDR &= (~(0x3 << 20));
    54. GPIOE -> OSPEEDR &= (~(0x3 << 16));
    55. GPIOE -> PUPDR &= (~(0x3 << 20));
    56. GPIOF -> PUPDR &= (~(0x3 << 20));
    57. GPIOE -> PUPDR &= (~(0x3 << 16));
    58. }
    59. void beep_init()
    60. {
    61. RCC -> MP_AHB4ENSETR |= (0x1 << 1);
    62. GPIOB -> MODER &= (~(0x3 << 12));
    63. GPIOB -> MODER |= (0x1 << 12);
    64. GPIOB -> MODER |= (0x1 << 6);
    65. GPIOB -> OSPEEDR &= (~(0x3 << 12));
    66. GPIOB -> PUPDR &= (~(0x3 << 12));
    67. }
    68. void fan_init()
    69. {
    70. RCC -> MP_AHB4ENSETR |= (0x1 << 4);
    71. GPIOE -> MODER &= (~(0x3 << 18));
    72. GPIOE -> MODER |= (0x1 << 18);
    73. GPIOE -> MODER |= (0x1 << 9);
    74. GPIOE -> OSPEEDR &= (~(0x3 << 18));
    75. GPIOE -> PUPDR &= (~(0x3 << 18));
    76. }

    do_irq.c

    1. #include"key_it.h"
    2. extern void printf(const char *fmt, ...);
    3. unsigned int i = 0;
    4. void deley(int ms)
    5. {
    6. for(int i = 0; i < ms; i++)
    7. {
    8. for(int j = 0; j < 2000; j++);
    9. }
    10. }
    11. void do_irq(void)
    12. {
    13. int i = 0,j = 0,k = 0;
    14. int irqno;
    15. printf("%d\n",irqno);
    16. irqno = GICC -> IAR & 0x3FF;
    17. switch(irqno)
    18. {
    19. case 99:
    20. if(i == 0)
    21. {
    22. GPIOE -> ODR |= (0x1 << 10);
    23. GPIOF -> ODR |= (0x1 << 10);
    24. GPIOE -> ODR |= (0x1 << 8);
    25. i = 1;
    26. }
    27. else
    28. {
    29. GPIOE -> ODR &= (~(0x1 << 10));
    30. GPIOF -> ODR &= (~(0x1 << 10));
    31. GPIOE -> ODR &= (~(0x1 << 8));
    32. i = 0;
    33. }
    34. printf("KEY1\n");
    35. GICD -> ICPENDR[3] |= (0x1 << 3);
    36. EXTI -> FPR1 |= (0x1 << 9);
    37. break;
    38. case 97:
    39. if(j == 0)
    40. {
    41. GPIOB -> ODR |= (0x1 << 6);
    42. j = 1;
    43. }
    44. else
    45. {
    46. GPIOB -> ODR &= (~(0x1 << 7));
    47. j = 0;
    48. }
    49. printf("KEY2\n");
    50. GICD -> ICPENDR[3] |= (0x1 << 1);
    51. EXTI -> FPR1 |= (0x1 << 7);
    52. break;
    53. case 98:
    54. if(k == 0)
    55. {
    56. GPIOE -> ODR |= (0x1 << 9);
    57. k = 1;
    58. }
    59. else
    60. {
    61. GPIOE -> ODR &= (~(0x1 << 9));
    62. k = 0;
    63. }
    64. printf("KEY3\n");
    65. GICD -> ICPENDR[3] |= (0x1 << 2);
    66. EXTI -> FPR1 |= (0x1 << 8);
    67. break;
    68. }
    69. GICC -> EOIR = irqno;
    70. }

    main.c

    1. #include "key_it.h"
    2. int main()
    3. {
    4. all_led_init();
    5. key3_it_config();
    6. key_it_config();
    7. fan_init();
    8. beep_init();
    9. while(1)
    10. {
    11. }
    12. return 0;
    13. }

  • 相关阅读:
    《羊了个羊》微信小游戏为什么火了?
    计算机网络-应用层(应用层概述,网络应用模型(C/S模型,P2P模型),DNS域名协议)
    React TreeSelect设置默认展开项的方法
    本地link跳转ok 部署后nginx报错跳404页面的原因及解决办法
    高等教育学:态度与品德的形成
    R语言实操记录——管道(|>, %>%, %T>%, %$% 和 %<>%)
    go学习-基本知识点
    一本通 1344【最短路】
    java: java.lang.OutOfMemoryError: Java heap space报错解决办法
    【Spring】bean的创建生命周期
  • 原文地址:https://blog.csdn.net/weixin_52839062/article/details/133799019