- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
14.3.7 USB口初始化与数据的收发编程
在 handleSETUP 子程序中,首先取得端点 0数据寄存器中的数据(也就是设备请求 , 分析这些数据, 判断是什么类型的设备请求, 然后转入相应的设备请求子程序中执行。 举例 说明:若是取描述符请求, 则子程序将相应描述符写到端点 0数据寄存器中准备发送; 若是 设置地址, 则相应的子程序不设置新地址, 而是等到下一个端点 0的 IN 中断中进行设置新 地址;在 handleOUT0子程序中,由于端点 0的 OUT 事务仅仅是作为标准设备请求的状态 阶段,所以该子程序只是对一些标志位进行设置;在 handleIN0子程序中,也要先判断当前 执行的是什么设备请求, 然后执行相应的操作。如:若是取描述符请求,则将相应描述符写 到端点 0数据寄存器中准备发送;若是设置地址,则向地址寄存器中写入新地址。
下面我们主要讲解端点 1和端点 2利用查询方式发送和接收数据的编程方法, 包括 USB 初始化、发送字节和接收字节。
(1 USB 初始化
以下用到的有关口地址定义在头文件 JB8.H 中定义, 也就是说上面介绍的所有寄存器的 英文名,如 UDDR 、 UIR0,可以直接使用。
对 USB 进行初始化, 主要是对 USB 寄存器的设置, 在主程序的初始化时,调用如下的 初始化程序:
MOV #$80,UADDR ; 允许 USB 模块,初始地址为 0
MOV #$00,UCR0 ; 将 UCR0寄存器复位
MOV #$00,UCR1 ; 将 UCR1寄存器复位
MOV #$00,UCR2 ; 将 UCR2寄存器复位
MOV #$44,UCR3 ; 清 TX1ST 位,允许内部上拉
MOV #$00,UCR4 ; 将 UCR4寄存器复位
MOV #$00,UIR0 ; 将 UIR0寄存器复位 , 端点 1和端点 2都不允许中断
MOV #$FF,UIR2 ; 清 UIR1中所有的标志位
BSET B_ENABLE1,UCR3 ; 允许端点 1
BSET B_ENABLE2,UCR3 ; 允许端点 2
BSET B_TXD0IE,UIR0 ; 允许端点 0发送数据产生中断
BSET B_RX0E,UCR0 ; 允许端点 0接收数据
(2发送数据
JB8用 Endpoint1端口来发送数据。当 JB8要发送数据时,先将数据放入端点 1输出缓 冲区中, 置控制寄存器 UCR1中的 TES1Q 位 (第 7位 、 TX1E 位和发送数据大小位 TP1SIZ0~ TP1SIZ3(第 0位到第 3位 ,TES1Q 位为端点 1输出序列位,为数据的校验而设的,置为 1表示端点 1发送的下一个包为 DA TA1包, 置为 0表示端点 1发送的下一个包为 DATA0包, TP1SIZ0~TP1SIZ3是用来设发送字节的个数, 然后将 UCR2 的 BM_RX2E位 (第 5位 置 1,允许端点 1输出,然后程序不断检测中断寄存器 UIR1中的 TXD1F 位(第 3位 , 该位 为端点 1输出标志位, 当存放在端点 1输出缓冲区中的数据被送出, 并且一个从主机发送的 ACK 握手包被接收到, 该位被置为 1, 当该位被置为 1后, 禁止端点 1输出 , 即将 UCR2 的 BM_RX2E位置 0,然后必须要通过写“ 1”到 TXD1FR 位(第 3位 ,将该位清零。查询方 式发送数据的子程序如下
(3接收数据
JB8中用 Endpoint2端口来接收数据。当 JB8要接收数据时,程序要先检测中断寄存器 UIR1中的 RXD2F 位(第 4位 , 该位为端点 2数据接收标志位,当 USB 模块接收到了一 个数据包,并返回一个 ACK 握手包后,该位被置为 1,一旦所有的接收数据被读完后,软 件必须要通过写 1到中断寄存器 UIR2中的 RXD2FR 位(第 4位 ,将该位清零。为了能让 下一个数据包能被接收,控制寄存器 UCR2中的 RX2E 位(第 5位也必须置为 1,如果该 位没有被清零, 在下一个 OUT 事务中将被返回一个 NAK 握手包, 所以 JB8要接收数据前, 要先检测 RXD2F 位是否为 1,若为 0则等待,直到该位为 1,若为 1,则将 RX2E 位置 0, RXD2FR 位置 1, 以清 RXD2F 位,然后取状态寄存器 USR1中的 RP2SIZ0~RP2SIZ3(第 0位到第 3位 ,这几位所表示的值等于 USB 要接收的数据的个数,接下来读出 USB 端点 2数据寄存器中的数据;读完数据后,置控制寄存器 UCR2中的 RX2E 位。查询方式接收数
(4 PC 机方
VB 程序
图 14-13给出了
PC 机方 VB 程序的界
面。 其功能是:在 “发
送窗口”
文档评论(0)