minhead
驱动牛犊
驱动牛犊
  • 注册日期2003-05-15
  • 最后登录2006-05-28
  • 粉丝0
  • 关注0
  • 积分98分
  • 威望14点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
阅读:1539回复:2

弱问:对sl811的RAM中寄存器部分可以连续读写吗?

楼主#
更多 发布于:2005-08-09 15:40
  就是连续读写sl811的内部ram区的前16个字节可以吗?(0x00到0x0f)
另外我调试时候发现:
SL811Write(IntStatus,INT_CLEAR );    //清除中断状态寄存器(0xFF)
。。。
ComSendByte(SL811Read(IntStatus));   //串口发送状态寄存器的值
中间无其他修改IntStatus的语句,之间就是其他的一些调试语句。但是串口接受到的为0x40,不知道为什么,我也没有插入或者拔出U盘的操作(目前就是空板子调试MCU对sl811的读写操作),但是IntStatus的值为什么不是前面写入的0xFF呢?(我的读写函数读写其他的单元正常的,就是说读写函数应该没问题的)请各位有经验的大侠帮助啊!

 
templa
驱动牛犊
驱动牛犊
  • 注册日期2005-01-04
  • 最后登录2013-03-15
  • 粉丝0
  • 关注0
  • 积分55分
  • 威望8点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2005-08-09 16:39
连续读写应该都可以的。
IntStatus不是通用的RAM,未必写入什么再回读就一定还是该数据。就比如象51的SBUF一样,读的时候是接收缓冲数据,写得时候则是发送缓冲数据。811的确有点怪,在IntStatus写入0XFF实际是清除所有中断标志的意思,回读为0X40我记得是芯片复位中断完成的意思。
minhead
驱动牛犊
驱动牛犊
  • 注册日期2003-05-15
  • 最后登录2006-05-28
  • 粉丝0
  • 关注0
  • 积分98分
  • 威望14点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2005-08-09 17:20
谢谢templa,对于一些寄存器地址如cSOFcnt(0x0f)读和写实际上是两个寄存器,可能写入后再读回会不一样的,51里面的SBUF也是这种情况吧,读写是两个(根据指令来区分是读还是写),尽管都是叫SBUF,但是物理上是分开的两个寄存器。而sl811里面的IntStatus寄存器是读写都可以的,就是一个寄存器啊!所以感到不解!
另外回读到0x40是芯片复位中断的意思?
D7           D6                  D5               D4                D3            D2             D1         D0
D+        Device             insert/         sof timer    reserved   reserved  USB-B    USB-A
         detect/resume    remove

上面为IntStatus寄存器结构位的说明,通过特定的位置1就可以清除相应的中断。所以对于0x40(D6位为1)就感觉是接入了一个全速设备;D5为0,就是说是设备已经准备好了;还产生了sof定时中断和USB-A和USB-B中断。   也不知道具体啥个意思?
游客

返回顶部