STM32寄存器列表 USB相关寄存器

STM32寄存器列表 USB相关寄存器

作者:fly 发布于:2014-6-18 10:25 分类:嵌入式

本文出自www.forwhat.cn

 

USB控制寄存器(USB_CNTR)

15位:CTRM正确传输(CTR)中断屏蔽位,定义:0(正确传输(CTR)中断禁止),1(正确传输(CTR)中断使能,在中断寄存器的相应位被置1时产生中断)

14位:PMAOVRM分组缓冲区溢出中断屏蔽位,定义:0(PMAOVR中断禁止),1(PMAOVR中断使能,在中断寄存器的相应位被置1时产生中断)

13位:ERRM出错中断屏蔽位,定义:0(出错中断禁止),1(出错中断使能,在中断寄存器的相应位被置1时产生中断)

12位:WKUPM唤醒中断屏蔽位,定义:0(唤醒中断禁止),1(唤醒中断使能,在中断寄存器的相应位被置1时产生中断)

11位:SUSPM挂起中断屏蔽位,定义:0(挂起(SUSP)中断禁止),1(挂起(SUSP)中断使能,在中断寄存器的相应位被置1时产生中断)

10位:RESETM-USB复位中断屏蔽位,定义:0(USB RESET中断禁止),1(USB RESET中断使能,在中断寄存器的相应位被置1时产生中断)

9位:SOFM帧首中断屏蔽位,定义:0(SOF中断禁止),1(SOF中断使能,在中断寄存器的相应位被置1时产生中断)

8位:ESOFM期望帧首中断屏蔽位,定义:0(ESOF中断禁止),1(ESOF中断使能,在中断寄存器的相应位被置1时产生中断)

4位:RESUME唤醒请求,定义:设置此位将向PC主机发送唤醒请求。根据USB协议,如果此位在1ms到15ms内保持有效,主机将对USB模块实行唤醒操作

