- 硬件回路
针对AB1565的开发板的Headset工程来讲,KEY2的事件是不能使用的,原因是AB1565芯片的GPIO2是一个功能复用脚,可以用来实现USB接口下载固件,在芯片spec的第23页,如下图所示:
因此,在开发板上,电路上默认接了个下拉电阻,如下图所示,默认装的是R1303
而在SDK中,用于的GPIO中断口需要配置为上拉状态(DVDD_IO_0,约为1.8VDC),因此这样就会导致MCU内置的上拉电阻无去把电平拉高,从而无法完成事件的有效触发。下图为KEY2对应的电路部分,从原理图中可知KEY2对应的为2号外部中断(EINT2),切连接的为GPIO2。
因此,若想要EINT2(GPIO2)正常用于按钮,需要把R1303取下,笔者操作过的板子,如下图所示:
- 软件配置
首先,需要配置工程,使其支持外部引脚的中断事件,在工程的目录下(MCU)对工程的配置文件进行调整,该文件为:
mcu\project\ab1565_ab1568_evk\apps\xxxxxx\GCC\feature65_evb.mk
工程默认的配置是关闭外部中断模块的,如下所示,把 MTK_BT_PKA_IDS_ENABLE 的值由原来的y改成n,
这样才会打开EINT_KEY_ENABLED这个功能,如下所示:
深入一步:通过查找可以发现,打开EINT_KEY_ENABLED宏后,工程就会把driver/board/component/bsp_eint_key/module.mk所含的驱动加载进来(mcu\project\ab1565_ab1568_evk\apps\xxxx\GCC\Makefile);打开该module.mk文件后,可心发现,它所编译的为GPIO外部中断事件的功能,
另外,MTK_EINT_KEY_ENABLE这个宏定义,也可以在工程的Makefile中进行添加来实现。
上面对应的功能模块打开之并把硬件回路理顺并调整后,还需要在软件中对GPIO2进行正确配置,把它配置为外部中断的功能;
SDK默认的Headset工程中,GPIO2是被用于UART_CTS的;需要修改的文件为:
mcu\project\ab1565_ab1568_evk\apps\headset_wuYin\src\boards\ab1565_evb\ept_gpio_var.c
修改后的内容为:
BSP_EINTKEY0对应的IO口及属性(暂不知别的几个值的作用)
注意:GPIO2只能对应EINT2,但在SDK中把其重命名成了BSP_EINTKEY0,使其不依赖为具体的引脚 编号 ;
从EPT配置工具中也可以看出:
EPT对GPIO口映射
同时,还需要修改GPIO0的上下拉配置,及输出输入的模式,该文件在:
mcu\project\ab1565_ab1568_evk\apps\headset_wuYin\inc\boards\ab1565_evb\ept_gpio_drv.h
IO 口的功能为EINT2
配置GPIO2为输入模式
使能GPIO2为上拉模式
禁用GPIO2的下拉模式
完成上述工作,就可以在customerized_key_config.c中使用 “EINT_KEY_0” “EINT_KEY_1”“EINT_KEY_2”等逻辑按键来定义进行UI的定义,如下图所示:
最后,重新编译工程并下载到芯片,就可以正常使用EINT2的按键了。