usb

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

USB人体学输入设备的实现
卓越电子1201
何珣
120910105 一.实验目的:
1、了解和掌握USB总线模块的工作原理,掌握使用PSoC3实现
USB总线模块通信的方法。

2、理解HID报告描述符的内容
二、实验步骤:
创建和配置工程:
1.在计算机上的桌面上,选择开始->所有程序-
>Cypress->PSoC Creator 2.0->PsoC Creator 2.0。

打开PSoC Creator 软件;
2.在PSoC Creator 2.0软件的主界面下,选择File-
>New->Project...;
3.在New Project窗口,选择Empty PSoC3 Design模板,并将工程命命名为SquareMouse。

选择工程保存路径,点击“OK”按钮;
修改系统时钟配置:
1.在Workspace Explorer窗口下的Source标签栏下,选择Square Mouse.cydwr,并打开该文件。

2.选择Clock标签,出现系统时钟树界面。

按照如图11.11所示的界面,配置系统时钟。

添加并配置USB文件系统USBFS:
1.拖动并且放置USBFS元件到原理图内(ComponentsCatalog->Communcation-> USBFS)。

2.双击器件原理图内的USBFS_1打开配置窗口。

3.将器件命名为USBFS_1。

4.如图11.12,选择HID Descriptor标签。

5.下一步选择Configuration Descriptor,打开图11.13的界面。

由于该工程是由总线供电,所以必须限制该设备的最大供电电流。

为设备指定合适的电流是非常重要的,这是因为每个集线器有
100mA/500mA容限。

对于这个应用来说,20mA是足够的。

6.下一步配置接口描述符。

为了实现这个目的,点击图11.13左栏的Alternate Setting 0出现图11.14所示的界面,该界面中设置Class为HID,表示和主机连接的为HID。

7.一个HID报告描述符必须和接口关联。

为了实现这个目的需要创建一个HID报告描述符。

点击图11.14对话框中的HID Descriptor 标签。

按照图11.15界面的步骤配置HID描述符。

其步骤包含:
(1) 点击“Report Descriptor”标签。

(2) 点击“Add Report”按钮。

(3) 从“HID Item Lis t”中选择一个条目。

(4) 为所选择的条目选择一个值。

(5) 点击“Add”按钮,添加一个HID条目到报告描述符中。

重复3-5步,将11.7所示的所有条目添加到HID报告描述符中。

参考下图
图11.8给出了输入条目的设置,该设置用于鼠标按键的3位数据
如图11.9所示,为了保留字节剩下的5位,在鼠标按键的高5位补零。

由于不想改变数据,因此除了设置比特0位常数外,使用相同的输入条目设置作为按键的设置。

如图11.10所示,最后的输入条目是X和Y轴信息。

由于比特位2设置成相对的,主机接收到的信息包含X和Y数据的变化,然后主机根据这个信息相应的修改光标。

8.当完成上述步骤后,点击图11.14界面左栏中的
HID Class Descriptor选项,将HID Report设置为3 Button Mouse。

9.点击图11.15界面左栏中的Endpoint Descriptor选项,在Endpoint Attribute下,进行下面的设置:
⏹将Direction设置为“IN”。

⏹将Transfer type设置为“INT”。

添加并且配置字符LCD:
1.拖动字符LCD并将其放置于原理图内(Component
Catalog->Display->Character LCD)。

2.双击原理图内的LCD_Char_1器件打开配置窗口。

3.如图11.16所示,在Basic标签内按如下方式进行配置:
⏹Name:LCD;
⏹LCD Custom Character Set:None
⏹选中Include ASCII to Number
配置引脚:
实验程序:
#include <device.h>
static int8 Mouse_Data[3] = {0, 0, 0}; //[0] = Buttons, [1] = X-Axis, [2] = Y-Axis
static uint16 Delay = 0;
void main()
{
CYGlobalIntEnable;
USBFS_1_Start(0, USBFS_1_3V_OPERATION);
while(!USBFS_1_bGetConfiguration());
USBFS_1_LoadInEP(1, Mouse_Data, 3);
LCD_Char_1_Start();
LCD_Char_1_Position(0,0);
LCD_Char_1_PrintString(" My First HID ");
for(;;)
{
while(!USBFS_1_bGetEPAckState(1));
USBFS_1_LoadInEP(1, Mouse_Data, 3);
switch (Delay){
case 128: Mouse_Data[1] = 5; //Moves mouse to right
Mouse_Data[2] = 0; //Keeps Y static
LCD_Char_1_Position(1,0);
LCD_Char_1_PrintString("Mouse Right");
break;
case 256: Mouse_Data[1] = 0; //Keeps X static
Mouse_Data[2] = 5; //Moves mouse down
LCD_Char_1_Position(1,0);
LCD_Char_1_PrintString("Mouse Down ");
break;
case 384: Mouse_Data[1] = -5; //Moves mouse to left
Mouse_Data[2] = 0; //Keeps Y static
LCD_Char_1_Position(1,0);
LCD_Char_1_PrintString("Mouse Left ");
break;
case 512: Mouse_Data[1] = 0; //Keeps X static
Mouse_Data[2] = -5; //Moves mouse up
LCD_Char_1_Position(1,0);
LCD_Char_1_PrintString("Mouse Up ");
Delay=0;
break;
default: break; }
Delay++;
}
}
三、实验结果:。

相关文档
最新文档