阅读:1570回复:6
关于1581的数据端口寄存器!!
1581的数据端口寄存器的问题。
在处理setup令牌包时,从数据端口寄存器往外读get descriptor请求,按照philips给的例程操作,可是只能读到前两个字节的内容,即80和06,其余的6个字节全部都是80和06的重复。郁闷了好多天了,想请教大侠们,能不能说说种种的可能情况??? :( [编辑 - 12/22/04 by lettertoxw] [编辑 - 12/22/04 by lettertoxw] |
|
沙发#
发布于: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);//读数据 } 读完之后清一下缓冲区. |
|
板凳#
发布于:2004-12-23 13:29
谢谢任老大!我是用pc104作为1581的控制器,在程序读数据端口寄存器的时候每读一次用串口把数据取出一次,取出的数据就是80和06的循环.还有一个很奇怪的现象,就是我用程序对1581进行初始化以后即把程序断开.然后用dos里的debug命令企图修改1581的地址寄存器,得到的结果就是每位只能写进1,却无法将其清零,这是为什么呢?是我的操作方法有误吗?
|
|
地板#
发布于:2004-12-23 15:37
"dos里的debug命令企图修改1581的地址寄存器"
上面那句话是什么意思? 1581地址是唯一的,怎么还能改变? 你先读读那两个CHIP ID寄存器,看读出来的数对不对,地址是xx70和xx72,应该是15 81 和30吧,这个可能和版本有关,如果读出来的数据不对那就查硬件吧 当初我有一块板子跟你的现象一样,但是具体是什么问题想不起来了 好像也折腾了有一阵子。 |
|
地下室#
发布于:2004-12-23 16:09
哦,我好像没有说明白我的意思
我就是想检验一下1581寄存器的读写是否正确,就在既没有连接usb总线又没有运行固件的情况下直接写1581的00H的寄存器,就会出现上面说过的现象了。 那个三字节的只读寄存器读过了,是正确的。 |
|
5楼#
发布于:2004-12-23 16:12
哦,我好像没有说明白我的意思
我就是想检验一下1581寄存器的读写是否正确,就在既没有连接usb总线又没有运行固件的情况下直接写1581的00H的寄存器,就会出现上面说过的现象了。 那个三字节的只读寄存器读过了,是正确的。 对了任老大,我在已发的帖子里看到了你的qq,能不能加你? |
|
6楼#
发布于:2004-12-23 18:44
还是挺奇怪的
|
|