⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 temp2.c

📁 vxWorks下pc1394的驱动程序
💻 C
字号:
   ulDescAdrs = ;

   ulTempData = pc1394DevGetAsyncReqReceiveCtxCtl();

   if (list)
      {
      printf("pc1394ConfigRun: AsyncReqReceiveCtxCtl = 0x%.8x\n", ulTempData);
      }

   if (ulTempData & 0x00008000)
      {
      printf("pc1394ConfigRun: AsyncReqReceiveContextControl is running.\n");
      iStatus = pc1394DevClrAsyncReqReceiveCtxCtl(0x00008000);
      if (iStatus == ERROR)
         {
         
         }
      pciWriteLong((int)(pPc1394Dev.pciControllerSpace0 + SELFID_BUFFER_ADR), 0);
      free(selfIDBuf);
      free(pAsyOutputLastI);
      free(pAsyRecReqCtxBuf);
      free(pAsyRecRespCtxBuf);
      free(pAsyRecReqInputMoreDesc);
      return(ERROR);
      }

   if (ulTempData & 0x00000800)
      {
      printf("pc1394ConfigRun: AsyncReqReceiveContextControl is dead.\n");
      pciWriteLong((int)(pPc1394Dev.pciControllerSpace0 + SELFID_BUFFER_ADR), 0);
      free(selfIDBuf);
      free(pAsyOutputLastI);
      free(pAsyRecReqCtxBuf);
      free(pAsyRecRespCtxBuf);
      free(pAsyRecReqInputMoreDesc);
      return(ERROR);
      }

   if (ulTempData & 0x00000400)
      {
      printf("pc1394ConfigRun: AsyncReqReceiveContextControl is active.\n");
      pciWriteLong((int)(pPc1394Dev.pciControllerSpace0 + SELFID_BUFFER_ADR), 0);
      free(selfIDBuf);
      free(pAsyOutputLastI);
      free(pAsyRecReqCtxBuf);
      free(pAsyRecRespCtxBuf);
      free(pAsyRecReqInputMoreDesc);
      return(ERROR);
      }

   /* 
      For each AR context (Request and Receive) Z may be either 1 to indicate 
      that descriptorAddress points to a valid command descriptor, or 0 to 
      indicate that there are no descriptors in the context program. 
   */
   iStatus = pc1394DevSetAsyncReqReceiveCmdPtr(ulDescAdrs, 1);

   if (iStatus == ERROR)
      {
      printf("pc1394ConfigRun: pc1394DevSetAsyncReqReceiveCmdPtr failed.\n");
      pciWriteLong((int)(pPc1394Dev.pciControllerSpace0 + SELFID_BUFFER_ADR), 0);
      free(selfIDBuf);
      free(pAsyOutputLastI);
      free(pAsyRecReqCtxBuf);
      free(pAsyRecRespCtxBuf);
      free(pAsyRecReqInputMoreDesc);
      return(ERROR);
      }
      
   if (list)
      {
      ulTempData = pc1394DevGetAsyncReqReceiveCmdPtr();
      printf("pc1394ConfigRun: AsyncReqReceiveCmdPtr = 0x%.8x\n", ulTempData);
      }

   ulTempData = 0x00008000;
   
   iStatus = pc1394DevSetAsyncReqReceiveCtxCtl(ulTempData);

   if (iStatus == ERROR)
      {
      printf("pc1394ConfigRun: pc1394DevSetAsyncReqReceiveCtxCtl failed.\n");
      pciWriteLong((int)(pPc1394Dev.pciControllerSpace0 + SELFID_BUFFER_ADR), 0);
      free(selfIDBuf);
      free(pAsyOutputLastI);
      free(pAsyRecReqCtxBuf);
      free(pAsyRecRespCtxBuf);
      free(pAsyRecReqInputMoreDesc);
      return(ERROR);
      }
      
   if (list)
      {
      ulTempData = pc1394DevGetAsyncReqReceiveCtxCtl();
      printf("pc1394ConfigRun: AsyncReqReceiveCtxCtl = 0x%.8x\n", ulTempData);
      }

   iGetCount = 0;
   ulTempData = 0;

   while ((!ulTempData) && (iGetCount < 30))
      {
      taskDelay(1);
      
      ulIntEvent = pc1394DevGetIntEvent();

      ulTempData = ulIntEvent & DATA_BIT4;

      iGetCount ++;
      }   

   if (list)
      {
      printf("pc1394ConfigRun: IntEvent = 0x%.8x\n", ulIntEvent);
      }

   if (list)
      {
      printf("pc1394ConfigRun: IntEvent.RQPkt = 0x%.2x\n", ulTempData);
      printf("pc1394ConfigRun: iGetCount = %d\n", iGetCount);
      }

   if ((!ulTempData) && (iGetCount == 30))
      {
      printf("pc1394ConfigRun: can't Get IntEvent.RQPkt.\n");
      iStatus = pc1394DevClrAsyncReqReceiveCtxCtl(0x00008000);
      if (iStatus == ERROR)
         {
         
         }

      if (list)
         {
         ulTempData = pc1394DevGetAsyncReqReceiveCtxCtl();
         printf("pc1394ConfigRun: AsyncReqReceiveCtxCtl = 0x%.8x\n", ulTempData);
         }
      
      pciWriteLong((int)(pPc1394Dev.pciControllerSpace0 + SELFID_BUFFER_ADR), 0);
      free(selfIDBuf);
      free(pAsyOutputLastI);
      free(pAsyRecReqCtxBuf);
      free(pAsyRecRespCtxBuf);
      free(pAsyRecReqInputMoreDesc);
      return(ERROR);
      }

   if (list)
      {
      printf("pc1394ConfigRun: complete receive of an AR DMA request INPUT_MORE command.\n");
      ulTempData = pc1394DevGetIntEvent();
      printf("pc1394ConfigRun: IntEvent = 0x%.8x\n", ulTempData);
      }

   ulTempData = DATA_BIT4;

   iStatus = pc1394DevSetIntEvent(ulTempData);
   if (iStatus == ERROR)
      {
      }

   if (list)
      {
      ulTempData = pc1394DevGetAsyncReqReceiveCtxCtl();
      printf("pc1394ConfigRun: AsyncReqReceiveCtxCtl = 0x%.8x\n", ulTempData);
      ulTempData = pc1394DevGetIntEvent();
      printf("pc1394ConfigRun: IntEvent = 0x%.8x\n", ulTempData);
      }


