有多种M68HC08具有USB模块,它们的特性并不一定完全相同。下面以MC68HC08JB8的USB模块为例,介绍其功能和使用方法。
一、 USB模块的特性
. 支持USB 规程1.1版低速功能;
. 1.5Mbps数据速率;
. 片内3.3V稳压器;
. 端点0,具有8字节发送和8字节接收缓冲区;
. 端点1,具有8字节发送缓冲区;
. 端点2,具有8字节发送和8字节接收缓冲区;
. USB数据控制逻辑:
——控制端点0和中断端点1和2 ;
——包译码和产生;
——CRC产生和检验;
——NRZI(非归零插入)编码/译码;
——位填充。
. USB复位选择:
——内部MCU复位产生;
——CPU中断请求产生。
. 挂起和唤醒操作,支持远程唤醒;
. USB中断:
——传输中断驱动;
——唤醒中断;
——包结束中断;
——USB复位.
.STALL、NAK和ACK应答产生。
二、USB接口
USB模块具有D+ 和D- 两个I/O脚。
*** USB模块寄存器
一、USB地址寄存器UADDR,它可读可写
|
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
UADDR |
USBEN |
UADD6 |
UADD5 |
UADD4 |
UADD3 |
UADD2 |
UADD1 |
UADD0 |
复位值 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
USBEN------允许USB模块:
该位置位时,允许USB模块和USB引脚,禁止USB使用的引脚的其他功能。清零时,禁止USB响应任何令牌,禁止USB复位和USB中断,USB使用的引脚用作一般I/O脚。
1 = 允许USB功能
0 = 禁止USB功能
UADD6~UADD0------USB功能地址:
它们定义设备的USB地址。复位时为全“0”。
二、USB中断寄存器
1、UIR0—USB中断允许寄存器。它可读可写
|
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
UIR0 |
EOPIE |
SUSPND |
TXD2IE |
HXD2IE |
TXD1IE |
0 |
TXD0IE |
HXDIE |
复位值 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
EOPIE----包结束检测中断允许位:
它允许在EOPF置位时产生中断。
1 = 允许包结束检测产生中断
0 = 禁止包结束检测产生中断
SUSPND----USB挂起:
为节省电源,可置位本位,使USB在检测到USB总线上3ms无活动时进入省电方式。在置位“SUSPND”前应先清0“RESUMF”标志。
TXD2IE-----端点2发送中断允许位:
它允许在TXD 2F 置位时产生中断。
1 = 允许发送端点2 产生中断
0 = 禁止发送端点1 产生中断
RXD2IE-----端点2接收中断位:
它允许RXD 2F 置位时产生中断。
1 = 允许接收端点2产生中断
0 = 禁止接收端点2产生中断
TXD1IE-----端点1发送中断位:
它允许TXD 1F 置位时产生中断。
1 = 允许发送端点1产生中断
0 = 禁止发送端点心产生中断
TXD0IE-----端点0发送中断位:
它允许TXD 0F 置位时产生中断。
1 = 允许发送端点0 产生中断
0 = 禁止发送端点0 产生中断
RXD0IE-----端点0 接收中断:
它允许RXD 0F 置位时产生中断。
1 = 允许接收端点0 产生中断
0 = 禁止接收端点0 产生中断
2、UIR1-----USB中断标志寄存器,它只可读出和清零
|
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
UIR1 |
EOPF |
RSTF |
TXD 2F |
RXD 2F |
TXD 1F |
RESUMF |
TXD 0F |
RXD 0F |
复位值 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
EOPF-----包结束检测位:
在D+和 D—线上检测到正确的包括结束信号时置位。软件可向EOPFR位写人1来清除它。写入EOPF不影响该位。
1 = 检测到包结束信号
0 = 未检测到包结束信号
RSTF-----USB复位标志位:
在D+和 D—线上检测到正确的复位信号时置位。如系统设置寄存器(CONFIG)的“URSTD”位为零,这个复位条件可产生内部复位信号以复位CPU和其他外围控制部件(包括USB)。如URSTD置位,该置位条件将产生USB中断。
向RSTFR位写入1可清除该位。
TXD 2F -----端点2数据发送标志位:
在端点2发送缓冲区中的数据被发送出去并收到来自主机的“ACK”应答包后置位该位。在发送缓冲区已准备的下一个数据时,软件应向TXD2FR位写入1来清除该标志。为允许下一次数据包发送,也必须置位“TX2E”
如“TXD 2F ”未清零,则下一次“IN”传输时,将返回“ANK”应答包。
写入TXD 2F 不影响该位。
1 = 已执行完端点2 的发送
0 = 未执行完端点2 的发送
RXD 2F -----端点2数据接收标志位:
在USB模块收到一个数据包并发送“ACK”应答包后置位。在读走所有接收数据后,软件应向RXD2FR写入“ 1” 来清除它。为允许下一次数据包接收,软件也必须置位RX2E。
如未清除RXD 2F ,则下一次“OUT”传输时,将回“NAK”应答包。
写入RXD 2F 不影响该位。
1 = 端点2已发生接收
0 = 端点2未发生接收
TXD 1F -----端点1数据发送标志位:
在端点1发送缓冲区中的数据发送完并收到主机的“ACK”应答包后置位。在发送缓冲区已准备好下一个数据时,软件应向TXD1FR位写“ 1” 来清零该标志。
为允许下一次数据包发送。也必须置位TX1E位。如TXD 1F 未清零,则下一次“IN”传输时,将返回“NAK”应答包。写入TXD 1F 不影响该位。
1 = 已执行完端点1发送
0 = 未执行完端点1发送
RESUMF-----重执行标志:
在置位“SUSPND”位时,检测到USB总线活动时置位该位。软件应向RESUMFR位写入1来清零它。写入RESUMF不影响该位。
1 = 检测到USB总线活动
0 = 未检测到USB总线活动
TXD 0F -----端点0数据发送标志位:
在端点0发送缓冲中的数据发送完并收到主机的“ACK”应答包后置位。在发送缓冲区已准备好下一个数据时,软件应向TXD0FR位写入“ 1” 来清零该标志。
为允许下一次数据包发送,也必须置位TX0E。如TXD 0F 未清零,则下一次“IN”传输时,将返回NAK应答包。写入TXD 0F 不影响该位。
1 = 已执行完端点0发送
0 = 未执行完端点0发送
RXD 0F -----端点0数据接收标志:
在USB模块收到一个数据包发送“ACK”应答包后置位。在读走所有接收数据后,软件应向RXD0FR写入“ 1” 来清零它。
为允许下一次数据包接收,软件也须置位RX0E。如未清零RXD 0F ,则下一次“OUT”传输时,将返回“NAK”应答包。写入RXD 0F 不影响该位。
1 = 端点0已发生接收
0 = 端点0未发生接收
3、UIR2----USB状态清除寄存器。它只可以写入,读时总为全“ 0”
|
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
UIR2 |
EOPFR |
RSTFR |
TXDIER |
RXDIFR |
TXD1FR |
RESUMFR |
TXD0FR |
RXD0FR |
复位值 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
向EOPFR、RSTFR、TXD2FR、RXD2FR、TXD1FR、RESUMFR、TXD0FR、RXD0FR写入“1”,则分别清零EOPF、RSTF、TXD 2F 、RXD 2F 、TXD 1F 、RESUMF、TXD 0F 、RXD 0F 标志位。向它们写入0 不影响该位。
三、USB控制寄存器
1、UCR0-----USB控制寄存器0,它可读可写
|
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
UCR0 |
T0SEQ |
0 |
TX0E |
RX0E |
TP0SIZ3 |
TP0SIZ2 |
TP0SIZ1 |
TP0SIZ0 |
复位值 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
T0SEQ-----端点0发送顺序位:
这位决定端点0下一次“IN”传输时发出的数据包类型(DATA0或DATA1)。必须由软件来取反这位。
1 = 下一次端点0发送DATA1包
0 = 下一次端点0发送DATA0包
TX0E-----端点0发送允许位:
它允许在USB主机控制器向端点0发出“IN”令牌时进行发送。在数据准备发送时,软件应置位该位。在没有新的端点0数据发送时,软件应清零端位。如这位为“ 0” 或“TXD 0F ”置位,USB将对任何端点0“IN”令牌发“NAK”应答。
1 = 数据准备发送
0 = 数据设准备好,应答“NAK”
RX0E-----端点0接收允许位:
它允许在USB主机控制器向端点0发出“OUT”令牌时进行接收。在准备接收数据时,软件应置位该位。在不能接收数据时,软件应清零该位。如这位为“ 0” 或“RXD 0F ”置位,USB将对任何端点0“OUT”令牌发“NAK”应答。
1 = 准备接收数据
0 = 没准备好接收数据,应答NAK
TP0SIZ3~~TP0SIZ0-----端点0发送数据包长度:
它存放下一次对端点0“IN”令牌请求时的发送数据字节数。
2、UCR1-----USB控制寄存器1,它可读可写
|
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
UCR1 |
T1SEQ |
STALL1 |
TXIE |
FRESUM |
TP1SIZ3 |
TP1DIZ2 |
TP1SIZ2 |
TP1SIZ0 |
复位值 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
T1SEQ-----端点1发送顺序位:
这位决定端点1下一次“IN”传输时发送出的数据包类型(DATA0或DATA1)。必须由软件来取反这位。
1 = 下一次端点1发送DATA1包
0 = 下一次端点1发送DATA0包
STALL1-----端点1强制阻塞位:
它使端点1在收到“IN”或“OUT”令牌时均返回“STALL”应答。
1 = 发送STALL应答
0 = 缺省值
TX1E-----端点1发送允许:
它允许在USB主机控制器向端点1发送“IN”令牌后进行发送。相应的“端点允许位”:
UCR3寄存器中的“ENABLE 1” 位也必须置位。
在数据准备发送时,软件应置位“TX1E”位。在无新数据发送时,软件应清零该位。
如这位为“ 0” 或“TXD 1F ”置位,USB将对任何端点1“IN”令牌发“NAK”应答。
1 = 数据准备发送
0 = 无数据准备发送,应答“NAK”
FRESUM-----强制重执行:
它强制向USB数据线上发非空闲电平以初始化远程唤醒。软件应控制强制重执行时间为10~15ms。
置位该位不会引起“RESUMF”置位。
1 = 强制数据线为非空闲态
0 = 缺省值
TP1SIZ3~TP1SIZ0 --------------- 端点1发送数据包长度
它存放下一次对端点1“IN”令牌请求的发送数据字节数。
3、UCR2-----USB控制寄存点2,它可读可写
|
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
UCR2 |
T2SEQ |
STALL2 |
TX2E |
RX2E |
TPLSIZ3 |
TP2SIZ2 |
TP2SIZ1 |
PT2SIZ0 |
复位值 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
T2SEQ——端点2发送顺序位:
这位决定端点2下一次“IN”传输时发出的数据类型(DATA0或DATA1)。必须由软件来取反这位。
1 = 下一次端点2发送DATA1包
0 = 下一次端点2发送DATA0包
STLL2——端点2强制阻塞位:
它使端点2在收到“IN”或“OUT”令牌时均返回“STALL”应答。
1 = 发送STALL应答
0 = 缺省值
TX2E——端点2发送允许
它允许在USB主机控制器向端点2发送“IN”令牌时进行发送。相应的端点允许位:
UCR3寄存器中的“ENABLE 2” 位也必须置位。在数据准备发送时,软件应置位“TX2E”位。在无新数据发送时,软件应清零该位。
如这位为“0”或“TXD2F”置位,USB将对任何端点2“IN”令牌发“NAK”应答。
1 = 数据准备发送
0 = 无数据准备发送,应答NAK
RX2E——端点2接收允许:
它允许在USB主机控制器向端点2发出“OUT”令牌时进行接收。在准备接收数据时,软件应置位该位。在不能接收数据时,软件应清零该位。
如这位为“0”或“RXD2F”置位,USB将对任何端点2“OUT”令牌发“NAK”应答。
1 = 准备接收数据
0 = 没准备好接收数据,应答NAK
TP2SIZ3~TP2SIZ0——端点2发送数据包长度:
它存放在下一次对端点2“IN”令牌请求的发送数据字节数。
4、UCR3——USB控制寄存器3
位7(TX1ST)只可读出,位6(TX1STR)只可写入,其他位可读可写。
|
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
UCR3 |
TX1ST |
TX1STR |
OSTALL0 |
ISTALL0 |
0 |
PULLEN |
ENABLE2 |
ENABLE1 |
复位值 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
TX1ST——端点0发送先发生标志
如端点0数据发送标志(TXD 0F )置位,在USB控制逻辑置位端点数据接收标志(RXD 0F )时将置位本标志。它告诉软件端点0发送在端点0接收前发生。
1 = 在SETUP/OUT前发生“IN”传输
0 = 在SETUP/OUT后发生“IN”传输
TX1STR——清零端点0发送先发生标志
向这位写入1清零“TX1ST”。写入0不影响TX1ST位。
OSTALL0——端点0? “OUT”令牌强制阻塞位。
它使端点0在收到USB主机控制的“OUT”令牌时返回“STALL”应答。在收到“SETUP”令牌时USB硬件清零该位。
1 = 发“STALL”应答
0 = 缺省值
ISTALL0——端点0“IN”令牌强制阻塞位:
它使端点0在收到USB主机控制器的“IN”令牌时返回“STALL”应答。在收到“SETUP”令牌时USB硬件清零该位。
1 = 发送“STALL”应答
0 = 缺省值
PULLEN——上拉允许:
在允许USB模块时,这位允许USB D— 脚的上拉电阻功能。
1 = 设置D—脚有内部上拉电阻
0 = 设置D—脚无内部上拉电阻
ENABLE2——端点2允许位:
它允许端点2,并允许USB响应访问端点2的“IN”或“OUT”包。
1 = 允许端点2,可响应“IN”或“OUT”令牌
0 = 禁止端点2
ENABLE1——端点1允许位“
它允许端点1,并允许USB响应访问端点1的“IN”或“OUT”包。
1 = 允许端点1,可响应“IN”或“OUT”令牌
0 = 禁止端点1响应
5、UCR4——USB控制寄存器4
它只有3位,均可读可写。它只用于特殊应用场合,一般情况不应使用该寄存器。
|
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
UCR4 |
0 |
0 |
0 |
0 |
0 |
FUSB0 |
FDP |
FDM |
复位值 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
FUSB0——强制USB输出:
它允许USB输出缓冲器
1 = 允许USB输出缓冲器
0 = USB模块处于正常操作方式
FDP——强制D+:
它决定D+的输出电平
1 = D+输出高电平
0 = D+输出低电平
FDM——强制D-
它决定D-的输出电平。
1 = D-输出高电平
0 = D-输出低电平
四、USB状态寄存器
1、USR0——USB状态寄存器0
它只可读出,不受复位影响
|
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
USR0 |
R0SEQ |
SETUP |
0 |
0 |
PR0SIZ3 |
PR0SIZ2 |
PR0SIZ1 |
PR0SIZ0 |
复位值 |
0 |
0 |
0 |
U |
U |
U |
U |
U |
R0SEQ——端点0接收顺序:
它指出端点0上次收到数据包的类型(DATA0或DATA1)。
1 = 上次端点0收到的数据包为DATA1类
0 = 上次端点0收到的数据包为DATA0类
SETUP——“SETUP”令牌位:
它指出已收到一个正确的“SETUP”令牌。
1 = 上次端点0收到的令牌为“SETUP”
0 = 上次端点0收到的令牌不是“SETUP”
RP0SIZ3~RP0SIZ0——端点0接收数据长度:
它们存放上次端点0收到的“OUT”或“SETUP”数据包的字节数。
2、USR1——USB状态寄存器1,它只可读出
|
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
USR1 |
R2SEQ |
TXACK |
TXNCK |
TXSTL |
RP2SIZ3 |
RP2SIZ2 |
RP2SIZ1 |
RP2SIZ0 |
复位值 |
U |
0 |
0 |
U |
U |
U |
U |
U |
R2SEQ——端点2接收顺序位:
它指出端点2上次收到数据包的类型(DATA0或DATA1)。
1 = 上次端点2收到的数据包为DATA1类
0 = 上次端点2收到的数据包为DATA0类
TXACK——“ACK”令牌发送位:
它指出已发送“ACK”令牌,它在数据发送结束时更新。
1 = 端点0上次发送的令牌为ACK令牌
0 = 端点0上次发送的令牌不是ACK令牌
TXNAK——“NAK”令牌发送位:
它指出已了送NAK令牌,它在数据发送结束时更新。
1 = 端点0上次发送的为“NAK”令牌
0 = 端点0上次了送的令牌不是“NAK”令牌
TXSTL——“STALL”令牌发送位:
它指出已发送“STALL”令牌,它在数据发送结束时更新。
1 = 端点0上次发送的令牌为“STALL”令牌
0 = 端点0上次发送的令牌不为“STALL”令牌
RP2SIZ3~RP2SIZ0——端点2接收数据包长度:
它们存放上次端点2收到的“OUT”传送的数据的字节数。
五.USB数据寄存器
1、端点0数据寄存器
UE0D0~UE0D7为8个端点0数据寄存器。写入UE0D0~UE0D7时访问8个发送数据寄存器。读出UE0D0~UE0D7时访问8个接收寄存器。
2、端点1数据寄存器
UE1D0~UE1D7为8个端点1数据寄存器,它们只可写入,为8个发送数据寄存器。
3、端点2数据寄存器
UE2D0~UE2D7为8个端点2数据寄存器。写入UE2D0~UE2D7时访问8个发送数据寄存器,读出UE2D0~UE2D7时访问8个接收数据寄存器。
*** USB中断
MC68HC08JB8具有三种USB中断。
1、USB传输结束中断
有五个传输结束中断,包括端点0,2接收和端点0,1,2发送,它们有各自的中断标志和允许位。
2、重执行中断
在进入挂起状态后,如检测到低速总线活动后USB模块产生CPU中断。在挂起状态,
USB数据线变为非常闲状态将置位UIR1寄存器的RESUMF标志。它无局部中断允许位,均由CCR的1位所控制。只有在挂起状态才能发生重执行中断。
3、包结束中断
由包结束发生USB中断。在检测到包结束信号时,USB模块将置位EOPF位,并在EOPIE位置位时产生CPU中断。
发表评论 评论 (0 个评论)