飞思卡尔8位单片机mc9s0814程序usb口初始化与数据的收发编程

上传人:wm****3 文档编号:42281003 上传时间:2018-06-01 格式:DOC 页数:8 大小:1.08MB
返回 下载 相关 举报
飞思卡尔8位单片机mc9s0814程序usb口初始化与数据的收发编程_第1页
第1页 / 共8页
飞思卡尔8位单片机mc9s0814程序usb口初始化与数据的收发编程_第2页
第2页 / 共8页
飞思卡尔8位单片机mc9s0814程序usb口初始化与数据的收发编程_第3页
第3页 / 共8页
飞思卡尔8位单片机mc9s0814程序usb口初始化与数据的收发编程_第4页
第4页 / 共8页
飞思卡尔8位单片机mc9s0814程序usb口初始化与数据的收发编程_第5页
第5页 / 共8页
点击查看更多>>
资源描述

《飞思卡尔8位单片机mc9s0814程序usb口初始化与数据的收发编程》由会员分享,可在线阅读,更多相关《飞思卡尔8位单片机mc9s0814程序usb口初始化与数据的收发编程(8页珍藏版)》请在金锄头文库上搜索。

1、14.3.7 USB 口初始化与数据的收发编程*-* *功能:USB 中断服务程序 *调用:handleSETUP、handleOUT0、handleIN0、initUSB *-*isrUSB:SEI ;禁止中断;判断是否是端点 0 接收到数据产生的中断,如果不是,则跳转去判断;是否是端点 0 发送数据产生中断isr1: BRCLR B_RXD0F,UIR1,isr2 ;判断是否是 SETUP 事务,如果不是则认为是 OUT 事务 BRCLR B_SETUP,USR0,outPacket JSR handleSETUP ;调用处理 SETUP 事务子程序BRA isrExitoutPacket

2、:JSR handleOUT0 ;调用处理一个普通 OUT 事务子程序BRA isrExit ;判断是否是端点 0 发送完数据产生中断,如果不是,则跳转去判断;是否是复位产生中断 isr2: BRCLR B_TXD0F,UIR1,isr5JSR handleIN0 ;调用处理端点 0 的 IN 事务处理子程序BRA isrExit;判断是否是 USB 复位产生中断,如果不是则跳出中断isr5: BRCLR B_RSTF,UIR1,isrExitBSET B_RSTFR,UIR2 ;清除 RSTF 中断标志位 jiang addJSR initUSB ;初始化 USB 系统BSET B_ENAB

3、LE1,UCR3 ;允许端点 1BSET B_ENABLE2,UCR3 ;允许端点 2BSET B_TXD0IE,UIR0 ;允许端点 0 发送数据产生中断BSET B_RXD0IE,UIR0 ;允许端点 0 接收数据产生中断BSET B_RX0E,UCR0 ;允许端点 0 接收数据 MOV #US_DEFAULT,USB_State ;USB 设备进入 Default 状态 isrExit:CLI ;开中断RTI 在 handleSETUP 子程序中,首先取得端点 0 数据寄存器中的数据(也就是设备请求) , 分析这些数据,判断是什么类型的设备请求,然后转入相应的设备请求子程序中执行。举 例

4、说明:若是取描述符请求,则子程序将相应描述符写到端点 0 数据寄存器中准备发送; 若是设置地址,则相应的子程序不设置新地址,而是等到下一个端点 0 的 IN 中断中进行 设置新地址;在 handleOUT0 子程序中,由于端点 0 的 OUT 事务仅仅是作为标准设备请求 的状态阶段,所以该子程序只是对一些标志位进行设置;在 handleIN0 子程序中,也要先 判断当前执行的是什么设备请求,然后执行相应的操作。如:若是取描述符请求,则将相 应描述符写到端点 0 数据寄存器中准备发送;若是设置地址,则向地址寄存器中写入新地 址。下面我们主要讲解端点 1 和端点 2 利用查询方式发送和接收数据的编

5、程方法,包括 USB 初始化、发送字节和接收字节。()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 位,允许内部上拉

6、 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

7、 中的 TES1Q 位(第 7 位) 、TX1E 位和发送数据大小位 TP1SIZ0TP1SIZ3(第 0 位到第 3 位),TES1Q 位为端点 1 输出序列位,为数据的校验而 设的,置为 1 表示端点 1 发送的下一个包为 DATA1 包,置为 0 表示端点 1 发送的下一个 包为 DATA0 包,TP1SIZ0TP1SIZ3 是用来设发送字节的个数,然后将 UCR2 的 BM_RX2E 位(第 5 位)置 1,允许端点 1 输出,然后程序不断检测中断寄存器 UIR1 中的 TXD1F 位(第 3 位), 该位为端点 1 输出标志位,当存放在端点 1 输出缓冲区中的数据被 送出,并且一个从

8、主机发送的 ACK 握手包被接收到,该位被置为 1,当该位被置为 1 后, 禁止端点 1 输出,即将 UCR2 的 BM_RX2E 位置 0,然后必须要通过写“1”到 TXD1FR 位(第 3 位) ,将该位清零。查询方式发送数据的子程序如下*-*功能:通过 USB 向 PC 发送 TxSize 个数据*入口: TxSize:数据个数 * TxBuffer:发送数据缓冲区*出口:无*占用寄存器:A*内部调用:*说明:调用完后,TxSize 和 TxBuffer 缓冲区中数据不变*-*putUSB:MOV #$00,UIR2;从 TxBuffer 的 8 个数据放到 UE1D0-UE1D7,但只

9、有前 TxSize 个数据有用LDA TxBufferSTA UE1D0LDA TxBuffer+1STA UE1D1LDA TxBuffer+2STA UE1D2LDA TxBuffer+3STA UE1D3LDA TxBuffer+4STA UE1D4LDA TxBuffer+5STA UE1D5LDA TxBuffer+6STA UE1D6LDA TxBuffer+7STA UE1D7;使得 UCR1 的低四位存放要发送的数据个数 TxSizeLDA UCR1AND #$F0ADD TxSizeSTA UCR1 ;将 UCR1 的第 B_T1SEQ 位取反 DATA0/1 切换BRSET

10、 B_T1SEQ,UCR1,putUSB0 BSET B_T1SEQ,UCR1 BRA PutUSB2putUSB0:BCLR B_T1SEQ,UCR1PutUSB2:BSET B_TX1E,UCR1BRCLR B_TXD1F,UIR1,* ;等待 PC 机请求发送BCLR B_TX1E,UCR1 ;禁止端点 1 发送BSET B_TXD1FR,UIR2 ;清除端点 1 发送完成标志RTS (3)接收数据JB8 中用 Endpoint2 端口来接收数据。当 JB8 要接收数据时,程序要先检测中断寄存器 UIR1 中的 RXD2F 位(第 4 位), 该位为端点 2 数据接收标志位,当 USB

11、模块接收到了一 个数据包,并返回一个 ACK 握手包后,该位被置为 1,一旦所有的接收数据被读完后,软 件必须要通过写 1 到中断寄存器 UIR2 中的 RXD2FR 位(第 4 位) ,将该位清零。为了能 让下一个数据包能被接收,控制寄存器 UCR2 中的 RX2E 位(第 5 位)也必须置为 1,如 果该位没有被清零,在下一个 OUT 事务中将被返回一个 NAK 握手包,所以 JB8 要接收数 据前,要先检测 RXD2F 位是否为 1,若为 0 则等待,直到该位为 1,若为 1,则将 RX2E 位置 0,RXD2FR 位置 1,以清 RXD2F 位,然后取状态寄存器 USR1 中的 RP2

12、SIZ0RP2SIZ3(第 0 位到第 3 位) ,这几位所表示的值等于 USB 要接收的数据的个数, 接下来读出 USB 端点 2 数据寄存器中的数据;读完数据后,置控制寄存器 UCR2 中的 RX2E 位。查询方式接收数据的程序如下: *-*功能:通过 USB 从 PC 接收 RxSize 个数据 *入口:RxBuffer(接收数据缓冲区)的首地址 *出口:RxSize,接收的数据个数 * RxBuffer,接收到的数据*占用寄存器:A、HX*说明:RxSize 的值不变*-*getUSB:PSHHPSHXgetUSB0:BRCLR B_RXD2F,UIR1,* ;等待 PC 机发送来数据

13、BCLR B_RX2E,UCR2 ;禁止端点 2 接收MOV #$00,UIR2BSET B_RXD2FR,UIR2 ;清除接收中断标志;首先检查接收到的数据个数是否正确,不对则重新等待LDA USR1AND #$0FSTA RxSize;将 UE2D0-UE2D7 中的 8 个数据存入 RxBufferLDHX #UE2D0LDA ,XSTA RxBufferLDHX #UE2D1LDA ,XSTA RxBuffer+1LDHX #UE2D2LDA ,XSTA RxBuffer+2LDHX #UE2D3LDA ,XSTA RxBuffer+3LDHX #UE2D4LDA ,XSTA RxBu

14、ffer+4LDHX #UE2D5LDA ,XSTA RxBuffer+5LDHX #UE2D6LDA ,XSTA RxBuffer+6LDHX #UE2D7LDA ,XSTA RxBuffer+7BSET B_RX2E,UCR2 ;允许端点 2 接收PULXPULHRTS(4)PC 机方 VB 程序图 14-13 给出了 PC 机方 VB 程序的界面。其功能是:在“发送窗口”的文本框输入字 符,单击“发送”按 钮,文本框中的字符 被发送出去。任何时 候,只要 PC 机方收 到数据,则显示在 “接收窗口” 。为了 能运行该程序,读者 可以到 http:/sumcu.suda.edu. cn 下载 USB 驱动程 序以及 VB 中 USB 控 件的使用手册

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 社会民生

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号