usb
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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++;
}
}
三、实验结果:。