阅读:1384回复:3
枚举中的中断问题?
void fn_usb_isr()
{ unsigned int i_st = 0; unsigned char ep_last; bEPPflags.bits.in_isr = 1; i_st = D12_ReadInterruptRegister(); if(i_st != 0) { if(i_st & D12_INT_BUSRESET) { bus_reset(); bEPPflags.bits.bus_reset = 1; } if(i_st & D12_INT_EOT) dma_eot(); if(i_st & D12_INT_SUSPENDCHANGE) bEPPflags.bits.suspend = 1; if(i_st & D12_INT_ENDP0IN) ep0_txdone(); if(i_st & D12_INT_ENDP0OUT) ep0_rxdone(); if(i_st & D12_INT_ENDP1IN) ep1_txdone(); if(i_st & D12_INT_ENDP1OUT) ep1_rxdone(); if(i_st & D12_INT_ENDP2IN) main_txdone(); if(i_st & D12_INT_ENDP2OUT) main_rxdone(); } bEPPflags.bits.in_isr = 0; } 单步只执行为:i_st =0080H(USB Suspend信号发生)===>i_st =00C0H(USB Resume信号)===>i_st =0040H(不知道为什么会这样)===>i_st =0080H(又回出现)这时WINXP会找到 Unkonw 设备,再单步执行i_st =00C0H(USB Resume信号)===>i_st =0000H后面一直都是0000h中断.请哪位DX指点一下.再做不出来,兄弟我就要out拉. |
|
沙发#
发布于:2005-07-29 10:16
out?是over吧。
1,0000h中断?可能是你没有在中断后清除中断标志寄存器,这个寄存器是mcu的(我用的三星4510),不是usb 的。 2,接口应该送进主机信号了,没有?联线有问题。 |
|
板凳#
发布于:2005-07-29 14:24
我用的是外部中断_INT1,不要清除.而D12,只有0-5(ENDP0IN and ENDP1OUT)才清除,老大能不能清楚一点.呵呵
|
|
地板#
发布于:2005-07-30 10:43
问题已解决,是lpc931的输入输出要配好.
|
|