在USB example里面文件:
lite为精简版,省略了很多USB枝干上的功能,保留了USB通讯部分的主干功能,我使用的是全功能版。
函数 BOARD_InitPins()中,主要是PORT以及GPIO相关的初始化。
1、使能PORT的时钟,当外设时钟没有打开时,程序不能读出外设寄存器的值,同时也不能使用外设。
2、通过PORT设置GPIO引脚功能,此处为设置LPUART功能。芯片手册P115。
3、将键盘涉及到的GPIO引脚统统都设为GPIO引脚(自己定义的函数)。
4、进行UART相关配置。
5、将USB 键盘对应的相关引脚都设置为输入引脚。
BOARD_BootClockRUN(),设置芯片时钟为48MHZ,总线时钟为24MHZ。
BOARD_InitDebugConsole(),主要是初始化UART相关的配置,例入波特率等等。
USB_DeviceApplicationInit(),这个函数很重要,应用初始化,这里的设置关乎于后面程序的成功与否,不过这里是KSDK已经实现了的,我们仅仅是需要做一下了解即可。
使能USB工作时钟。
这段代码是由宏定义给包裹起来的,根据注释可以粗略判断出,主要是针对KHCI USB中的RAM特定的,将RAM里面的数据全部清0。
对composite结构体进行简单的初始化。
USB_DeviceClassInit,这个函数比较重要,在上一个步骤中被初始化的g_UsbDeviceComposite.deviceHandle,将被在这个函数中重新赋予新的含义,里面设计到很多函数指针,推荐使用source insight可以看得清楚些。
另外,我这里将Mouse的相关函数给屏蔽掉了,因为我需要实现的是Keyboard。
USB_DeviceClassInit
configList也就是g_UsbDeviceCompositeConfigList
可以看到USB_DeviceHidKeyboardCallback显然是个很重要的主,我们进去look look。
从这个函数里面又会碰到另一个很重要的函数,USB_DeviceHidKeyboardAction(),这个函数里面也就是KSDK中需要我们自己写的用户处理操作函数。
这个案例默认键盘是不断发出PAGEUP和PAGEDOWN键值,这里只是演示,所以若是要实现真正的产品,那是必须要把这段代码注释掉,来从新写一段新的功能函数代码的。