youzizhile

【嵌入式】coocox系统在项目中的应用之二

0
阅读(3224)

今天终于调好了新唐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点亮,继续等待下一次按键,这样的话就不用查询当前按键的状态了,可以中断执行按键的响应操作,提高效率。

附件中为当前的程序。


Baidu
map