热度 14
2013-3-9 21:46
1474 次阅读|
0 个评论
今天终于调好了新唐m0516LAN的coocox的中断INT1的回调函数,好开心。虽然对于回调函数还是有很多疑问,但是至少会应用了现在,所以赶紧分享下。 新唐的m0616LAN芯片有两个中断INT0和INT1,但都是复用的引脚P3.2和P3.3。之前虽然是在电路中把一个按键接到了p3.3之上,但是对于回调函数不懂,所以以为和普通io一样可以最中断控制使用。在DRV_GPIO.c 中发现了函数原型中的说明: “************************************************************************* if ((port == E_PORT3) ((pin == E_EINT0_PIN) || (pin == E_EINT1_PIN))) { // // P32 is EINT0, P33 is EINT1. Both of them can't be assigned to gereral P3 // interrupt *********************************************************************** 这次发现服用的io不能调用此函数,而是要单独调用int1的中断函数。找了好久终于找到了这个函数:int32_t DrvGPIO_EnableEINT(E_DRVGPIO_EXT_INT_PIN pin, E_DRVGPIO_INT_TYPE Type, E_DRVGPIO_INT_MODE Mode, EINT_CALLBACK pfEINTCallback) 其中pfEINTCallback为INT1回调函数的指针,在程序中调用此函数并且初始化p3.3为int1,程序成功执行。 DrvGPIO_InitFunction(E_FUNC_EXTINT1); DrvGPIO_EnableEINT(3,E_IO_FALLING,E_MODE_EDGE,EINT1CallBack); void EINT1CallBack(void) { CoEnterISR(); // Tell CooCox that we are starting an ISR. isr_SetFlag(KEY_***1); CoExitISR(); } 中断服务程序中的操作其实就是当INT1有中断时,置一个信号变量,传递给任务task_KEY1,然后控制GREEN LED点亮,继续等待下一次按键,这样的话就不用查询当前按键的状态了,可以中断执行按键的响应操作,提高效率。 附件中为当前的程序。