[学习笔记] 【AutoChips 7801x MCU评测报告】二、EXTI

[复制链接]
1696|0
 楼主| lisingch 发表于 2020-6-18 18:52 | 显示全部楼层 |阅读模式
MCU, ps, TI, Chip, pi
      AC78013FDLA是采用ARM Cortex-M0+内核的高性能微控制器,嵌套了中断向量控制器 (NVIC) ,其具有32个可屏蔽中断通道、4个可编程优先等级。本次实验就是利用了板载的按键K6、K7产生的外部中断控制LED2、LED3的工作状态,当K6按下产生一个下降沿中断LED2点亮、当K6松开时又会产生一个上升沿中断LED2熄灭;当K7按下便产生一个下降沿中断LED3点亮,再次按下产生中断后LED3熄灭。
一、实验资源
1、AC7801x开发板;
2、AutoGen Studio 1.2.0;
3、KEIL 5.28.0.0;

4、ST-LINK2

二、资源简介
      上面提到的嵌套了中断向量控制器 (NVIC) 手册中有简要的介绍,更详细的描述还要参考《ARM Cortex™-M0+ Technical Reference Manual》第8章异常和中断。

2020-06-18_175933.png

下面是AC780x中断表:
2020-06-18_180222.png
2020-06-18_180252.png
2020-06-18_180421.png
2020-06-18_180508.png
2020-06-18_181259.png
2020-06-18_181324.png
2020-06-18_181339.png

      实验中用到了其中的“EXITx”中断,具体是哪一个还要根据实际的硬件进行确定。从AC7801x开发板原理图上可以看出K6、K7分别接在了PC6和PA11端口,外部中断向量对应EXTI3_8_IRQn和EXTI9_15_IRQn。

三、代码实现
      工程用“AutoGen Studio”创建,其中的K6(PC6)被配置成上升沿+下降沿触发中断;LED2与LED3对应的端口被配置成了输出模式;
2020-06-18_182947.png

主要代码:
  1. /** Configure pins as
  2.               * Analog
  3.               * Input
  4.               * Output
  5.               * EVENT_OUT
  6.               * EXTI
  7. */
  8. void ATC_GPIO_Init(void)
  9. {
  10.     GPIO_SetFunc(GPIOA, GPIO_PIN11, GPIO_FUN0);
  11.     GPIO_SetFunc(GPIOC, GPIO_PIN6, GPIO_FUN0);
  12.     GPIO_SetFunc(GPIOC, GPIO_PIN7, GPIO_FUN0);
  13.     GPIO_SetFunc(GPIOC, GPIO_PIN9, GPIO_FUN0);
  14.     GPIO_SetDir(GPIOA, GPIO_PIN11, GPIO_IN);
  15.     GPIO_SetDir(GPIOC, GPIO_PIN6, GPIO_IN);
  16.     GPIO_SetDir(GPIOC, GPIO_PIN7, GPIO_OUT);
  17.     GPIO_SetDir(GPIOC, GPIO_PIN9, GPIO_OUT);
  18.     GPIO_SetCallback(GPIO_PIN11, K7_Callback);
  19.     GPIO_SetCallback(GPIO_PIN6, K6_Callback);
  20.     GPIO_EnableExtInterrupt(GPIOA, GPIO_PIN11, EXTI_TRIGGER_FALLING);
  21.     GPIO_EnableExtInterrupt(GPIOC, GPIO_PIN6, EXTI_TRIGGER_RISING_FALLING);
  22.     GPIO_SetPinLevel(GPIOC, GPIO_PIN7, GPIO_LEVEL_LOW);
  23.     GPIO_SetPinLevel(GPIOC, GPIO_PIN9, GPIO_LEVEL_LOW);
  24.     GPIO_SetDrivingAbility(GPIOC, GPIO_PIN7, GPIO_DRIVING_4MA);
  25.     GPIO_SetDrivingAbility(GPIOC, GPIO_PIN9, GPIO_DRIVING_4MA);

  26.     /* EXTI interrupt init*/
  27.     NVIC_SetPriority(EXTI3_8_IRQn, 0);
  28.     NVIC_EnableIRQ(EXTI3_8_IRQn);

  29.     NVIC_SetPriority(EXTI9_15_IRQn, 0);
  30.     NVIC_EnableIRQ(EXTI9_15_IRQn);
  31. }
上述代码是GPIO端口的配置代码,其中的两行
GPIO_SetCallback(GPIO_PIN11, K7_Callback);
GPIO_SetCallback(GPIO_PIN6, K6_Callback);要根据中断回调函数名称修改一下,下面就是两个按键的回调函数:
  1. //按下K7产生下降沿电平点亮LED3;再次按下后熄灭LED3
  2. void K7_Callback(void *device, uint32_t wpara, uint32_t lpara)
  3. {
  4.                 static uint8_t LED3_flag = 1;
  5.                 if(GPIO_LEVEL_LOW == GPIO_GetPinLevel(K7_GPIO_Port, K7_Pin))
  6.                 {
  7.                                 if(LED3_flag)
  8.                                 {
  9.                                                 GPIO_SetPinBit(LED3_GPIO_Port, LED3_Pin);
  10.                                                 LED3_flag = 0;
  11.                                 }
  12.                                 else
  13.                                 {
  14.                                                 LED3_flag = 1;
  15.                                                 GPIO_ResetPinBit(LED3_GPIO_Port, LED3_Pin);
  16.                                 }
  17.                 }
  18. }

  19. //K6按下时检测到K6电平下降沿点亮LED2;K6松开时检测到K6电平上升沿熄灭LED2;
  20. void K6_Callback(void *device, uint32_t wpara, uint32_t lpara)
  21. {
  22.                 if(GPIO_LEVEL_HIGH == GPIO_GetPinLevel(K6_GPIO_Port, K6_Pin))
  23.                                 GPIO_ResetPinBit(LED2_GPIO_Port, LED2_Pin);
  24.                 if(GPIO_LEVEL_LOW == GPIO_GetPinLevel(K6_GPIO_Port, K6_Pin))
  25.                                 GPIO_SetPinBit(LED2_GPIO_Port, LED2_Pin);
  26. }


四、实验结果
      满足了实验设计。

五、实验总结
      通过实验对AC7801x中断有了初步认识,学会了EXTI外部中断的基本操作。另外网友“dengyonglei”建议将“AutoGen Studio”更新为1.3.0版本,由于本地网断了几天,这个实验在之前已经完成,所以还是按1.2.0版本进行了描述。在此向@dengyonglei 表示感谢!

六、附件
GPIO.rar (952.38 KB, 下载次数: 8)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

99

主题

15007

帖子

19

粉丝
快速回复 在线客服 返回列表 返回顶部