找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4641|回复: 0
收起左侧

LPC214x单片机USB(cdc)与uip移植

[复制链接]
ID:73477 发表于 2015-2-10 00:36 | 显示全部楼层 |阅读模式
一:遇到问题
  1:usb-cdc协议移植出现 SET_LINE_CODING命令响应返回bufferover错误
  2: usb传输速率过快出现单片机死机,程序停止在 while((USBDevIntSt & CDFULL) == 0);     /* 等待DEVINTS寄存器的CDFULL位置
  3:uip移植出现下载程序运行不起来
解决问题
问题一解决添加红色代码
else if (bEPPflags.bits.control_state == USB_RECEIVE)
{                 /* 如果当前为接收状态 if it is receive status */
  i = USB_ReadEndpoint(0, EP0_PACKET_SIZE,
   ControlData.dataBuffer + ControlData.wCount);    /* 从端点 0 读取数据 read from endpoint 0 */
    if((ControlData.DeviceRequest.bRequest==SET_LINE_CODING)&&(ControlData.DeviceRequest.bmRequestType==0x21))
        {
      for(i=0;i<7;i++)
   LineCoding[ i]  = ControlData.dataBuffer[ i];
   single_transmit(0,0 );
  }
  ControlData.wCount += i;
  if( i != EP0_PACKET_SIZE || ControlData.wCount >= ControlData.wLength)
  {                                                         /* 完成接收数据  finish receiving data */
   bEPPflags.bits.setup_packet = 1;          /* 通知contorl_handler()处理SETUP包  inform control_handler() to process SETUP packet */
   bEPPflags.bits.control_state = USB_IDLE;
  }
}
   if((ControlData.DeviceRequest.bRequest==SET_LINE_CODING)&&(ControlData.DeviceRequest.bmRequestType==0x21))
   {
    bEPPflags.bits.control_state = USB_RECEIVE;
   }
else
  bEPPflags.bits.control_state = USB_IDLE;
问题二解决:
由于单片机内部总线速率在15Mhz没有及时响应中断出现寄存器数据别覆盖,
//系统时钟
#define Fosc        12000000UL        //晶振时钟 【Hz】
#define Fcclk      (Fosc * 5)        //系统频率,必须为Fosc的整数倍(1~32),且<=60MHZ
#define Fcco     (Fcclk * 4)       //CCO频率,必须为Fcclk的2、4、8、16倍,范围为156MHz~320MHz
#define Fpclk       (Fcclk / 4) * 2   //VPB时钟频率,提升到30Mhz  提到60Mhz rtc 寄存器无法读取?????
#define FUSBclk   (Fosc * 4)      //48MHz
#define FUSBcco   (FUSBclk * 4)       //usb CCO频率,必须为FUSBclk的2、4、8、16倍,范围为156MHz~320MHz

问题三解决:   
删除程序中调试输出printf调用

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表