最底层
1)、usb_int.c,本文件包含两个中断服务函数CTR_LP()和CTR_HP(),在接收发送中断时使用这两个函数进行处理,这两个函数又调用各个USB端点处理函数,端点处理函数由用户自定义。
2)、usb_regs.c,本文件时硬件抽象层。它含有各种用于读取或设置USB寄存器的函数,相当于对寄存器操作方法的封装。
3)、usb_mem.c,本文件主要负责进行数据传输处理。它主要负责数据在用户区域(内存)或USB数据包缓冲区的互相转移。
中间层
1)、usb_core.c,本文件主要负责USB协议管理,如USB标准请求、各种端点0的控制信息处理。
2)、usb_init.c,本文件主要包含了USB初始化的函数。
3)、usb_sil.c,本文件包含精简接口的初始化或向端点读写的操作函数。
上层
1)、usb_pwr.c,该文件中包含处理上电、掉电、挂起和恢复事件的函数。
2)、usb_istr.c,该文件中只有一个函数,即USB中断的USB_Istr函数,该函数对各类引起USB中断的事件做轮询处理。
3)、usb_desc.c,该文件包含一些与USB相关的设备描述符、配置描述符等,以数组形式存储,在USB主机请求的时候这些信息将发送给主机。
5)、usb_prop.c,该文件用于实现相关设备的USB协议,如初始化、SETUP包、IN包、OUT包等。
6)、usb_endp.c,本文件包含端点收、发送的处理函数,由用户根据不同的USB设备进行不同的定义。
USB的应用软件在这三层上,在不同的USB应用中,用户可能需要对USB固件库的上层部分文件配置进行修改(主要为usb_prop.c何usb_endp.c文件)。而中间层何底层封装的非常好,对
这些文件用户是不需要进行改动的。
上一篇:如何使用ST官方库文件中的例子程序
下一篇:移植STM32固件库用于HID双向通信
推荐阅读
史海拾趣
在XX年代中期,Equator迎来了一个重要的转折点——被Pixelworks公司收购。Pixelworks是一家在显示图像处理领域具有领先地位的公司,其产品线广泛,包括用于各种显示设备的图像处理芯片和软件。与Pixelworks的合并使Equator获得了更广阔的市场和资源支持,加速了其技术和产品的发展。合并后,Equator继续专注于视频处理技术的研发,并与Pixelworks共同推出了多款创新产品。
随着全球化趋势的加强,Coiltronics公司开始将目光投向国际市场。公司制定了一系列国际化战略,包括在海外市场设立分支机构、与当地企业合作等。通过这些举措,Coiltronics成功将其技术和产品推向国际市场,进一步扩大了公司的业务范围。同时,国际化战略也带来了公司管理、文化等方面的变革,为公司的长远发展注入了新的活力。
随着ETIC的产品在市场上逐渐获得认可,公司面临着市场拓展的挑战。为了扩大市场份额,ETIC决定进入国际市场。他们首先选择了亚洲市场作为突破口,通过深入了解当地市场需求和竞争环境,制定了一系列有针对性的营销策略。经过几年的努力,ETIC成功地在亚洲市场建立了稳定的客户基础,并逐渐将业务拓展到了欧洲和北美市场。
在过去的四十年中,Hammond将业务重心扩展到了美国和国际市场。通过在全球各地设立办事处和建立分销网络,Hammond成功地将其产品和服务推广到了世界各地。这一战略转型不仅极大地提升了Hammond的品牌影响力,还为其带来了更加广阔的市场空间和增长潜力。
近年来,电子行业面临着技术更新换代快、市场竞争激烈等挑战。Arco Electronics公司敏锐地捕捉到了这些变化,及时调整了公司的战略方向。公司加大了对新兴技术的研发投入,如物联网、人工智能等领域,以保持技术上的领先地位。同时,公司还通过优化生产流程、提高产品质量等方式来降低成本,增强市场竞争力。
在市场竞争日益激烈的情况下,ARCOTRONICS公司始终坚持创新引领的发展理念。公司投入大量资源用于研发新产品,不断推出具有创新性和竞争力的电子产品。这些新品不仅满足了市场的多样化需求,还为公司带来了丰厚的利润回报,进一步巩固了公司在行业内的领先地位。
最近几天在家休息,以旁者的态度看现在的电源市场纷争,有感而发,把电源市场的价格竟争写了一笔。除了技术,我们还要学习其它一些东西。 不知道价格战是不是竞争中惟一能够获胜的手段?因为不但在中国,在世界上其它的地方价格战也并不罕见。 ...… 查看全部问答∨ |
根据美国电影电视工程师协会(SMPTE)、国际电联(ITU)和我国国家广电的相关定义,真正的高清视频格式目前主要有三种:720P(1280*720分辨率,16:9宽屏显示,逐行扫描/60Hz);1080i(1920*1080分辨率,16:9宽屏显示,隔行扫描/60Hz);1080P(192 ...… 查看全部问答∨ |
使用公式 :Xr·K(X)=G(X)Q(X)+R(X)( R(X)是Xr·K(X)除以G(X)的余式) 其中 K(X)是信息位 对应的 虚拟多项式,Q(X)是 按着 冗余算法 指定的 多项式, R(X)是Xr·K(X)除以G(X)的余式 这个 公式应该 是对的吧? 以K(X)=X6+X4+X3+1为 ...… 查看全部问答∨ |
|
我在wince 4.2下,修改了public/common/oak/startui/下的驱动中的startui.rc文件,但是命令行编译后,又进行重编译,在进行操作时他的对话框还是默认的大小。不知道是什么原因,请高手指教。谢谢!… 查看全部问答∨ |
小弟现在正在学tinyOS,看过现在市面上最流行的几份教材,第一个是市面上唯一的中文版的教材,学会了blink.还有发送和接受数据的两个部分。还有一份是nesC 1.1 语言参考手册, 讲tinyos的结构的。还有一份英文版的tinyOS/nesC programming reference ...… 查看全部问答∨ |
由于再过2个月,就要去公司实习,公司相关部门的工程师通知我要先开始熟悉wince系统和窗口控件设计,并了解vs2005. 我以前完全没有接触过wince操作系统,希望大家能够推荐几本适合初学者的经典书籍,并指点一些学习步骤和计划。… 查看全部问答∨ |
我想在COMBOBOX获得焦点的时候进行一些操作。我用的方法是if(GetFoucs()->GetDlgCtrlID==IDC_XXX)可是光标已经明明在COMBOBOX上了但是感觉并没有获得焦点。同样的代码放到EDIT空间或者ListBox控件上都没有问题。 求解答。谢谢各位了。… 查看全部问答∨ |
我的bsp里面有stepldr和eboot, 我想让eboot跑起来, 但把stepldr.nb1烧写到flash中后,在dnw上显示的却是乱码!!!! 这个是串口的初始代码: void Uart_Init(void) { int i; rUFCON1 = 0x0;   ...… 查看全部问答∨ |
module count4(out,reset,clk); output[3:0] out; input[3:0] reset,clk; reg[3:0] out; always @(posedge clk) begin if(reset) out<=0; else out<=out+1; end endmodul ...… 查看全部问答∨ |