完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
dscr51里放的是USB描述符表,EZ-USB在重枚举阶段会读取或设置相应的描述符:
db DSCR_DEVICE_LEN ;; Descriptor lengthdb DSCR_DEVICE ;; Decriptor typedw 0002H ;; Specification Version (BCD)db 00H ;; Device classdb 00H ;; Device sub-classdb 00H ;; Device sub-sub-classdb 64 ;; Maximum packet sizedw 0B404H ;; Vendor IDdw 0410H ;; Product ID (Sample Device)dw 0000H ;; Product version IDdb 1 ;; Manufacturer string indexdb 2 ;; Product string indexdb 0 ;; Serial number string indexdb 1 ;; Number of configurations[url=][/url] 【1】db DSCR_DEVICE_LEN――bLength段 指明整个设备描述符的长度,单位字节。 【2】db DSCR_DEVICE――bDescriporType段 描述符类型值。DSCR_DEVICE=04H--设备描述符。 【3】dw 0002H――bcdUSB 表明该USB设备所遵循的USB协议版本,用bcd码表示,2字节。例如2.0版本,值为0200H,用bcd码表示,低字节在前,高字节在后,表示为0002H;同理,1.1版本,则表示为1001H。 【4】db 00H――bDeviceClass段 指明USB设备所属的设备类。 =0,表示USB各接口相互独立工作,分属不通的设备类,具体信息在接口描述符中说明; =1~FEH,表明该USB设备属于某个明确的设备类,例如04H代表显示设备; =FFH,厂商自定义的设备类。 |
|
相关推荐
|
|
3.安装开发包。工具就是Cypress USB Console了。怎么用不用我说了吧,这篇文章的主题是Cypress固件架构。
【2】好了,进入主题,固件架构。以一个3684开发包自带的例子讲解。 (1) 进入目录(个人找自己的):D:Program FilesCypressUSBExamplesFX2LPBulkloop; (2) 到D:Program FilesCypressUSBTarget文件价下把Cypress头文件Fx2.h,fx2regs.h,syncdly.h这三个头文件拷到bulkloop文件夹里。 (3) keil设置output里关掉Run User Program #1(前面的勾去掉)(别说不会用keil。。。) (4) 检查keil C51文件路径是否正确。(如果你的keil是直接装载C:Keil下,那不会有错误,否则,自行设置正确的路径。) 【3】现在可以打开bulkloop工程并编译链接正确了。 |
|
|
|
|
|
在工程下,有以下几个文件:
其中,USBJmpTb.OBJ和EZUSB.LIB基本上是每个工程都要添加的,是一些中断向量表,EZUSB的函数库等等,不用管它们。 现在重点看前面三个文件: (1) fw.c:这个文件是整个USB的固件根本(FirmWare的缩写),USB协议方面的通信都是在这里完成的,包括上电枚举,重枚举,唤醒以及调用用户自己的程序和控制命令等等。基本上,如非必要,尽量不要动这个文件的内容,也不要在里面书写你自己的任何代码。 (2) bulkllop.c:这个就是用户自己的代码书写文件(原始名称:periph.c)。我们所有的代码都在这个文件里书写。Cypress已经给我们搭好了架构。 void TD_Init(void):这个函数只会在USB启动后调用一次。在这个函数里添加你自己的初始化代码,也就是传输数据前要处理的,例如IO口配置,时钟,端点,FIFO的选择等等。 |
|
|
|
|
|
我们看bulkloop的初始化,它在USB的in,out传输启动前进行了哪些初始化:
CPU时钟频率,USB工作模式选择,端点选择,端点传输方向,FIFO大小的配置等等。 void TD_Poll(void):Poll中文意思调度,这个函数就是用户调度程序,USB会在空闲的时候反复调用该函数,所以我们把自己需要反复执行的代码放在这里。例如在bulkloop里,它就实现了反复从端点2接收上位机数据然后传给端点6,再从端点6传给上位机(4,8端点一样)。 BOOL DR_VendorCmnd(void):这个函数就是自定义命令代码的书写处。我们的Vendor命令都会写在这里,fw.c固件会自动调用我们的代码。 void IO_Init(void); //8051 IO 初始化 void REG_Init(void); //8051 寄存器初始化 BOOL TD_Suspend(void); // 挂起处理 BOOL TD_Resume(void); // 唤醒处理 |
|
|
|
|
|
功能文件,处理各种中断。例如PERIPH.C 文件。8051 一般默认只有四个中断,这显然不够USB 使用,所以CYPRESS 引入了自动向量的概念,相当于软中断,大大扩展了现有的中断数量。主要的中断有:
void ISR_Sudav(void) interrupt 0 // 收到setup 包 void ISR_Sutok(void) interrupt 0 // 收到SETUP 令牌 void ISR_Sof(void) interrupt 0 // 收到起始帧 void ISR_Ures(void) interrupt 0 // 收到RESET void ISR_Susp(void) interrupt 0 // 收到挂起信息 void ISR_Highspeed(void) interrupt 0 // 高速模式 void ISR_Ep0ack(void) interrupt 0 // 正常响应ACK void ISR_Stub(void) interrupt 0 void ISR_Ep0in(void) interrupt 0 void ISR_Ep0out(void) interrupt 0 void ISR_Ep1in(void) interrupt 0 void ISR_Ep1out(void) interrupt 0 //EP1 输入中断 void ISR_Ep2inout(void) interrupt 0 //EP2 中断 void ISR_Ep4inout(void) interrupt 0 void ISR_Ep6inout(void) interrupt 0 void ISR_Ep8inout(void) interrupt 0 void ISR_Ibn(void) interrupt 0 |
|
|
|
|
|
特别是对于接受数据,一般都在中断中完成相应处理,“中断中适合进行少量简短的操作,不适合进行复杂操作”,这句话在
此依然有效。如果要进行复杂的操作可以在TD_POLL()中进行(多数操作都是在这个函数中完成的)。 另外非常重要的一点是,中断程序的结尾应该让中断复位,允许下一次中断,有些端点的计数器也要清零并允许接受新的中断请求。例如: EP1OUTBC = 0; //清空计数 EZUSB_IRQ_CLEAR(); //USB中断复位 EPIRQ = 0x08; //允许EP1中断请求 void ISR_Ep0in(void) interrupt 0~void ISR_Ep8inout(void) interrupt 0:这几个函数是当使用端点中断传输时,中断代码的书写处,很少用。 以上,是经常会用到的几个函数;其他,基本不常用。 |
|
|
|
|
|
(4) :dscr.51:这个文件是USB描述符文件,包括了设备描述符,接口描述符,端点描述符,字符串等等。里面的英文都注释得很详细了,我就不多做介绍了,刚开始入门的时候,这个文件也不必改动。
【4】然后说下几个包含文件: (1) fx2.h:预定义宏及函数声明 (2) fx2regs.h:68013的寄存器地址定义。 (3):syncdly.h:同步延时。在其他文件里经常调用的一个函数SYNCDELAY就是这里定义的。 (4):intrins.h:C51一些数据类型及函数定义。 好了,就写到这里,搞懂每个文件的作用非常非常重要,这样,你就可以知道自己的代码书写在什么地方,遇到不明的函数,定义可以到指定的位置查询,或者想修改某个设置(例如想把端点2设成IN,端点6设成out),知道到哪个文件里去修改。 |
|
|
|
|
|
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-使用AHT20进行环境监测之AHT20传感器介绍
203 浏览 0 评论
761 浏览 0 评论
806 浏览 1 评论
基于瑞萨FPB-RA4E2智能床头灯项目——1编译环境搭建与点亮驱动ws2812全彩LED
743 浏览 0 评论
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-LCD显示图片编程示例之介绍mmap
1195 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11807 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-28 01:43 , Processed in 0.551065 second(s), Total 45, Slave 36 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号