阅读:1750回复:15
SL811HS的USB_A_DONE突然不产生中断了
小弟的SL811HS读U盘的开发,在连续读一个几兆文件时,突然检测不到USB_A_DONE中断了,读出的文件有时候是几百KB,有时候也能达到几MB。对于一个几十K的文件能全部读出来,请高手指点一下迷津!
是硬件问题,还是软件问题可能性较大呢? |
|
最新喜欢:ww7002 |
沙发#
发布于:2004-02-18 23:41
这种不稳定的情况确实很头痛,不好解决,因素可能是硬件,也可能是软件.
欢迎光临:http://eden.51.net |
|
板凳#
发布于:2004-02-19 08:43
把你的中断处理代码贴出来看看
|
|
|
地板#
发布于:2004-02-19 09:00
1.最好是有源晶振。
2.软件要有错误处理机制,这个是最难的 |
|
地下室#
发布于:2004-02-19 10:05
我使用的是48M无源晶振,主控是DSP。
等待中断源码如下: while( SLAVE_FOUND && (!UsbDoneFlag) ); if(!SLAVE_FOUND) return FALSE; 中断源码如下: interrupt void ext_int0( ) { u16 intr; // disable interrupt asm(" SSBX INTM"); UsbDoneFlag = FALSE; //read IntStatus; intr = rd811hs(IntStatus); wr811hs(IntStatus,INT_CLR); //clear interrupt status if(intr&USB_A_DONE) UsbDoneFlag = TRUE; else if(intr&INSERT_REMOVE) SLAVE_FOUND = FALSE; // enable interrput asm(" RSBX INTM"); } 请大家帮我看看! |
|
5楼#
发布于:2004-02-19 13:36
你能确保数据确实送出去了吗
|
|
|
6楼#
发布于:2004-02-19 17:15
刚才实验居然将一个3M的文件全部正确读出来了。
在实验中发现,将U盘拔出时候,会产生中断。 我现在在考虑如何用软件进行错误处理。 |
|
7楼#
发布于:2004-02-19 17:21
恭喜恭喜
|
|
|
8楼#
发布于:2004-02-21 15:18
我发现了一个现象,在检测不到USB_A_DONE的时候,用示波器观察发现SOF信号消失了。执行一下UsbReset,复位一下USB引擎,并没有复位SL811HS芯片,也没有改变其寄存器的值,SOF又出现了,USB_A_DONE也有了,但是这时候设备要重新枚举。
各位大侠,能否指点一下。 |
|
9楼#
发布于:2004-02-21 15:39
如果你是用仿真器,有可能是你的电脑机箱-仿真器-开发板电源不共地,造成电源干扰.我在试验的时候用一根导线把三者连接起来,成功地解决了不稳定问题.
[编辑 - 2/21/04 by dragon_hn] |
|
|
10楼#
发布于:2004-02-21 17:17
如果你是用仿真器,有可能是你的电脑机箱-仿真器-开发板电源不共地,造成电源干扰.我在试验的时候用一根导线把三者连接起来,成功地解决了不稳定问题. 真的吗,我试试 |
|
|
11楼#
发布于:2004-02-21 17:18
我发现了一个现象,在检测不到USB_A_DONE的时候,用示波器观察发现SOF信号消失了。执行一下UsbReset,复位一下USB引擎,并没有复位SL811HS芯片,也没有改变其寄存器的值,SOF又出现了,USB_A_DONE也有了,但是这时候设备要重新枚举。 我想问题可能就是在这,我好象以前也碰到过 |
|
|
12楼#
发布于:2004-02-21 22:38
小弟有点糊涂,请问如何将机箱的地和仿真器连起来?
电路板和仿真器有公共地的。 |
|
13楼#
发布于:2004-02-23 09:25
小弟找到原因了,果然是仿真器的干扰问题,现在问题解决了。
利用SL811读U盘开发成功! 在此谢谢jiangyiyong建议我用中断方式处理SL811, 谢谢dragon_hn提醒我干扰的问题, 谢谢lxb_gd建议我用有源晶振! Thanks a lot! |
|
14楼#
发布于:2004-02-23 11:14
你是如何解决干扰问题的??
|
|
|
15楼#
发布于:2004-02-23 13:00
我是从U盘上读文件用fwrite( )写到PC机上,由于仿真器和DSP不停交换数据,频率又较高,所以仿真器电缆上有干扰信号。
现在去掉fwrite( ),就一切OK了。 |
|