3位:FSUSP强制挂起,当USB总线上保持3ms没有数据通信时,SUSP中断会被触发,此时软件必需设置此位,定义:0(无效)1(进入挂起模式,USB模拟收发器的

    时钟和静态功耗仍然保持。如果需要进入低功耗状态(总线供电类的设备),应用程序需要先置位FSUSP再置位LP_MODE

2位:LP_MODE低功耗模式,此模式用于在USB挂起状态下降低功耗。在此模式下,除了外接上拉电阻的供电,其他的静态功耗都被关闭,系统时钟将会停止或者降低到

    一定的频率来减少耗电。USB总线上的活动(唤醒事件)将会复位此位(软件也可以复位此位)。定义:0(非低功耗模式),1(低功耗模式)

1位:PDWN断电模式,此模式用于彻底关闭USB模块。当此位被置位时,不能使用USB模块,定义:0(退出断电模式),1(进入断电模式)

0位:FRES强制USB复位,定义:0(清除USB复位信号),1(对USB模块强制复位,类似于USB总线上的复位信号。USB模块将一直保持在复位状态下直到软件清除此位。

    如果USB复位中断被使能,将产生一个复位中断)

 

 

USB_ISTR(USB中断状态寄存器)

15位:CTR正确的传输,此位在端点正确完成一次数据传输后由硬件置位。应用程序可以通过DIR和EP_ID位来识别是哪个端点完成了正确的数据传输。此位只读

14位:PMAOVR分组缓冲区溢出,此位在微控制器长时间没有响应一个访问USB分组缓冲区请求时由硬件置位。USB模块通常在以下情况时置位该位:在接收过程中一个

     ACK握手分组没有被发送,或者在发送过程中发生了比特填充错误,在以上两种情况下主机都会要求数据重传。在正常的数据传输中不会产生PMAOVR中断。由于

     失败的传输都将由主机发起重传,应用程序就可以在这个中断的服务程序中加速设备的其他操作,并准备重传。但这个中断不会在同步传输中产生(同步传输

     不支持重传)因此数据可能会丢失。此位应用程序可读可写,但只有写0有效,写1无效。

13位:ERR出错,在下列错误发生时硬件会置位此位,NANS:无应答。主机的应答超时,CRC:循环冗余校验码错误。数据或令牌分组中的CRC校验出错

     BST:位填充错误。PID,数据或CRC中检测出位填充错误。FVIO:帧格式错误。收到非标准帧(如EOP出现在错误的时刻,错误的令牌等)。

     USB应用程序通常可以忽略这些错误,因为USB模块和主机在发生错误时都会启动重传机制。此位产生的中断可以用于应用程序的开发阶段,

     可以用来监测USB总线的传输质量,标识用户可能发生的错误(连接线松,环境干扰严重,USB线损坏等)。

     此位应用程序可读可写,但只有写0有效,写1无效。

12位:WKUP唤醒请求,当USB模块处于挂起状态时,如果检测到唤醒信号,此位将由硬件置位。此时CTLR寄存器的LP_MODE位将被清零,同时USB_WAKEUP被激活,

     通知设备的其他部分(如唤醒单元)将开始唤醒过程。此位应用程序可读可写,但只有写0有效,写1无效。

11位:SUSP挂起模块请求,此位在USB线上超过3ms没有信号传输时由硬件置位,用以指示一个来自USB总线的挂起请求。USB复位后硬件立即使能对挂起信号的检测,

     但在挂起模式下(FSUSP=1)硬件不会再检测挂起信号直到唤醒过程结束。此位应用程序可读可写,但只有写0有效,写1无效。

10位:RESET-USB复位请求,此位在USB模块检测到USB复位信号输入时由硬件置位。此时USB模块将复位内部协议状态机,并在中断使能下触发复位中断来响应复位信号。

     USB模块的发送和接收部分将被禁止,直到此位被清除。所有的配置寄存器不会被复位,除非应用程序对他们清零。这用来保证在复位后USB传输还可以立即

     正确执行。但设备的地址和端点寄存器会被USB复位所复位。此位应用程序可读可写,但只有写0有效,写1无效。

9位:SOF帧首标志,此位在USB模块检测到总线上的SOF分组时由硬件置位,标志一个新的USB帧的开始。中断服务程序可以通过检测SOF事件来完成与主机的1ms同步

    并正确读出寄存器在收到SOF分组时的更新内容(此功能在同步传输时非常有意义)。此位应用程序可读可写,但只有写0有效,写1无效。

8位:ESOF期望帧首标识位,此位在USB模块未收到期望的SOF分组时由硬件置位。主机应该每毫秒都发送SOF分组,但如果USB模块没有收到,挂起定时器将触发此中断。如果连续发生3次ESOF中断,也就是连续3次未收到SOF分组,将产生SUSP中断。即使在挂起定时器未被锁定时发生SOF分组丢失,此位也会被置位。此位应用程序可读可写,但只有写0有效,写1无效。

4位:DIR传输方向,此位在完成数据传输产生中断后由硬件根据传输方向写入。如果DIR=0,相应端点的CTR_TX位被置位,标志一个IN分组(数据从USB模块传输到

    PC主机)的传输完成,如果DIR=1,相应端点的CTR_RX位被置位,标志一个OUT分组(数据从PC主机传输到USB模块)的传输完成。如果CTR_TX位同时也被置位

    就标志同时存在挂起的OUT分组和IN分组。应用程序可以利用该信息访问USB_EPnR位对应的操作,它表示挂起中断传输方向的信息。该位为只读

3-0位:EP_ID[3:0]端点ID,此位在USB模块完成数据传输产生中断后由硬件根据请求中断的端点号写入。如果同时有多个端点的请求中断,硬件写入优先级最高的端点号。

      端点的优先级按以下方法定义:同步端点和双缓冲批量端点具有高优先级,其他的端点为低优先级。如果多个同优先级的端点请求中断,则根据端点号

      来确定优先级,即端点0具有最高优先级,端点号越小,优先级越高。应用程序可以通过上述的优先级策略顺序处理端点的中断请求。该位为只读。

 

 

USB帧编号寄存器(USB_FNR)

15位:RXDP(D+状态位),此位用于观察USB D+数据线的状态,可在挂起状态下检测唤醒条件的出现

14位:RXDM(D-状态位),此位用于观察USB D-数据线的状态,可在挂起状态下检测唤醒条件的出现。

13位:LCK锁定位,USB模块在复位或唤醒序列结束后会检测SOF分组,如果连续检测到至少2个SOF分组,则硬件会置位此位。此位一旦锁定,帧计数器将停止计数,

     一直等到USB模块复位或总线挂起时再恢复计数

12位:LSOF[1:0]帧首丢失标志位,当ESOF事件发生时,硬件会将丢失的SOF分组的数目写入此位。如果再次收到SOF分组,引脚会清除此位

10-0位:此部分记录了最新收到的SOF分组中的11位帧编号。主机每发送一个帧,帧编号都会自加,这对于同步传输非常有意义。此部分发生SOF中断时更新

 

 

USB_DADDR(USB设备地址寄存器)

7位:EF-USB模块使能位,此位在需要使能USB模块时由应用程序置位。如果此位为0,USB模块将停止工作,忽略所有寄存器的设置,不响应任何USB通信。

6-0位:ADD[6:0]设备地址,此位记录了USB主机在枚举过程中为USB设备分配的地址值。该地址值和端点地址(EA)必需和USB令牌分组中的地址信息匹配,

      才能在指定的端点进行正确的USB传输

 

 

USB_BTABLE(USB分组缓冲区描述表地址寄存器)

15-3位:BTABLE缓冲表,此位记录分组缓冲区描述表的起始地址。分组缓冲区描述表用来指示每个端点的分组缓冲区地址和大小,按8字节对齐(即最低3位为000)。

       每次传输开始时,USB模块读取相应端点所对应的分组缓冲区描述表获得缓冲区地址和大小信息

 

 

USB_EPnR(USB 端点n寄存器), n=[0..7]

15位:CTR_RX正确接收标志位(可读可写,写0有效,写1无效)。此位在正确接收到OUT或SETUP分组时由硬件置位,应用程序只能对此位清零。如果CTRM位已置位,

     相应的中断会产生。收到的是OUT分组还是SETUP分组可以通过下面描述的SETUP位确定。以NAK或STALL结束的分组和出错的传输不会导致此位置位,

     因为没有真正传输数据

14位:DTOG_RX用于数据接收的数据翻转位(可读可写,写0有效,写1无效),对于非同步端点,此位由硬件设置,用于标记希望接收的下一个数据分组的Toggle位

     (0=DATA0,1=DATA1)。在接收到PID(分组ID)正确的数据分组之后,USB模块发送ACK握手分组,并翻转此位。对于控制端点,硬件在收到SETUP分组后清除此位。

     对于双缓冲端点,此位还用于支持双缓冲区的交换。对于同步端点,由于仅发送DATA0,因此此位仅用于支持双缓冲区的交换,而不需进行翻转。

     同步传输不需要握手分组,因此硬件在收到数据分组后立即设置此位。应用程序可以对此位进行初始化(对于非控制端点,初始化是必需的),

     或者翻转此位用于特殊用途

13-12位:STAT_RX[1:0]用于数据接收的状态位,此位用于指示端点当前的状态,表157列出了端点的所有状态。当一次正确的OUT或SETUP数据传输完成后(CTR_RX=1),

        硬件会自动设置此位为NAK状态,使应用程序有足够的时间在处理完当前传输的数据后,响应下一个数据分组。

        对于双缓冲批量端点,由于使用特殊的传输流量控制策略,因此根据使用的缓冲区状态控制传输状态。对于同步端点,

        由于端点状态只能是有效或禁用,因此硬件不会在正确的传输之后设置此位。如果应用程序将此位设为STALL或者NAK,USB模块响应的操作是未定义的

11位:SETUP-SETUP分组传输完成标志位,(只读),此位在USB模块收到一个正确的SETUP分组后由硬件置位,只有控制端点才使用此位。在接收完成后(CTR_RX=1),

     应用程序需要检测此位以判断完成的传输是否是SETUP分组。为了防止中断服务程序在处理SETUP分组时下一个令牌分组修改了此位,只有CTR_RX为0时,

     此位才可以被修改,CTR_RX为1时不能修改。

10-9位:EP_TPYE[1:0]端点类型位,此位用于指示端点当前的类型,所有的端点类型都在表158中列出。所有的USB设备都必需包含一个地址为0的控制端点,如果需要

       可以有其他地址的控制端点。只有控制端点才会有SETUP传输,其他类型的端点无视此类传输。SETUP传输不能以NAK或STALL分组响应,如果控制端点在收到

       SETUP分组时处于NAK状态,USB模块将不响应分组,就会出现接收错误。如果控制端点处于STALL状态,SETUP分组会被正确接收,数据会被正确传输,并产生

       一个正确传输完成的中断。控制端点的OUT分组安装普通端点的方式处理。批量端点和中断端点的处理方式非常类似,仅在对EP_KIND位的处理上有差别。

8位:EP_KIND端点特殊类型位,此位的需要和EP_TYPE位配合使用,具体的定义请参考表159。DBL_BUF:应用程序设置此位能使能批量端点的双缓冲功能。

    STATUS_OUT:应用程序设置此位表示USB设备期望主机发送一个状态数据分组,此时,设备对于任何长度不为0的数据分组都响应STALL分组。

    此功能仅用于控制端点,有利于提供应用程序对于协议层错误的检测。如果STATUS_OUT位被清除,OUT分组可以包含任意长度的数据。

7位:CTR_TX正确发送标志位,此位由硬件在一个正确的IN分组传输完成后置位。如果CTRM位已被置位,会产生相应的中断。应用程序需要在处理完该事件后清除此位。

    在IN分组结束时,如果主机响应NAK或STALL则此位不会被置位,因为数据传输没有成功。此位应用程序可读可写,但写0有效,写1无效。

6位:DTOG_RX发送数据翻转位,对于非同步端点,此位用于指示下一个要传输的数据分组的Toggle位(0=DATA0,1=DATA1)。在一个成功传输的数据分组后,

    如果USB模块接收到主机发送的ACK分组,就会翻转此位。对于控制端点,USB模块会在收到正确的SETUP PID后置位此位。对于双缓冲端点,此位还可用于支持

    分组缓冲区交换。对于同步端点,由于只传送DATA0,因此该位只用于支持分组缓冲区交换。由于同步传输不需要握手分组,因此硬件在接收到数据

    分组后即设置该位。应用程序可以初始化该位(对于非控制端点,初始化此位时必需的),也可以设置该位用于特殊用途。可读写,写1翻转写0无效

5-4位:STAT_TX[1:0]用于发送数据的状态位,此位用于标识端点的当前状态,表160列出了所有的状态。应用程序可以翻转这些位来初始化状态信息。在正确

      完成一次IN分组的传输后(CTR_TX=1),硬件会自动设置此位为NAK状态,保证应用程序有足够的时间准备好数据响应后续的数据传输。对于双缓冲批量端点,

      由于使用特殊的传输流量控制策略,是根据缓冲区的状态控制传输的状态的。对于同步端点,由于端点的状态只能是有效或禁用,因此硬件不会在数据传输结束

      时改变端点的状态。如果应用程序将此位设为STALL或者NAK,则USB模块后续的操作是未定义的。此位应用程序可读可写,但写0无效,写1翻转此位。

3-0位:EA[3:0]端点地址,应用程序必需设置此4位,在使能一个端点前为它定义一个地址。

 

 

USB_ADDRn_TX(发送缓冲区地址寄存器 n)

15-1位:ADDRn_TX[15:1]发送缓冲区地址,此位记录了收到下一个IN分组时,需要发送的数据所在的缓冲区起始地址。

0位:因为分组缓冲区地址必须按字对齐,所以此位必须为‘0‘

 

 

USB_COUNTn_TX(发送数据字节数寄存器 n)

9-0位:COUNTn_TX[9:0]发送数据字节数,此位记录了收到下一个IN分组时要传输的数据字节数

      注: 双缓冲区和同步IN端点有两个USB_COUNTn_TX寄存器:分别为USB_COUNTn_TX_1和USB_COUNTn_TX_0,内容如下:

 

 

USB_ADDRn_RX(接收缓冲区地址寄存器 n)

15-1位:ADDRn_RX[15:1]接收缓冲区地址,此位记录了收到下一个OUT或者SETUP分组时,用于保存数据的缓冲区起始地址。

0位:因为分组缓冲区的地址按字对齐,所以此位必需为’0’。

 

 

USB_COUNTn_RX(接收数据字节数寄存器 n)

15位:BL_SIZE存储区块的大小,此位用于定义决定缓冲区大小的存储区块的大小。如果BL_SIZE=0,存储区块的大小为2字节,因此能分配的分组缓冲区

     的大小范围为2-62个字节。如果BL_SIZE=1,存储区块的大小为32字节,因此能分配的分组缓冲区的大小范围为32-512字节,符合USB协议定

     义的最大分组长度限制

14-10位:NUM_BLOCK[4:0]存储区块的数目,此位用以记录分配的存储区块的数目,从而决定最终使用的分组缓冲区的大小。

9-0位:COUNTn_RX[9:0]接收到的字节数,此位由USB模块写入,用以记录端点收到的最新的OUT或SETUP分组的实际字节数

注: 双缓冲区和同步IN端点有两个USB_COUNTn_RX寄存器:分别为USB_COUNTn_RX_1和USB_COUNTn_TX_0,内容如下:

 

发表评论:

 
Powered by emlog sitemap