nakayama
驱动牛犊
驱动牛犊
  • 注册日期2005-06-18
  • 最后登录2005-06-18
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:845回复:1

[救命贴]ISP1581关于切换端点后的延时?

楼主#
更多 发布于:2005-06-18 16:32
  我用44b0接ISP1581,通用处理器模式,有nWAIT等待,所以访问周期可以保证〉80ns
ADDR有效和CS拉低同时发生
15ns后RD或者WR拉低,低电平维持31ns再拉高
15ns后CS再拉高,同时ADDR无效

32MHz系统时钟下正常
64MHz就不正常了:
在收到第一个Setup包后是这样
void USB_Setup(void)
{
       INT16U       temp;
       int i;
       ISP1581_SetEndpointIndex(0x20); // 选择端点0的SETUP缓冲区
       temp=ISP1581_GetDataPort();
       USB_DEVICE_REQUEST.bmRequestType=temp;              // 低8位
       USB_DEVICE_REQUEST.bRequest=temp>>8;              // 高8位
       USB_DEVICE_REQUEST.wValue=ISP1581_GetDataPort();
       ..........
问题出来了,我刚切换端点到EP0SETUP,马上读的时候居然读出来一个随机值,接着才是0x0680
假如在ISP1581_SetEndpointIndex(0x20)后写几个nop类似语句,那么就正常了
大家帮帮我啊,我真不希望恢复32M的慢速度去,难道一个写接着一个读,访问时间大于200ns?
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2005-06-20 10:52
你要按照datasheet上的时序要求,至少留出30%的余量
小于80ns我也是过,60个左右也可以,再小很可能会出问题
对于高速的情况,你可以加延时来做
游客

返回顶部