/****************************************************/
   iGetCount = 0;
   ulTempData = 0;
   while ((!ulTempData) && (iGetCount < 30))
      {
      taskDelay(1);

      ulTempData = (pAsyRecReqInputMoreDesc->xferStatus) & 0x0400;

      iGetCount ++;
      }

   if (list)
      {
      printf("pc1394ConfigRun: pAsyRecReqInputMoreDesc->xferStatus = 0x%.4x\n", pAsyRecReqInputMoreDesc->xferStatus);
      printf("pc1394ConfigRun: iGetCount = %d\n", iGetCount);
      }
   
   if ((!ulTempData) && (iGetCount == 30))
      {
      printf("pc1394ConfigRun: can't Get pAsyRecReqInputMoreDesc->xferStatus.\n");
      iStatus = pc1394DevClrAsyncReqReceiveCtxCtl(0x00008000);
      if (iStatus == ERROR)
         {
         
         }
      pciWriteLong((int)(pPc1394Dev.pciControllerSpace0 + SELFID_BUFFER_ADR), 0);
      free(selfIDBuf);
      free(pAsyOutputLastI);
      free(pAsyRecReqCtxBuf);
      free(pAsyRecRespCtxBuf);
      free(pAsyRecReqInputMoreDesc);
      return(ERROR);
      }

   ulTempData = (pAsyRecReqInputMoreDesc->xferStatus) & 0x0800;
   if (ulTempData)
      {
      printf("pc1394ConfigRun: The Host Controller encounters a fatal error.\n");
      ulTempData = 0x00008000;
      iStatus = pc1394DevClrAsyncReqTransCtxCtl(ulTempData);
      if (iStatus == ERROR)
         {
         printf("pc1394ConfigRun: pc1394DevSetAsyncReqTransCtxCtl failed.\n");
         pciWriteLong((int)(pPc1394Dev.pciControllerSpace0 + SELFID_BUFFER_ADR), 0);
         free(selfIDBuf);
         free(pAsyOutputLastI);
         free(pAsyRecReqCtxBuf);
         free(pAsyRecRespCtxBuf);
         free(pAsyRecReqInputMoreDesc);
         return(ERROR);
         }
      
      if (list)
         {
         ulTempData = pc1394DevGetAsyncReqReceiveCtxCtl();
         printf("pc1394ConfigRun: AsyncReqReceiveCtxCtl = 0x%.8x\n", ulTempData);
         }
      
      pciWriteLong((int)(pPc1394Dev.pciControllerSpace0 + SELFID_BUFFER_ADR), 0);
      free(selfIDBuf);
      free(pAsyOutputLastI);
      free(pAsyRecReqCtxBuf);
      free(pAsyRecRespCtxBuf);
      free(pAsyRecReqInputMoreDesc);
      return(ERROR);
      }

   if (list)
      {
      ulTempData = pc1394DevGetAsyncReqReceiveCtxCtl();
      printf("pc1394ConfigRun: AsyncReqReceiveCtxCtl = 0x%.8x\n", ulTempData);
      ulTempData = (unsigned long)pAsyRecReqInputMoreDesc->timeStamp;   
      printf("pc1394ConfigRun: asynchrous request receive successfully at timeStamp 0x%.8x.\n", ulTempData);
      }

   pTempBuf = (unsigned long *)pAsyRecReqInputMoreDesc;
   
   if (list)
      {
      printf("pc1394ConfigRun: after asynchrous receive successfully,read Asy receive request Desc value.\n");
      printf("pc1394ConfigRun: pTempBuf[0] = 0x%.8x\n", pTempBuf[0]);
      printf("pc1394ConfigRun: pTempBuf[1] = 0x%.8x\n", pTempBuf[1]);
      printf("pc1394ConfigRun: pTempBuf[2] = 0x%.8x\n", pTempBuf[2]);
      printf("pc1394ConfigRun: pTempBuf[3] = 0x%.8x\n", pTempBuf[3]);
      printf("pc1394ConfigRun: pTempBuf[4] = 0x%.8x\n", pTempBuf[4]);
      printf("pc1394ConfigRun: pTempBuf[5] = 0x%.8x\n", pTempBuf[5]);
      printf("pc1394ConfigRun: pTempBuf[6] = 0x%.8x\n", pTempBuf[6]);
      printf("pc1394ConfigRun: pTempBuf[8] = 0x%.8x\n", pTempBuf[7]);
      }

/*************************************************/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -