USB论坛-百合电子工作室USB专题站

 找回密码
 我要注册
搜索
热搜: USB学习板
查看: 5493|回复: 2

版主能否提供只一个中断输入的例子程序

[复制链接]

4

主题

0

好友

42

积分

产品用户

Rank: 4

发表于 2015-8-28 17:55:46 |显示全部楼层
版主能否提供只一个中断输入的例子程序,键盘的,键盘只有A-H简单几个按键输入。
谢谢。



回复

使用道具 举报

6

主题

0

好友

1063

积分

管理员

Rank: 9Rank: 9Rank: 9

发表于 2015-8-28 18:12:54 |显示全部楼层
其实本站的USB学习板配套光盘里有个实例只需要小小的修改就可以,以《自定义HID设备(读写HID)-温度采集实例》为例:

报告描述符修改为:
[code=cpp]code char ReportDescriptor[21] = {      
    0x06,0x00,0xFF,             //USAGE_PAGE (Vendor Defined Page 1)        
    0x09,0x01,              //USAGE (Vendor Usage 1)        
    0xA1,0x01,              //COLLECTION (Application)        
      
    0x19,0x01,              //(Vendor Usage 1)              
    0x15,0x00,              //LOGICAL_MINIMUM (0)        
    0x26,0xFF,0x00,             //LOGICAL_MAXIMUM (255)        
    0x75,0x08,              //REPORT_SIZE (8)        
    0x95,0x02,              //REPORT_COUNT (2)        
    0x81,0x02,              //INPUT (Data,Var,Abs)   
      
    0xC0                    // END_COLLECTION      
};  [/code]

由于修改了报告描述符,所以定义也变了,在Descriptor.h里,内容如下:
extern code char ReportDescriptor[21];

修改端点描述符,因为端点描述符配置描述符(第二次请求时将端点描述符将被一齐请求),内容如下:
[code=cpp]code USB_DESCRIPTOR usb_descr =
{
//配置描述符
{
        sizeof(USB_CONFIGURATION_DESCRIPTOR),                        //配置描述符长度,= 09H
        USB_CONFIGURATION_DESCRIPTOR_TYPE,                        //配置描述符类型,= 02H
        CONFIG_DESCRIPTOR_LENGTH,0x00,                                //描述符总长度, = 002EH
        1,                                                        //只支持1个接口
        1,                                                        //配置值
        0,                                                        //字符串描述符指针(无)
//        0x60,                                                        //自供电,支持远程唤醒
        0x80,                                                        //总线供电
        0x32                                                        //最大功耗(100mA)
},
//接口描述符
{
        sizeof(USB_INTERFACE_DESCRIPTOR),                        //接口描述符长度,= 09H
        USB_INTERFACE_DESCRIPTOR_TYPE,                                //接口描述符类型,= 04H
        0,                                                        //接口数,只有1个
        0,                                                        //可选配置,只有1个
        NUM_ENDPOINTS,                                                //除端点0的端点索引数目,= 02H
//        USB_CLASS_CODE_TEST_CLASS_DEVICE,                        //测试设备类型,= 0DCH
        0x03,                                                      //人机接口设备(HID)类
//        USB_SUBCLASS_CODE_TEST_CLASS_D12,                        //子类代码,= 0A0H        
        1,                                                        //使用的子类:(支持boot)
//        USB_PROTOCOL_CODE_TEST_CLASS_D12,                        //协议代码,= 0B0H
          2,                                                        //bInterfaceProtocol为2代表鼠标
        0                                                                                        //字符串描述符索引
},
//hid_descriptor
{
        sizeof(USB_HID_DESCRIPTOR),                                                     //HID描述符的字节数大小 0x09
        USB_HID_DESCRIPTOR_TYPE,                                //HID描述符类型编号0x21
        SWAP16(0x0110),                                                                                                                                                                        //协议版本,= 1.10
        0x21,                                                   //固件的国家地区代号,0x21为美国
        NUM_SUB_DESCRIPTORS,                                    //下级描述符的数量0x01
        USB_REPORT_DESCRIPTOR_TYPE,                             //下级描述符为报告描述符0x22
        SWAP16(sizeof(ReportDescriptor)),               //下级描述符的长度
},

//端点2输入
        {
                sizeof(USB_ENDPOINT_DESCRIPTOR),                //端点描述符长度,= 07H
                USB_ENDPOINT_DESCRIPTOR_TYPE,                                //端点描述符类型,= 05H
                0x82,                                                                                //端点2 OUT
                USB_ENDPOINT_TYPE_INTERRUPT,                                                //中断传输,= 03H
                EP2_PACKET_SIZE,0x00,                                                                //端点最大包的大小,= 0040H
                0x0A                                                                                                                                //中断扫描时间:设置为1ms
        }
};[/code]
因为CONFIG_DESCRIPTOR_LENGTH是配置描述符的长度,修改过后长度改变了,所以需要在Descriptor里找到CONFIG_DESCRIPTOR_LENGTH是怎么定义的,如下:
[code=cpp]#define CONFIG_DESCRIPTOR_LENGTH    sizeof(USB_CONFIGURATION_DESCRIPTOR) + sizeof(USB_INTERFACE_DESCRIPTOR) + sizeof(USB_HID_DESCRIPTOR) + (NUM_ENDPOINTS * sizeof(USB_ENDPOINT_DESCRIPTOR))[/code]

发现其实我们需要修改NUM_ENDPOINTS的值,修改如下:
[code=cpp]#define NUM_ENDPOINTS        1[/code]
但是还没完,因为去掉了一个端点,所以需要修改USB_DESCRIPTOR结构定义,内容如下:
[code=cpp]typedef struct _USB_DESCRIPTOR {
        USB_CONFIGURATION_DESCRIPTOR ConfigDescr;                //配置描述符
        USB_INTERFACE_DESCRIPTOR InterfaceDescr;                //接口描述符
        USB_HID_DESCRIPTOR HidDescr;                                        //HID描述符
//        USB_ENDPOINT_DESCRIPTOR EP1_TXDescr;                        //端点1输入描述符
//        USB_ENDPOINT_DESCRIPTOR EP1_RXDescr;                        //端点1输出描述符
        USB_ENDPOINT_DESCRIPTOR EP2_TXDescr;                        //端点2输入描述符
//        USB_ENDPOINT_DESCRIPTOR EP2_RXDescr;                        //端点2输出描述符
} USB_DESCRIPTOR, *PUSB_DESCRIPTOR;[/code]

至此应该修改完了
回复

使用道具 举报

6

主题

0

好友

1063

积分

管理员

Rank: 9Rank: 9Rank: 9

发表于 2015-8-28 18:27:43 |显示全部楼层
其实只修改报告描述符描述符就可以,没用的端点不用管它,
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 我要注册

USB开发网 (渝ICP备09006681号-4)

GMT+8, 2022-8-14 03:03 , Processed in 0.060386 second(s), 27 queries .

百合电子工作室版权所有
回顶部