标签:
#ifndef _EXTI_H_ #define _EXTI_H_ typedef enum exti_cfg { zero_down = 0x08u, //低电平触发,内部下拉 rising_down = 0x09u, //上升沿触发,内部下拉 falling_down = 0x0Au, //下降沿触发,内部下拉 either_down = 0x0Bu, //跳变沿触发,内部下拉 one_down = 0x0Cu, //高电平触发,内部下拉 //用最高位标志上拉和下拉 zero_up = 0x88u, //低电平触发,内部上拉 rising_up = 0x89u, //上升沿触发,内部上拉 falling_up = 0x8Au, //下降沿触发,内部上拉 either_up = 0x8Bu, //跳变沿触发,内部上拉 one_up = 0x8Cu //高电平触发,内部上拉 } exti_cfg; //外部中断初始化 void exti_init(PORTx, u8 n, exti_cfg); #endif
#include "common.h" #include "gpio.h" #include "exti.h" /************************************************************************* * 函数名称:exti_init * 功能说明:EXTI外部GPIO中断初始化 * 参数说明:PORTx 端口号(PORTA,PORTB,PORTC,PORTD,PORTE) * n 端口引脚 * exti_cfg 触发选项和上拉下拉选项 * 函数返回:无 *************************************************************************/ void exti_init(PORTx portx, u8 n, exti_cfg cfg) { SIM_SCGC5 |= (SIM_SCGC5_PORTA_MASK << portx); //开启PORTx端口 PORT_PCR_REG(PORTX[portx], n) = PORT_PCR_MUX(1) | PORT_PCR_IRQC(cfg & 0x7f ) | PORT_PCR_PE_MASK | ((cfg & 0x80 ) >> 7); // 复用GPIO , 确定触发模式 ,开启上拉或下拉电阻 GPIO_PDDR_REG(GPIOx[portx]) &= ~(1 << n); //输入模式 enable_irq(portx + 87); //使能PORT中断,PORTA的ISR中断号为87 }
这部分的API不能指定中断函数= =,所以暂时搁置不用。
标签:
原文地址:http://www.cnblogs.com/BlueMountain-HaggenDazs/p/4993949.html