KSDK USB 例程分析
在USB example里面文件:
lite为精简版,省略了很多USB枝干上的功能,保留了USB通讯部分的主干功能,我使用的是全功能版。
函数 BOARD_InitPins()中,主要是PORT以及GPIO相关的初始化。
- 使能PORT的时钟,当外设时钟没有打开时,程序不能读出外设寄存器的值,同时也不能使用外设。
- 通过PORT设置GPIO引脚功能,此处为设置LPUART功能。芯片手册P115。
- 将键盘涉及到的GPIO引脚统统都设为GPIO引脚(自己定义的函数)。
- 进行UART相关配置。
- 将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键值,这里只是演示,所以若是要实现真正的产品,那是必须要把这段代码注释掉,来从新写一段新的功能函数代码的。
本文标题:KSDK USB 例程分析
文章作者:小师
发布时间:2018-09-22
最后更新:2022-05-04
原始链接:chunlife.top/2018/09/22/KSDK USB 例程分析/
版权声明:本站所有文章均采用知识共享署名4.0国际许可协议进行许可