飞思卡尔8位单片机MC9S0814程序USB口初始化与数据的收发编程.doc

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

《飞思卡尔8位单片机MC9S0814程序USB口初始化与数据的收发编程.doc》由会员分享,可在线阅读,更多相关《飞思卡尔8位单片机MC9S0814程序USB口初始化与数据的收发编程.doc(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: JSR handleO

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

3、T B_ENABLE2,UCR3 ;允许端点2 BSET 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数据寄存器中的数据(也就是设备请求),分析这些数据,判断是什么类型的设备请求,然后转入相应的设备请求子程序中执行。举例说明:若是取描述符请求,则子程序将相应描述符写到端点0数据寄存

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

5、,也就是说上面介绍的所有寄存器的英文名,如UDDR、UIR0,可以直接使用。对USB进行初始化,主要是对USB寄存器的设置,在主程序的初始化时,调用如下的初始化程序:MOV #$80,UADDR ;允许USB模块,初始地址为0MOV #$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 ;清UIR

6、1中所有的标志位BSET B_ENABLE1,UCR3 ;允许端点1BSET B_ENABLE2,UCR3 ;允许端点2BSET B_TXD0IE,UIR0 ;允许端点0发送数据产生中断BSET B_RX0E,UCR0 ;允许端点0接收数据(2)发送数据JB8用Endpoint1端口来发送数据。当JB8要发送数据时,先将数据放入端点1输出缓冲区中,置控制寄存器UCR1中的TES1Q位(第7位)、TX1E位和发送数据大小位TP1SIZ0TP1SIZ3(第0位到第3位),TES1Q位为端点1输出序列位,为数据的校验而设的,置为1表示端点1发送的下一个包为DATA1包,置为0表示端点1发送的下一个包

7、为DATA0包,TP1SIZ0TP1SIZ3是用来设发送字节的个数,然后将UCR2 的BM_RX2E位(第5位)置1,允许端点1输出,然后程序不断检测中断寄存器UIR1中的TXD1F位(第3位), 该位为端点1输出标志位,当存放在端点1输出缓冲区中的数据被送出,并且一个从主机发送的ACK握手包被接收到,该位被置为1,当该位被置为1后,禁止端点1输出,即将UCR2 的BM_RX2E位置0,然后必须要通过写“1”到TXD1FR位(第3位),将该位清零。查询方式发送数据的子程序如下*-*功能:通过USB向PC发送TxSize个数据*入口: TxSize:数据个数 * TxBuffer:发送数据缓冲区

8、*出口:无*占用寄存器:A*内部调用:*说明:调用完后,TxSize和TxBuffer缓冲区中数据不变*-*putUSB: MOV #$00,UIR2;从TxBuffer的8个数据放到UE1D0-UE1D7,但只有前TxSize个数据有用 LDA TxBuffer STA UE1D0 LDA TxBuffer+1 STA UE1D1 LDA TxBuffer+2 STA UE1D2 LDA TxBuffer+3 STA UE1D3 LDA TxBuffer+4 STA UE1D4 LDA TxBuffer+5 STA UE1D5 LDA TxBuffer+6 STA UE1D6 LDA TxB

9、uffer+7 STA UE1D7 ;使得UCR1的低四位存放要发送的数据个数TxSize LDA UCR1 AND #$F0 ADD TxSize STA UCR1 ;将UCR1的第B_T1SEQ位取反 DATA0/1切换 BRSET B_T1SEQ,UCR1,putUSB0 BSET B_T1SEQ,UCR1 BRA PutUSB2putUSB0: BCLR B_T1SEQ,UCR1PutUSB2: BSET B_TX1E,UCR1 BRCLR B_TXD1F,UIR1,* ;等待PC机请求发送 BCLR B_TX1E,UCR1 ;禁止端点1发送 BSET B_TXD1FR,UIR2 ;清

10、除端点1发送完成标志 RTS (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则等待,直

11、到该位为1,若为1,则将RX2E位置0,RXD2FR位置1,以清RXD2F位,然后取状态寄存器USR1中的RP2SIZ0RP2SIZ3(第0位到第3位),这几位所表示的值等于USB要接收的数据的个数,接下来读出USB端点2数据寄存器中的数据;读完数据后,置控制寄存器UCR2中的RX2E位。查询方式接收数据的程序如下:*-*功能:通过USB从PC接收RxSize个数据 *入口:RxBuffer(接收数据缓冲区)的首地址 *出口:RxSize,接收的数据个数 * RxBuffer,接收到的数据*占用寄存器:A、HX*说明:RxSize的值不变*-*getUSB: PSHH PSHXgetUSB0: BRCLR B_RXD2F,UIR1,* ;等待PC机发送来数据 BCLR B_RX2E,UCR2 ;禁止端点2接收 MOV #$00,UIR2 BSET B_RXD2FR,UIR2 ;清除接收中断标志 ;首先检查接收到的数据个数是否正确,不对则重新等待 LDA USR1 AND #$0F STA RxSize ;将UE2D0-UE2D7中的8个数据存入RxBuffer LDHX #UE2D0 LDA ,X STA RxBuffer LDHX #UE2D1 LDA ,X STA RxBuffer+1 LDHX #UE2D2 LDA ,X STA RxBuffer+2

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

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

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