在USB example里面文件:

KSDK USB 例程分析

lite为精简版,省略了很多USB枝干上的功能,保留了USB通讯部分的主干功能,我使用的是全功能版。

KSDK USB 例程分析

函数 BOARD_InitPins()中,主要是PORT以及GPIO相关的初始化。

KSDK USB 例程分析

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工作时钟。

KSDK USB 例程分析

这段代码是由宏定义给包裹起来的,根据注释可以粗略判断出,主要是针对KHCI USB中的RAM特定的,将RAM里面的数据全部清0。

KSDK USB 例程分析

对composite结构体进行简单的初始化。

KSDK USB 例程分析

USB_DeviceClassInit,这个函数比较重要,在上一个步骤中被初始化的g_UsbDeviceComposite.deviceHandle,将被在这个函数中重新赋予新的含义,里面设计到很多函数指针,推荐使用source insight可以看得清楚些。

另外,我这里将Mouse的相关函数给屏蔽掉了,因为我需要实现的是Keyboard。

KSDK USB 例程分析

USB_DeviceClassInit

KSDK USB 例程分析

configList也就是g_UsbDeviceCompositeConfigList

KSDK USB 例程分析

KSDK USB 例程分析

可以看到USB_DeviceHidKeyboardCallback显然是个很重要的主,我们进去look look。

KSDK USB 例程分析

从这个函数里面又会碰到另一个很重要的函数,USB_DeviceHidKeyboardAction(),这个函数里面也就是KSDK中需要我们自己写的用户处理操作函数。

KSDK USB 例程分析

这个案例默认键盘是不断发出PAGEUP和PAGEDOWN键值,这里只是演示,所以若是要实现真正的产品,那是必须要把这段代码注释掉,来从新写一段新的功能函数代码的。

相关文章:

  • 2021-04-27
  • 2022-03-05
  • 2022-02-17
  • 2021-12-28
  • 2021-12-31
  • 2021-08-15
  • 2022-02-03
  • 2022-12-23
猜你喜欢
  • 2021-04-23
  • 2021-06-10
  • 2021-08-07
  • 2021-11-12
  • 2021-11-24
  • 2021-11-03
相关资源
相似解决方案