apmusb
游客
游客
阅读:1168回复:4

一个迷惑的问题――望指教!!!

楼主#
更多 发布于:2002-06-08 16:26
在看ZBoard的固件程序的时候,有点迷惑了!那里面的
void USBVendorRequest_ReadCode(void)
{
unsigned char nLen;
// bZBoardFlags.bits.bRead = TRUE;
CodeData.wCodeAddress = ControlData.DeviceRequest.wIndex;
CodeData.wCodeLength = ControlData.DeviceRequest.wValue;
CodeData.wCodeCount = 0;
CodeData.pCodeData = GenBuf;
nLen = CodeData.wCodeLength;
if(nLen > EP2_TX_FIFO_SIZE)
nLen = EP2_TX_FIFO_SIZE;
// Read data from flash
FlashRead(CodeData.wCodeAddress, CodeData.pCodeData, nLen);
nLen = USBD12_WriteEndpoint(5, CodeData.pCodeData, nLen);
CodeData.wCodeCount += nLen;
CodeData.wCodeAddress += nLen;
// Send a zero packet to finish this control transfer
USB_Single_Transmit(0, 0);
}

void ISRx_Main_TxDone(void)
{
unsigned short nLen;
USBD12_ReadLastTransactionStatus(5); /* Clear interrupt flag */

nLen = CodeData.wCodeLength - CodeData.wCodeCount;
if(nLen != 0)
{
if(nLen > EP2_TX_FIFO_SIZE)
nLen = EP2_TX_FIFO_SIZE;

FlashRead(CodeData.wCodeAddress, CodeData.pCodeData, nLen);
nLen = USBD12_WriteEndpoint(5, CodeData.pCodeData, nLen);

CodeData.pCodeData += nLen;
if(CodeData.pCodeData > (GenBuf + sizeof(GenBuf) / 2))
CodeData.pCodeData = GenBuf;
CodeData.wCodeCount += nLen;
CodeData.wCodeAddress += nLen;
}
}
这两个函数分别在ZBoard的ISR.C和VDOR.C中定义的,好象都能实现数据从endpoin2进行IN呀!是不是定义重复了!!!我的理解对吗?
还有一个问题就是这种VendorRequest的传输方式是控制传输还是Bulk传输啊?
laiqing
驱动小牛
驱动小牛
  • 注册日期2002-02-27
  • 最后登录2013-08-28
  • 粉丝5
  • 关注0
  • 积分46分
  • 威望104点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-06-08 17:23
首先这两个函数有不同的用途,USBVendorRequest_ReadCode()是
根据厂商自定义请求从FLASH中读取一段数据写到端点5中去,然后上位机用READFILE()读取数据时,取走在USBVendorRequest_ReadCode()函数中写到端点5的数据,并产生中断,这个中断就会调用ISRx_Main_TxDone(void)继续送数据到端点5。以后同里。必须先往端点5中送了一次数据后,上位机用READFILE()时才会产生中断。
这种VendorRequest的传输方式是控制传输还是Bulk传输啊?
看你的数据和VendorRequest是通过什么端点进行传输,端点是指定用什么传输方式,那么就是什么传输了,例如端点5用BULK,那就是BULK。



apmusb
游客
游客
板凳#
发布于:2002-06-08 17:44
哇!laiqing兄的解释真是太棒了!给分!!!
我的EMail:lymljw@163.com 多交流啊!!!
laiqing
驱动小牛
驱动小牛
  • 注册日期2002-02-27
  • 最后登录2013-08-28
  • 粉丝5
  • 关注0
  • 积分46分
  • 威望104点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-06-08 18:51
只是自己开发USB的一点体会,以后有空多交流。shenjinhua@xty.com.cn
caiyy
驱动牛犊
驱动牛犊
  • 注册日期2001-10-08
  • 最后登录2003-01-10
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-06-09 14:27
请问那么什么时候调用USBVendorRequest_ReadCode()函数呢?起码ISRx_Main_TxDone(void)函数是产生硬件中断时被调用的。
游客

返回顶部