【AT32A403A 车规MCU开发板】 外部中断输入测试
[复制链接]
测试下外部中断输入,使用开发板上的B2(USER)按键来外部中断上升沿中断测试。
一、硬件部分
1.1、B2按键连接到MCU的PA0引脚。
1.2、EXINT中断框图
二、代码生成
2.1、使用AT32 Work Bench软件来生成代码
选择PA0设置为中断输入
选择中断出发方式
使能EINT0中断
三、代码部分
3.1、eint.c
#include "main.h"
void init_eint(void)
{
gpio_init_type gpio_init_struct;
exint_init_type exint_init_struct;
crm_periph_clock_enable(CRM_IOMUX_PERIPH_CLOCK, TRUE);
crm_periph_clock_enable(CRM_GPIOA_PERIPH_CLOCK, TRUE);
/* configure the EXINT0 */
gpio_default_para_init(&gpio_init_struct);
gpio_init_struct.gpio_mode = GPIO_MODE_INPUT;
gpio_init_struct.gpio_pins = GPIO_PINS_0;
gpio_init_struct.gpio_pull = GPIO_PULL_NONE;
gpio_init(GPIOA, &gpio_init_struct);
gpio_exint_line_config(GPIO_PORT_SOURCE_GPIOA, GPIO_PINS_SOURCE0);
exint_default_para_init(&exint_init_struct);
exint_init_struct.line_enable = TRUE;
exint_init_struct.line_mode = EXINT_LINE_INTERRUPUT;
exint_init_struct.line_select = EXINT_LINE_0;
exint_init_struct.line_polarity = EXINT_TRIGGER_RISING_EDGE;
exint_init(&exint_init_struct);
nvic_priority_group_config(NVIC_PRIORITY_GROUP_4);
nvic_irq_enable(EXINT0_IRQn, 0, 0);
}
void EXINT0_IRQHandler(void)
{
if(exint_flag_get(EXINT_LINE_0) != RESET)
{
printf("exint0 中断\r\n");
exint_flag_clear(EXINT_LINE_0);
}
}
3.2、main.c
#include "main.h"
int main(void)
{
system_clock_config();
delay_init();
init_usart(115200);
init_led();
init_eint();
while(1)
{
led2_tog();
delay_ms(100);
led3_tog();
delay_ms(100);
led4_tog();
delay_ms(100);
//printf("https://bbs.eeworld.com.cn/at32a403 board uart test!\r\n");
}
}
四、测试结果
下载程序后、复位开发板,串口输出
按下按键,进入外部中断,串口打印中断内容
由于B2按键是上接模式,按下按键产生上升沿信号。
|