我是飞思卡尔MQX的新手,我正在尝试使用MQX函数在输入引脚上设置中断(以防万一我们想改变MPU)。我找不到任何好的教程……谁能给我指个方向吗?谢谢
让我们在PTA5的上升沿上设置一个中断,好吗?
定义一个宏来表示你的引脚。不是很必要,但是很有帮助。
#define MY_GPIO_INT_PIN (GPIO_PORT_A|GPIO_PIN_IRQ_RISING|GPIO_PIN5)
声明一些需要的变量
PORT_MemMapPtr pctl;
GPIO_PIN_STRUCT pins[2];
MQX_FILE_PTR pin_fd;
获得引脚端口的基本指针,并设置适当的多路复用选项(在芯片参考手册中找到)。
//note: this code should be in init_gpio.c, from your bsp folder.
pctl = (PORT_MemMapPtr) PORTA_BASE_PTR;
/* PTA5 as GPIO (Alt.1) */
pctl->PCR[5] = PORT_PCR_MUX(1) ;
填充引脚结构数组。请注意,您可以一次设置多个引脚,并且需要使用GPIO_LIST_END终止数组,以便驱动程序知道在哪里停止。
pins[0] = MY_GPIO_INT_PIN;
pins[1] = GPIO_LIST_END;
作为一个半POSIX兼容的操作系统,MQX上几乎任何东西都被视为文件。让我们为你的pin打开一个文件处理程序:
pin_fd = fopen("gpio:input", (char*)pins);
检查是否一切顺利
if(NULL == pin_fd){
//something bad happened, check for error with ferror(fd)
}
现在为你的pin注册回调
void pin_int_callback(void* data){
//interrupt handle code goes here
}
if(IO_OK != ioctl(pin_fd, GPIO_IOCTL_SET_IRQ_FUNCTION, (void*)pin_int_callback)){
//something bad happened registering your callback
}
完成了!