lettertoxw
驱动牛犊
驱动牛犊
  • 注册日期2004-09-02
  • 最后登录2007-08-21
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1571回复:6

关于1581的数据端口寄存器!!

楼主#
更多 发布于:2004-12-22 16:20
1581的数据端口寄存器的问题。
在处理setup令牌包时,从数据端口寄存器往外读get descriptor请求,按照philips给的例程操作,可是只能读到前两个字节的内容,即80和06,其余的6个字节全部都是80和06的重复。郁闷了好多天了,想请教大侠们,能不能说说种种的可能情况??? :(


[编辑 -  12/22/04 by  lettertoxw]

[编辑 -  12/22/04 by  lettertoxw]
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-12-23 10:02
你是不是用watch看了指向端口的地址的指针的内容了?千万不要看,要想看数值的话得把它读到一个数组里看
因为端口地址是fifo入口,如果你用watch看了,仿真器会提前给你把值读出来,那么程序实际执行到的时候读到的会是后一个值了。

下面是读数据的一段程序:
#define Reg_Epindex (volatile unsigned short *)0x202c//索引寄存器
#define Reg_Dport (volatile unsigned short *)0x2020//数据端口寄存器
*(Reg_Epindex) = 0x20;
for(i=0; i<4; i++)//读取8字节的Setup包
{
     SETUPDAT = *(Reg_Dport);//读数据
}
读完之后清一下缓冲区.
lettertoxw
驱动牛犊
驱动牛犊
  • 注册日期2004-09-02
  • 最后登录2007-08-21
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-12-23 13:29
谢谢任老大!我是用pc104作为1581的控制器,在程序读数据端口寄存器的时候每读一次用串口把数据取出一次,取出的数据就是80和06的循环.还有一个很奇怪的现象,就是我用程序对1581进行初始化以后即把程序断开.然后用dos里的debug命令企图修改1581的地址寄存器,得到的结果就是每位只能写进1,却无法将其清零,这是为什么呢?是我的操作方法有误吗?
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-12-23 15:37
"dos里的debug命令企图修改1581的地址寄存器"
上面那句话是什么意思?
1581地址是唯一的,怎么还能改变?
你先读读那两个CHIP ID寄存器,看读出来的数对不对,地址是xx70和xx72,应该是15 81 和30吧,这个可能和版本有关,如果读出来的数据不对那就查硬件吧
当初我有一块板子跟你的现象一样,但是具体是什么问题想不起来了
好像也折腾了有一阵子。
lettertoxw
驱动牛犊
驱动牛犊
  • 注册日期2004-09-02
  • 最后登录2007-08-21
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-12-23 16:09
哦,我好像没有说明白我的意思
我就是想检验一下1581寄存器的读写是否正确,就在既没有连接usb总线又没有运行固件的情况下直接写1581的00H的寄存器,就会出现上面说过的现象了。
那个三字节的只读寄存器读过了,是正确的。
lettertoxw
驱动牛犊
驱动牛犊
  • 注册日期2004-09-02
  • 最后登录2007-08-21
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-12-23 16:12
哦,我好像没有说明白我的意思
我就是想检验一下1581寄存器的读写是否正确,就在既没有连接usb总线又没有运行固件的情况下直接写1581的00H的寄存器,就会出现上面说过的现象了。
那个三字节的只读寄存器读过了,是正确的。
对了任老大,我在已发的帖子里看到了你的qq,能不能加你?
superms23
驱动牛犊
驱动牛犊
  • 注册日期2004-06-08
  • 最后登录2004-12-23
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2004-12-23 18:44
还是挺奇怪的
游客

返回顶部