[活动专区] 【AT-START-F425测评】5、EXINT

[复制链接]
 楼主| lisingch 发表于 2022-3-20 14:23 | 显示全部楼层 |阅读模式
本帖最后由 lisingch 于 2022-3-21 12:41 编辑

      本次实验为外部中断测试。外部中断源为来自于PA0端口的按键,根据采集到的外部中断产生次数控制板载三颗LED产生不同的状态变化。
一、知识准备
      与外部中断关系比较密切的管理模块包括系统配置控制器(SCFG)、外部中断和事件控制器(EXINT) 。
2022-03-20_134240.bmp
2022-03-20_133810.bmp
2022-03-20_133851.bmp
      从上面图中描述可以看到,一共有22条中断线,每条中断线均可被“边沿触发”和“软件触发”并产生中断或事件。系统配置控制器(SCFG) 管理着连接到GPIO口的外部中断。
      开发板上为提供了一只用户按键,该按键一端连接至“VCC”;另一端通过“R7”至“GND”的同时并通过“R2”连接至PA0端口。当按键按下便会在"PA0"端口产生一个由低至高的电平变化信号。MCU因“PA0”端口的这一上升沿电平变化便会产生“中断”。
2022-03-20_135148.bmp

二、程序实现
      程序参考了相关例程,局部修改。
外部中断源配置:
  1. void KEY_Config(void)
  2. {
  3.   exint_init_type exint_init_struct;

  4.   crm_periph_clock_enable(CRM_GPIOA_PERIPH_CLOCK, TRUE);
  5.   crm_periph_clock_enable(CRM_SCFG_PERIPH_CLOCK, TRUE);

  6.   scfg_exint_line_config(SCFG_PORT_SOURCE_GPIOA, SCFG_PINS_SOURCE0);

  7.   exint_default_para_init(&exint_init_struct);
  8.   exint_init_struct.line_enable = TRUE;
  9.   exint_init_struct.line_mode = EXINT_LINE_INTERRUPUT;
  10.   exint_init_struct.line_select = EXINT_LINE_0;
  11.   exint_init_struct.line_polarity = EXINT_TRIGGER_RISING_EDGE;
  12.   exint_init(&exint_init_struct);

  13.   nvic_priority_group_config(NVIC_PRIORITY_GROUP_0);
  14.   nvic_irq_enable(EXINT1_0_IRQn, 0, 0);
  15. }
中断处理:
  1. void EXINT1_0_IRQHandler(void)
  2. {
  3.         static uint8_t num=0;
  4.         
  5.         exint_flag_clear(EXINT_LINE_0);

  6.         if(SET == gpio_input_data_bit_read(KEY_PORT, KEY_PIN))
  7.         {
  8.                 num++;
  9.                 if(num==4)num=0;
  10.                 switch(num)
  11.                 {
  12.                         case 0: {
  13.                                                                 at32_led_off(LED2);
  14.                                                                 at32_led_off(LED3);
  15.                                                                 at32_led_off(LED4);
  16.                                                         }break;
  17.                         
  18.                         case 1: {
  19.                                                                 at32_led_on(LED2);
  20.                                                                 at32_led_off(LED3);
  21.                                                                 at32_led_off(LED4);
  22.                                                         }break;
  23.                         
  24.                         case 2: {
  25.                                                                 at32_led_off(LED2);
  26.                                                                 at32_led_on(LED3);
  27.                                                                 at32_led_off(LED4);
  28.                                                         }break;
  29.                         
  30.                         case 3: {
  31.                                                                 at32_led_off(LED2);
  32.                                                                 at32_led_off(LED3);
  33.                                                                 at32_led_on(LED4);
  34.                                                         }break;
  35.                         default: break;
  36.                 }
  37.         }
  38. }
主程序:
  1. int main(void)
  2. {
  3.   system_clock_config();

  4.   at32_board_init();

  5.   KEY_Config();

  6.   while(1)
  7.   {

  8.   }
  9. }


三、实验结果
如题头描述。
EXINT.rar (287.24 KB, 下载次数: 4)



您需要登录后才可以回帖 登录 | 注册

本版积分规则

99

主题

15005

帖子

19

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