wdy9927
驱动老牛
驱动老牛
  • 注册日期2003-08-04
  • 最后登录2017-02-04
  • 粉丝0
  • 关注0
  • 积分89分
  • 威望143点
  • 贡献值0点
  • 好评度23点
  • 原创分0分
  • 专家分0分
  • 社区居民
阅读:1486回复:3

usb端点的程序。 需要指点呀。 很菜的问题,有分。

楼主#
更多 发布于:2003-08-26 11:00
bEPIndex=0x0E    //即端点7out
ISP1581_SetEPIndex(uchar bEPIndex) ;

bEPIndex=0x09  //即端点4in
ISP1581_SetEPIndex(uchar bEPIndex) ;

outport(rega_dcount, len);  //rega_dcount   0xff1c   缓冲区长度寄存器

void ISP1581_SetEPIndex(uchar bEPIndex)  
{
 outportb(rega_epindex, bEPIndex);  // #define rega_epindex    0x2c  端点索引寄存器
  //即把bEPIndex 数据放到地址rega_epindex里
}

//----------------------------------------------------------
   len=1;
   *buf=3;
   for(i=0; i<len; i++, buf++ )
   {
    outportb(rega_dport,*buf);   //#define rega_dport  0x20  数据端口寄存器
   }


//========================================================
void outportb(unsigned short nPort, unsigned char nVal)
{
unsigned char xdata *exAddress;
exAddress = nPort;
ISP1581_CS=0;
*exAddress = nVal;
ISP1581_CS=1;
}
//--------------------------------------------------------

这段程序的作用是什么?? 哪位dx能解释一下。 解释好的另放40分。:D :D :D
wdy9927
驱动老牛
驱动老牛
  • 注册日期2003-08-04
  • 最后登录2017-02-04
  • 粉丝0
  • 关注0
  • 积分89分
  • 威望143点
  • 贡献值0点
  • 好评度23点
  • 原创分0分
  • 专家分0分
  • 社区居民
沙发#
发布于:2003-08-26 11:15
上半部分是把7out 和 4in 定给 端点索引寄存器。然后把1给缓冲区长度寄存器。

下半部分应该是读数据缓冲区吧。

我暂时就这么理解, 但是不明白端点索引寄存器的具体作用,和读数据缓冲区的时候,数据哪来的? 读到哪去了??  

初学usb, 实在是菜鸟, 问题弱了点 。 还请指教。
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-08-26 12:32
bEPIndex=0x0E    //即端点7out
ISP1581_SetEPIndex(uchar bEPIndex) ; //索引端点7OUT,也就是选定该端点,然后可以对该端点进行设置和读。

bEPIndex=0x09  //即端点4in
ISP1581_SetEPIndex(uchar bEPIndex) ; //索引端点4IN,同上,可以对该端点进行写,你这个命令执行后,前面那个就失效了,因为同一时间只能索引一个端点。

outport(rega_dcount, len);  //rega_dcount   0xff1c   缓冲区长度寄存器//把要写的数据长度写入缓冲区长度寄存器,这个寄存器会自动记录你写入端点数据的个数,当长度达到len是端点生效,如果len大于端点最大包大小,那么前面是一些满包自动生效,最后一个不满包或者空包也会生效。

void ISP1581_SetEPIndex(uchar bEPIndex)  
{
 outportb(rega_epindex, bEPIndex);  // #define rega_epindex    0x2c  端点索引寄存器
  //即把bEPIndex 数据放到地址rega_epindex里
}

//----------------------------------------------------------
   len=1;
   *buf=3;
   for(i=0; i<len; i++, buf++ )
   {
    outportb(rega_dport,*buf);   //#define rega_dport  0x20  数据端口寄存器
   }//往端点写一个字节的数据,具体往那个端点写就要看你在运行这几行之前索引的是那个端点了,比如如果是ep4in,那么就是往端点4in里面写入1个字节数据。


//========================================================
void outportb(unsigned short nPort, unsigned char nVal)
{
unsigned char xdata *exAddress;//首先定义一个指针
exAddress = nPort;//指针指向要写入数据的地址
ISP1581_CS=0;//不知道你的ISP1581_CS是干什么的,因此不好说,不过从字面意思上看没什么用处,因为一般情况下你用c语言写数据的时候cs是自动有效的,你不用手动设置它的值。
*exAddress = nVal;//把指定的值写入指定的地址,
ISP1581_CS=1;//如前
}//这个函数就是往指定的地址nport写入指定的数据nval。
//--------------------------------------------------------

这段程序的作用是什么?? 哪位dx能解释一下。 解释好的另放40分。:D :D :D



给分吧,你如果食言的话以后就不回答你的问题了 :D :D :D

更详细的信息情参考isp1581的datasheet,如果你不想看英文版的,周立功的网站上有中文版的,不过我一只看的是英文版 :D
wdy9927
驱动老牛
驱动老牛
  • 注册日期2003-08-04
  • 最后登录2017-02-04
  • 粉丝0
  • 关注0
  • 积分89分
  • 威望143点
  • 贡献值0点
  • 好评度23点
  • 原创分0分
  • 专家分0分
  • 社区居民
地板#
发布于:2003-08-26 14:58
我的e文不是很好。 所以看中文的。 我也是那么理解的, 但是不明白这两个放到一起有什么作用, 还以为这里是读, 那里就写到那了呢。

这只能给20分。 我在发2个新帖。给你放分。

:D 上次帮忙还没答谢你呢。 :P
游客

返回顶部