[ZLG-ARM] lpc2146 USB超时???????????????????????

[复制链接]
2816|5
 楼主| cunxing 发表于 2008-1-15 16:27 | 显示全部楼层 |阅读模式
   我用LPC2146的实现一个USBAUDIO设备,其中使用了物理端点5(BULK)上传相关的AUDIO消息,但是有时调用UsbWriteEndpoint()之后,会有时不会出现相关的发送中断,出现这种情况可能是USB发送数超时或者其它错误(固件禁止了相关错误中断),但是我再次调用UsbWriteEndpoint()之后,仍然没有发送中断产生.问,如果是超时或者其它中断产生,一定要清楚相关中断位(在没有开相关中断的情况下)后,才能继续调用UsbWriteEndpoint()发送数据吗?
zlgarm 发表于 2008-1-15 16:57 | 显示全部楼层

回复如下:

cunxing,您好<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;一般情况下,只调用我们公司的软件包是不会出现问题的。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;您可以调用如下语句来获取错误代码:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;USB_SendCmd(USBCMD_GET_DEVSTATUS,&nbsp;0);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ucErrCode&nbsp;=&nbsp;USB_GetData(USBDAT_GET_DEVSTATUS);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;查看返回的ucErrCode来判断到底出现的是什么错误。<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;另:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;如果出现了超时或者其它中断,请先清除相关中断位(不管有没有开关中断)后,再继续调用UsbWriteEndpoint()发送数据。<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;如果还不能解决问题,方便的话,请考虑将您的程序贴出来让我们看一下。<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;By&nbsp;zlgarm-wls<br /><br /><br /><br />
 楼主| cunxing 发表于 2008-1-16 14:10 | 显示全部楼层

代码

