本帖最后由 lyttly 于 2014-7-4 18:13 编辑
现金求CY7C63813芯片,电脑Set_Report发来的键盘灯数据,如何接收
本人用CY7C63813芯片接电脑usb口,来控制电脑键盘和鼠标,现在控制没有问题。就差无法接收电脑发来的键盘灯数据。
现在我有2种简单方法可以实现,可都有些问题,无法拿来使用。
1,直接读EP0DATA是可以读到键盘灯数据,可其它数据也在这,所以读出的数据不一定是键盘灯的。就想知道什么时候去读才是键盘灯的?
2,如果是设EP1是OUT 为输出断点,然后
USB_EnableEP(1)
if (USB_bGetEPState(1) == OUT_BUFFER_FULL)
{
EDled = EP1DATA;
USB_EnableEP(1);
}
这样是能准确读出键盘灯数据,
可我EP1键盘输入需要用,EP2鼠标输入。不知道EP1输入和输出如何同时使用。
下面是我找到的一个资料,
若要超载所供应的HID类设置报告(Set Report)请求USB_CB_SRC_h2d_cls_ifc_09,则要在USB.inc
文件内做出下列改变来启用子程序:
;@PSoC_UserCode_BODY_1@ (Do not change this line.)
;---------------------------------------------------
; Insert your custom code below this banner
;---------------------------------------------------
; NOTE: interrupt service routines must preserve
; the values of the A and X CPU registers.
; Enable an override of the HID class Set Report request.
USB_CB_SRC_h2d_cls_ifc_09: EQU USB_APP_SUPPLIED
;---------------------------------------------------
; Insert your custom code above this banner
;---------------------------------------------------
;@PSoC_UserCode_END@ (Do not change this line.)
然后,编写一个名称为APP_USB_CB_SRC_h2d_cls_ifc_09 的汇编语言子程序。设备请求的名称得自于
USB bmRequestType 和 bRequest 数值 (USB 规格的表 9-2).
此段代码是用于以上示例的汇编子程序的占位程序 (stub):
export APP_USB_CB_SRC_h2d_cls_ifc_09
APP_USB_CB_SRC_h2d_cls_ifc_09:
;Add your code here.
; Long jump to the appropriate return entry point for your application.
LJMP USBFS_InitControlWrite
分配和超越子程序要求.
分配或超越子程序最少必须能够通过一个长跳转传输 (LJMP)至下列表格中列出的端点 0 ISR 返回点中的
一点,而将控制返回给端点ISR。这项分配路径可能完全破坏A 和X 寄存器的内容,但堆栈指针 (SP)和
其它任何相关场合必须在返回控制给 ISR 之前恢复.
上面他说的
“
此段代码是用于以上示例的汇编子程序的占位程序 (stub): :
export APP_USB_CB_SRC_h2d_cls_ifc_09
APP_USB_CB_SRC_h2d_cls_ifc_09:
;Add your code here.
; Long jump to the appropriate return entry point for your application.
LJMP USBFS_InitControlWrite
”
这断代码应该写在哪里?如何去接收set_Report发来的数据?
本人愿意出现金求解。
希望大家多多帮忙看看,再搞不出来,我可能就要下岗了。
拜托大家了!
|