MQX在输入引脚示例代码/教程上配置中断

时间:2014-03-18 14:30:19

标签: mqx

我是freescale MQX的新手,我尝试使用MQX功能在输入引脚上设置中断(以防我们想要更改MPU)。我找不到任何好的教程......有人可以指点我的方向吗? Thanx

1 个答案:

答案 0 :(得分:1)

让我们在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;

获取针脚端口的基指针,并设置适当的mux选项(可在芯片参考手册中找到)。

//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)
}

现在注册针脚的回调

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
}

完成! 试着把它们放在一起。