网站大量收购独家精品文档,联系QQ:2885784924

[信息与通信]USB的枚举实验第二讲.ppt

  1. 1、本文档共32页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
[信息与通信]USB的枚举实验第二讲

USB的枚举编程 实验第二讲 注意 实验所需代码文件都在上次实验基础上完成 共计6个: Main.c PDIUSBD12.C UART.C PDIUSBD12.H UART.H MYTYPE.H 新建一个子目录(在你自己的工作目录下),并且讲上次的这6个文件拷贝进去 新建一个工程 将上一页说明的三个C文件添加到源代码群里面 本次课还要陆续添加文件,请按照提示进行 插入检测机制 总线是根据在D+或者D-上的高电平来判断是否有USB设备插入的,具体的做法是在设备端的D+或者D-上拉一个1.5K欧姆的电阻,关于这部分的内容请大家参考第一章。 有些接口芯片提供软连接(SoftConnect),也就是说可以通过对接口芯片的设置来控制1.5K的电阻的导通,如果导通,此时总线就会检测到有USB设备插入 PDIUSBD12芯片的SoftConnect D12芯片支持软连接控制,可以通过对D12的模式设置来使得这个内部的上拉电阻断开或者连接,从而模拟USB设备拔下或者插上的动作 D12的模式设置命令的代码是0xF3,回忆一下上次实验我们做过的,写入一个读取D12 ID的命令,那个代码是0xFD,现在我们要设置模式,那么就先给D12写一个0xF3的命令 向D12写0xF3的命令 直接调用PDIUSBD12.C中的写命令函数 D12WriteCommand(0xF3) 为了方便阅读,我们把0xF3用一个宏来表示,在PDIUSBD12.H文件中增加一个宏定义 #define D12_SET_MODE 0xF3 这步做完,表示我们要给D12设置模式了,接下来就应该把模式的代码写到D12 Set Mode 代码是0xF3,后面跟2字节数据的写入 第一字节是配置字节,第二字节是时钟分频系数 这两个字节的每一位所代表的含义可以参见下页的图示 NO LazyClock 1 表示CLKOUT不会切换到LazyClock, 0 表示CLKOUT在Suspend 脚变高之后切换到LazyClock, LazyClock频率是30KHz±40% ,编程值将不过会被总线复位所改变 时钟运行 1表示内部时钟和PLL即使在挂起状态下仍然运行,0 表示只要不需要时内部时钟晶振和PLL就停止运行为了满足严格的挂起电流要求该位需要设置为0 ,已编程的值不会被总线复位所改变 中断模式 1表示报告所有的错误和NAKing 并产生一个中断,0 表示只有OK 被报告.编程值不会被总线复位所改变 SoftConnect 1表示如果VBUS 可用上行数据上拉电阻就被连接,0 表示不连接,已编程的值不会被总线复位所改变 端点配置 该 2 位设置端点配置如下 模式 0 非同步模式 模式 1 同步输出模式 模式 2 同步输入模式 模式 3 同步输入/输出模式 时钟分频系数 该值用来表示CLKOUT 的时钟分频系数,用N 表示分频系数,那么输出频率就为48MHz/(N+1) ,通过对N的调节,可以获得不同频率的CLKOUT时钟输出,已编程的值不会被总线复位所改变 SET_TO_ONE 该位需要在任何DMA 读或写操作之前置为1,该位在上电复位值为0 复位后可将其一直设为1 仅有SOF 中断模式将该位置1 后仅当帧时钟的起始SOF 时刻引起中断的产生而不管引脚中断模式的设置状态设置DMA位5 这两个字节的取值 先看第一个字节 不考虑节电,也就是不使用懒时钟,设备不挂起,位1和位2设置为1 只当成功发送数据或者成功接收数据后才产生中断,所以位3设为0 不考虑等时传输,端点配置模式选择0,即端点1和2都工作在普通模式下,那么位6,位7都为0 因此,如果是断开USB,这个字节的值为0x06,如果是连接USB,则为0x16 第二个字节的取值:0x47 分频系数设置为7,也就是8分频,这样CLKOUT端得到6MHz的时钟频率 因为中断可能在任何时候产生,所以位7设为0 还差一个写入一字节数据的函数 之前我们学习了读D12一字节的函数,下面是写,对比一下 void D12WriteByte(uint8 Value) { D12SetDataAddr(); //设置为数据地址 D12ClrWr(); //WR置低 D12SetPortOut(); //将数据口设置为输出状态(注意这里为空宏,移植时可能有用) D12SetData(Value); //写出数据 D12SetWr(); //WR置高 D12SetPortIn(); //将数据口设置为输入状态,以备后面输入使用 } 下面编写断开和连接USB的函数 写入0xF3的命令,表示我要开始设置D12的模式 写入第一个模式字节,如果是0x06,那么是断开USB,如果是0x16,则是连接USB 写入第二个模式字节 完成 PS:在断开USB的这个过程中,

文档评论(0)

qiwqpu54 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档