基于ASF的SAMD21非预定义引脚外部中断配置方法咨询
问题
我正在学习使用ASF(Atmel Software Framework)对Atmel SAMD系列器件进行编程,尝试开发一个简单的中断测试应用。参考了Microchip官方的外部中断示例后,发现示例使用了板载预定义引脚的宏BUTTON_0_EIC_PIN、BUTTON_0_EIC_MUX和BUTTON_0_EIC_LINE来配置外部中断,但我需要为非预定义的普通引脚(比如连接到EXTINT[2]中断通道的PA18引脚)配置中断,不清楚该如何替换这三个宏。
示例代码如下:
void configure_extint_channel(void) { struct extint_chan_conf config_extint_chan; extint_chan_get_config_defaults(&config_extint_chan); config_extint_chan.gpio_pin = BUTTON_0_EIC_PIN; config_extint_chan.gpio_pin_mux = BUTTON_0_EIC_MUX; config_extint_chan.gpio_pin_pull = EXTINT_PULL_UP; config_extint_chan.detection_criteria = EXTINT_DETECT_BOTH; extint_chan_set_config(BUTTON_0_EIC_LINE, &config_extint_chan); }
解决方案
针对PA18引脚(连接EXTINT[2]通道),直接替换三个宏为对应的值即可,具体对应关系和含义如下:
BUTTON_0_EIC_PIN替换为PIN_PA18
ASF中通用GPIO引脚的命名规则为PIN_P<端口号><引脚号>,端口号用大写字母(A/B/C等),引脚号为两位数字,直接对应硬件引脚标识。BUTTON_0_EIC_MUX替换为MUX_PA18A_EIC_EXTINT2
SAMD系列引脚的复用功能由MUX宏定义,格式为MUX_P<端口号><引脚号><功能组>_<外设>_<通道>。PA18对应EXTINT2的复用功能为MUX_PA18A_EIC_EXTINT2,其中A表示该引脚的第一组复用功能(部分引脚有多组复用选项,需参考器件datasheet的引脚复用表确认)。BUTTON_0_EIC_LINE替换为2
该参数对应外部中断的通道号,EXTINT[2]的通道号直接用数字2即可。
替换后的完整代码如下:
void configure_extint_channel(void) { struct extint_chan_conf config_extint_chan; extint_chan_get_config_defaults(&config_extint_chan); config_extint_chan.gpio_pin = PIN_PA18; config_extint_chan.gpio_pin_mux = MUX_PA18A_EIC_EXTINT2; config_extint_chan.gpio_pin_pull = EXTINT_PULL_UP; config_extint_chan.detection_criteria = EXTINT_DETECT_BOTH; extint_chan_set_config(2, &config_extint_chan); }
通用配置规则
如果要配置其他引脚,遵循以下步骤:
- 确认引脚对应的EXTINT通道:查看器件datasheet的引脚描述,找到引脚关联的
EXTINTx通道号 - 构造引脚宏:按照
PIN_P<端口><引脚号>格式编写,比如PB05对应PIN_PB05 - 构造复用宏:参考datasheet的引脚复用表,找到该引脚对应EXTINT通道的MUX定义,格式通常为
MUX_P<端口><引脚号><功能组>_EIC_EXTINT<通道号> - 中断通道号直接使用EXTINT后的数字
内容的提问来源于stack exchange,提问作者aulven