INT8U&nbsp;UsbInitialize(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;UsbInitHareware();<br />&nbsp;&nbsp;&nbsp;&nbsp;bEPPflags.value&nbsp;=&nbsp;0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;置USB事件标志为0&nbsp;&nbsp;&nbsp;set&nbsp;USB&nbsp;event&nbsp;flags&nbsp;to&nbsp;zero&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(UsbReadTestRegister()&nbsp;!=&nbsp;0xa50f)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//read&nbsp;test&nbsp;register<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;1;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;UsbDeviceIntConfig();<br />&nbsp;&nbsp;&nbsp;&nbsp;UsbConfigEndpoint();<br />&nbsp;&nbsp;&nbsp;&nbsp;UsbSetMode(0x00);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//generate&nbsp;interrupt<br />&nbsp;&nbsp;&nbsp;&nbsp;ReConnectUsb();<br />&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;0;<br />}<br /><br />void&nbsp;UsbMidiSystemConstruct(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;g_UsbMidiErr&nbsp;=&nbsp;UsbInitialize();<br />&nbsp;&nbsp;&nbsp;&nbsp;g_UsbMidiOutBusy&nbsp;=&nbsp;USBOUT_IDLE;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//InitUsbIntrrupt();<br />}<br /><br />void&nbsp;Ep2RxDone(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;INT8U&nbsp;len;<br />&nbsp;&nbsp;&nbsp;&nbsp;INT8U&nbsp;class;<br />&nbsp;&nbsp;&nbsp;&nbsp;INT8U&nbsp;i;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;UsbSelectClrIntEndpoint(4);<br />&nbsp;&nbsp;&nbsp;&nbsp;i&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;len&nbsp;=&nbsp;UsbReadEndpoint(4,&nbsp;sizeof(g_EpBuf),&nbsp;g_EpBuf);<br />&nbsp;&nbsp;&nbsp;&nbsp;class&nbsp;=&nbsp;g_EpBuf[0]&nbsp;&&nbsp;0x0f;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(&nbsp;(len&nbsp;!=&nbsp;0)&nbsp;&&&nbsp;(class&nbsp;&gt=&nbsp;0x04)&nbsp;&&&nbsp;&nbsp;(class&nbsp;&lt&nbsp;0x0f)&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bEPPflags.bits.ep2_rxdone&nbsp;=&nbsp;1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;标识该端点收到数据&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;flag&nbsp;endpoint&nbsp;received&nbsp;data&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;do&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;g_UsbMidiInBuffer[g_UsbMidiInTail][0]&nbsp;=&nbsp;g_EpBuf[i++];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;g_UsbMidiInBuffer[g_UsbMidiInTail][1]&nbsp;=&nbsp;g_EpBuf[i++];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;g_UsbMidiInBuffer[g_UsbMidiInTail][2]&nbsp;=&nbsp;g_EpBuf[i++];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;g_UsbMidiInBuffer[g_UsbMidiInTail][3]&nbsp;=&nbsp;g_EpBuf[i++];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;g_UsbMidiInMessages++;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;g_UsbMidiInTail++;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(g_UsbMidiInTail&nbsp;==&nbsp;USB_MIDIIN_SIZE)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;g_UsbMidiInTail&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(i&nbsp;&lt&nbsp;len)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;class&nbsp;=&nbsp;g_EpBuf&nbsp;&&nbsp;0x0f;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}while((class&nbsp;&gt=&nbsp;0x04)&nbsp;&&&nbsp;&nbsp;(class&nbsp;&lt&nbsp;0x0f));<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /><br /><br />void&nbsp;Usb_LPService(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;INT32U&nbsp;ep_st;<br />&nbsp;&nbsp;&nbsp;&nbsp;ep_st&nbsp;=&nbsp;USBEpIntSt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;读端点中断状态寄存器&nbsp;read&nbsp;endpoint&nbsp;interrupt&nbsp;status&nbsp;register&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;if(ep_st&nbsp;&&nbsp;USB_ENDP00)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ep0RxDone();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;控制端点接收数据处理&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;process&nbsp;controll&nbsp;endpoint&nbsp;receive&nbsp;data&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;if(ep_st&nbsp;&&nbsp;USB_ENDP01)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ep0TxDone();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;控制端点发送数据处理&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;process&nbsp;controll&nbsp;endpoint&nbsp;transmit&nbsp;data&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;if(ep_st&nbsp;&&nbsp;USB_ENDP04)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ep2RxDone();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;逻辑端点2接收数据处理&nbsp;&nbsp;&nbsp;&nbsp;process&nbsp;logic&nbsp;endpoint&nbsp;2&nbsp;receive&nbsp;data&nbsp;*/&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;if(ep_st&nbsp;&&nbsp;USB_ENDP05)&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ep2TxDone();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;逻辑端点2发送数据处理&nbsp;&nbsp;&nbsp;&nbsp;process&nbsp;logic&nbsp;endpoint&nbsp;2&nbsp;transmit&nbsp;data&nbsp;*/&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;USBDevIntClr&nbsp;=&nbsp;SLOWINTERRUPT;<br />}<br /><br />void&nbsp;SendUsbMidiOutEvent(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;INT8U&nbsp;usbbuf[4];<br />&nbsp;&nbsp;&nbsp;&nbsp;INT8U&nbsp;i;<br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(&nbsp;(g_UsbMidiErr)&nbsp;||&nbsp;(g_UsbMidiBulkOkCounter&nbsp;&lt&nbsp;100)&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;((MidiByte1&nbsp;&&nbsp;0xf0)&nbsp;==&nbsp;0xc0)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MidiByte3&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;usbbuf[0]&nbsp;=&nbsp;(MidiByte1&nbsp;&gt&gt&nbsp;4)&nbsp;&&nbsp;0x0f;<br />&nbsp;&nbsp;&nbsp;&nbsp;usbbuf[1]&nbsp;=&nbsp;MidiByte1;<br />&nbsp;&nbsp;&nbsp;&nbsp;usbbuf[2]&nbsp;=&nbsp;MidiByte2;<br />&nbsp;&nbsp;&nbsp;&nbsp;usbbuf[3]&nbsp;=&nbsp;MidiByte3;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(g_UsbMidiOutBusy&nbsp;==&nbsp;USBOUT_BUSY)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt&nbsp;4;&nbsp;i++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;g_UsbMidiOutBuffer[g_UsbMidiInTail]&nbsp;=&nbsp;usbbuf;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OS_ENTER_CRITICAL();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;g_UsbMidiOutMessages++;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OS_EXIT_CRITICAL();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;g_UsbMidiInTail++;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(g_UsbMidiInTail&nbsp;==&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;USB_MIDIOUT_SIZE)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;g_UsbMidiInTail&nbsp;=&nbsp;0;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;else<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OS_ENTER_CRITICAL();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;g_UsbMidiOutBusy&nbsp;=&nbsp;USBOUT_BUSY;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;g_UsbMidiTimeOut&nbsp;=&nbsp;0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OS_EXIT_CRITICAL();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UsbWriteEndpoint(5,&nbsp;4,&nbsp;usbbuf);<br />/*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt&nbsp;200;&nbsp;i++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />*/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /><br /><br />主程序不断调用SendUsbMidiOutEvent()上传消息,用PC上位机软件,监视上传消息,总是在不确定时刻就停止了上传消息.此时把g_UsbMidiOutBusy信号量强制等于USBOUT_IDLE(停止时显然没有来发送中断,清除该信号),使得再次发送,但是仍然没有数据上传,并且也不再产生发送中断.
 楼主| cunxing 发表于 2008-1-16 14:22 | 显示全部楼层

之前用台湾一的一个51核的一个片子

注,我之前用过一个台湾十速51核的USB片子,实现同样的功能,但是我监视到长时间没有来发送中断之后,清除相关信号,再次调UsbWriteEndpoint()发送数据之后,又可以上传数据了,不知道PHILIP这个是怎么回事.为什么再次调用UsbWriteEndpoint()之后仍然没有数据上传上来?<br />
 楼主| cunxing 发表于 2008-1-16 15:05 | 显示全部楼层

补充发送中断处理

上面贴错了一个接收中断处理,应该贴发送中断处理的<br />void&nbsp;Ep2TxDone(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;UsbSelectClrIntEndpoint(5);&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;g_UsbMidiOutBusy&nbsp;=&nbsp;USBOUT_IDLE;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(g_UsbMidiOutMessages&nbsp;!=&nbsp;0)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;g_UsbMidiOutBusy&nbsp;=&nbsp;USBOUT_BUSY;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;g_UsbMidiTimeOut&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;g_UsbMidiOutMessages--;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UsbWriteEndpoint(5,&nbsp;4,&nbsp;g_UsbMidiOutBuffer[g_UsbMidiOutHead++]);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(g_UsbMidiOutHead&nbsp;==&nbsp;USB_MIDIOUT_SIZE)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;g_UsbMidiOutHead&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

62

主题

87

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部