注册 登录
电子工程世界-论坛 返回首页 EEWORLD首页 频道 EE大学堂 下载中心 Datasheet 专题
coolgreen1的个人空间 https://home.eeworld.com.cn/space-uid-386129.html [收藏] [复制] [分享] [RSS]
日志

μcos中如何加入USB中断任务...

已有 1000 次阅读2012-2-20 16:23


DE2-70实验板的工程中加入了一个USB初始化的任务,其中使用了中断,但是貌似不能实现USB初始化...


代码如下:


void USB_Task(void *p_arg)//完成数初始化工作

{

  p_arg = p_arg;

  disable();  

  disconnect_USB();  

  usleep(1000000);

  Hal4D13_ResetDevice();

  bUSBCheck_Device_State.State_bits.DEVICE_DEFAULT_STATE = 1;

  bUSBCheck_Device_State.State_bits.DEVICE_ADDRESS_STATE = 0;

  bUSBCheck_Device_State.State_bits.DEVICE_CONFIGURATION_STATE = 0;

  bUSBCheck_Device_State.State_bits.RESET_BITS = 0;  

  usleep(1000000);

  reconnect_USB();  

  CHECK_CHIP_ID();  

  Hal4D13_AcquireD13(ISP1362_DC_IRQ,(void*)usb_isr);

  enable();  

  bD13flags.bits.verbose=1;

  while (1)

  {

  if (bUSBCheck_Device_State.State_bits.RESET_BITS == 1)

  {

  disable();

  break;  

  }

  if (bD13flags.bits.suspend)

  {

  disable();

  bD13flags.bits.suspend= 0;

  enable();

  suspend_change();  

  } // Suspend Change Handler

  if (bD13flags.bits.DCP_state == USBFSM4DCP_SETUPPROC)

  {

  disable();

  SetupToken_Handler();

  enable();

  } // Setup Token Handler

  if ((bD13flags.bits.DCP_state == USBFSM4DCP_REQUESTPROC) && !ControlData.Abort)

  {

  disable();

  bD13flags.bits.DCP_state = 0x00;

  DeviceRequest_Handler();

  enable();

  } // Device Request Handler

  usleep(1000000);

  if (usb_Ep01Done)

  {

  unsigned char * bbuf = usb_buf;

  usb_Ep01Done = 0;  

  //scpi(bbuf);

  }

  OSTimeDlyHMSM(0, 0, 0, 3);

  }

}


其中中断代码如下:

void usb_isr(void) //注册的中断服务程序

{

  ULONG i_st;

  disable();

  Hal4D13_LockDevice(0);

  bD13flags.bits.At_IRQL1 = 1;

  i_st = Hal4D13_ReadInterruptRegister(); //读中断寄存器


  if(i_st != 0) //根据中断寄存器的值执行不同的服务程序

  {

  if(i_st & D13REG_INTSRC_BUSRESET){ // 0x01

  USB_ISR_DEBUG(("[USB ISR1] Bus Reset\r\n"));

  Isr_BusReset();

  }else if(i_st & D13REG_INTSRC_SUSPEND){ // 0x04

  USB_ISR_DEBUG(("[USB ISR2] Suspend\r\n"));

  Isr_SuspendChange();

  }else if(i_st & D13REG_INTSRC_EOT){

  USB_ISR_DEBUG(("[USB ISR3] EOT (End of Tx)\r\n"));

  Isr_DmaEot();

  }else if(i_st & (D13REG_INTSRC_SOF|D13REG_INTSRC_PSEUDO_SOF)){

  USB_ISR_DEBUG(("[USB ISR4] SOF (start of frame)\r\n"));

  Isr_SOF();

  }else if(i_st & D13REG_INTSRC_SHORT_PACKET){

  USB_ISR_DEBUG(("[USB ISR5] short packet\r\n"));

  Isr_SHORT_PACKET();

  }else if(i_st & D13REG_INTSRC_RESUME){

  USB_ISR_DEBUG(("[USB ISR6] resume\n"));

  Hal4D13_LockDevice(0);

  }

  else

  {

  USB_ISR_DEBUG(("[USB ISR7] other, i_st = %lXh....resume\n", i_st));

  if(i_st & D13REG_INTSRC_EP0OUT)  

  Isr_Ep00RxDone();

  if(i_st & D13REG_INTSRC_EP0IN)

  Isr_Ep00TxDone();

  if(i_st & D13REG_INTSRC_EP01) //400

  Isr_Ep01Done(); //USB中断处理?

  if(i_st & D13REG_INTSRC_EP02) //800

  Isr_Ep02Done();  

  if(i_st & D13REG_INTSRC_EP03)

  Isr_Ep03Done();

  if(i_st & D13REG_INTSRC_EP04)

  Isr_Ep04Done();

  if(i_st & D13REG_INTSRC_EP05)

  Isr_Ep05Done();

  if(i_st & D13REG_INTSRC_EP06)

  Isr_Ep06Done();

  }

  }

  enable();

  bD13flags.bits.At_IRQL1 = 0;

}

主函数如下:

int main(void)

{

  GUI_Init();  

  init_touch();

  init_mouse();

  init_keyboard();

  OSTaskCreate(Start_Task,NULL,(OS_STK *)&task1_stk[TASK_STACKSIZE -1],TASK1_PRIORITY );  

  OSTaskCreate(Main_Task,NULL,(OS_STK *)&task2_stk[TASK_STACKSIZE -1],TASK2_PRIORITY );  

  OSTaskCreate(GUI_Task,NULL,(OS_STK *)&task3_stk[TASK_STACKSIZE -1],TASK3_PRIORITY );  

  OSTaskCreate(USB_Task,NULL,(OS_STK *)&usbtask_stk[TASK_STACKSIZE -1],USBTASK_PRIORITY );  

  OSStart();

  AWG_Generator();  

  return 0;

}

主函数在没有引入USB任务之前功能是都可以实现的...

当USB初始化单独的时候也是可以实现的...

请问怎么才能整合起来啊?


我是μcos 的初学者...

评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册

热门文章