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

📄 hfctldevaccesstest.c

📁 vxworks下跳频控制的驱动
💻 C
📖 第 1 页 / 共 5 页
字号:

      iWaitCount++;
      }

   if ((!ucTemp) && (iWaitCount == 30))
      {
      printf("hfCtlDevDmaReadTest: DMA WAIT TIME OUT.\n");

#if 0
      /* DMA Abort process */
      iStatus = HFCtlPmcGetRegDmaChannel0CmdStatus(iHfCtlFd, pTempCharData);
      if (iStatus == ERROR)
         {
         printf("hfCtlDevDmaReadTest: HFCtlPmcGetRegDmaChannel0CmdStatus() failed.\n");
         free(pDmaDataAdrs);
         close(iHfCtlFd);
         return(ERROR);
         }
      
      ucRegCharData = (*pTempCharData) & ((unsigned char)(~DATA_BIT0));  /* disable DMA channel 0 */
      iStatus = HFCtlPmcSetRegDmaChannel0CmdStatus(iHfCtlFd, ucRegCharData);
      if (iStatus == ERROR)
         {
         printf("hfCtlDevDmaReadTest: HFCtlPmcSetRegDmaChannel0CmdStatus() failed.\n");
         free(pDmaDataAdrs);
         close(iHfCtlFd);
         return(ERROR);
         }

      ucRegCharData = ucRegCharData | DATA_BIT2;
      iStatus = HFCtlPmcSetRegDmaChannel0CmdStatus(iHfCtlFd, ucRegCharData);
      if (iStatus == ERROR)
         {
         printf("hfCtlDevDmaReadTest: HFCtlPmcSetRegDmaChannel0CmdStatus() failed.\n");
         free(pDmaDataAdrs);
         close(iHfCtlFd);
         return(ERROR);
         }

      ucRegCharData = ucRegCharData | DATA_BIT1;
      iStatus = HFCtlPmcSetRegDmaChannel0CmdStatus(iHfCtlFd, ucRegCharData);
      if (iStatus == ERROR)
         {
         printf("hfCtlDevDmaReadTest: HFCtlPmcSetRegDmaChannel0CmdStatus() failed.\n");
         free(pDmaDataAdrs);
         close(iHfCtlFd);
         return(ERROR);
         }
#endif /* if 0 */

      free(pDmaDataAdrs);
      close(iHfCtlFd);
      return(ERROR);
      }

   cacheInvalidate(DATA_CACHE, pDmaDataAdrs, iDmaByteSize);

   for(i = 0; i < (iDmaByteSize / 4); i++)
      {
      printf("hfCtlDevDmaReadTest: pDmaDataAdrs[%d] = 0x%.8x\n", i, pDmaDataAdrs[i]);
      }

   /* free the memory */
   free(pDmaDataAdrs);

   /* close the device */
   close(iHfCtlFd);

   return(OK);
}


STATUS hfCtlDevDmaWriteTest(int iOffset, int iDmaByteSize, int iList)
{
   int   i;
   int   iDmaTempSize;
   int   iWaitCount;
   int   iHfCtlFd;
   int   iStatus;
   char  hfCtldevName[15];
   unsigned long ulDmaDataPciAdrs;
   unsigned long ulRegData;
   unsigned char ucRegCharData;
   unsigned char ucTemp;
   unsigned char ucTemp1;   
   unsigned long *pTempData;
   unsigned char *pTempCharData;
   unsigned long *pLocalSpace0Adrs;
   unsigned long *pLocalSpace1Adrs;
   unsigned long *pDmaDataAdrs;

   iDmaTempSize = iDmaByteSize;

   pDmaDataAdrs = malloc(iDmaByteSize);

   if (pDmaDataAdrs == NULL)
      {
      printf("hfCtlDevDmaWriteTest: memory allocation failed!\n");
      return(ERROR);
      }

   ulDmaDataPciAdrs = (unsigned long)LOCAL2PCI_MEM((unsigned long)pDmaDataAdrs);

   printf("hfCtlDevDmaWriteTest: pDmaDataAdrs = 0x%.8x\n", pDmaDataAdrs);
   printf("hfCtlDevDmaWriteTest: ulDmaDataPciAdrs = 0x%.8x\n", ulDmaDataPciAdrs);

   for(i = 0; i < (iDmaByteSize / 4); i++)
      {
      pDmaDataAdrs[i] = 0x12121212 + i * 5;
      }

   cacheFlush(DATA_CACHE, pDmaDataAdrs, iDmaByteSize);

   if (iDevTestDebug)
      {
      for(i = 0; i < (iDmaByteSize / 4); i++)
         {
         printf("hfCtlDevDmaWriteTest: pDmaDataAdrs[%d] = 0x%.8x\n", i, pDmaDataAdrs[i]);
         }
      }

	sprintf(hfCtldevName, "/HFCtlPmc/0");
   
   /* open the device */
   iHfCtlFd = open(hfCtldevName, O_RDWR, 0644);

   if (iHfCtlFd == ERROR)
      {
      printf("hfCtlDevDmaWriteTest: Unable to open HfCtlDev device!\n");
      free(pDmaDataAdrs);
      return(ERROR);
      }

   /* get Local configuration register LAS0BA */
   iStatus = HFCtlPmcGetRegLocalAdrsSpace0BaseAdrs(iHfCtlFd, pTempData);
   if (iStatus == ERROR)
      {
      printf("hfCtlDevDmaWriteTest: HFCtlPmcGetRegLocalAdrsSpace0BaseAdrs() failed.\n");
      free(pDmaDataAdrs);
      close(iHfCtlFd);
      return(ERROR);
      }

   if (iDevTestDebug)
      {
      printf("hfCtlDevDmaWriteTest: LAS0BA = 0x%.8x\n", *pTempData);
      }

   /* set Local configuration register LAS0BA bit 0 */
   ulRegData = (*pTempData) | 0x1;

   iStatus = HFCtlPmcSetRegLocalAdrsSpace0BaseAdrs(iHfCtlFd, ulRegData);
   if (iStatus == ERROR)
      {
      printf("hfCtlDevDmaWriteTest: HFCtlPmcSetRegLocalAdrsSpace0BaseAdrs() failed.\n");
      free(pDmaDataAdrs);
      close(iHfCtlFd);
      return(ERROR);
      }

   /* get Local configuration register LAS0BA */
   iStatus = HFCtlPmcGetRegLocalAdrsSpace0BaseAdrs(iHfCtlFd, pTempData);
   if (iStatus == ERROR)
      {
      printf("hfCtlDevDmaWriteTest: HFCtlPmcGetRegLocalAdrsSpace0BaseAdrs() failed.\n");
      free(pDmaDataAdrs);
      close(iHfCtlFd);
      return(ERROR);
      }

   if (iDevTestDebug)
      {
      printf("hfCtlDevDmaWriteTest: after set LAS0BA, LAS0BA = 0x%.8x\n", *pTempData);
      }

   /* get Local configuration register MARBR */
   iStatus = HFCtlPmcGetRegModeArbitration(iHfCtlFd, pTempData);
   if (iStatus == ERROR)
      {
      printf("hfCtlDevDmaWriteTest: HFCtlPmcGetRegModeArbitration() failed.\n");
      free(pDmaDataAdrs);
      close(iHfCtlFd);
      return(ERROR);
      }

   if (iDevTestDebug)
      {
      printf("hfCtlDevDmaWriteTest: MARBR = 0x%.8x\n", *pTempData);
      }

   /* set Local configuration register MARBR */
   ulRegData = 0x00210010;

   iStatus = HFCtlPmcSetRegModeArbitration(iHfCtlFd, ulRegData);
   if (iStatus == ERROR)
      {
      printf("hfCtlDevDmaWriteTest: HFCtlPmcSetRegModeArbitration() failed.\n");
      free(pDmaDataAdrs);
      close(iHfCtlFd);
      return(ERROR);
      }

   /* get Local configuration register MARBR */
   iStatus = HFCtlPmcGetRegModeArbitration(iHfCtlFd, pTempData);
   if (iStatus == ERROR)
      {
      printf("hfCtlDevDmaWriteTest: HFCtlPmcGetRegModeArbitration() failed.\n");
      free(pDmaDataAdrs);
      close(iHfCtlFd);
      return(ERROR);
      }

   if (iDevTestDebug)
      {
      printf("hfCtlDevDmaWriteTest: after set MARBR, MARBR = 0x%.8x\n", *pTempData);
      }

   /* get Local configuration register BIGEND */
   iStatus = HFCtlPmcGetRegBigEndianDesc(iHfCtlFd, pTempCharData);
   if (iStatus == ERROR)
      {
      printf("hfCtlDevDmaWriteTest: HFCtlPmcGetRegBigEndianDesc() failed.\n");
      free(pDmaDataAdrs);
      close(iHfCtlFd);
      return(ERROR);
      }

   if (iDevTestDebug)
      {
      printf("hfCtlDevDmaWriteTest: BIGEND = 0x%.8x\n", *pTempCharData);
      }

   /* set Local configuration register BIGEND */
   ucRegCharData = 0xee; /*0x00;*/

   if (iDevTestDebug)
      {
      printf("hfCtlDevDmaReadTest: ucRegCharData = 0x%.2x\n", ucRegCharData);
      }

   iStatus = HFCtlPmcSetRegBigEndianDesc(iHfCtlFd, ucRegCharData);

   if (iStatus == ERROR)
      {
      printf("hfCtlDevDmaReadTest: HFCtlPmcSetRegBigEndianDesc() failed.\n");
      close(iHfCtlFd);
      return(ERROR);
      }

   /* get Local configuration register BIGEND */
   iStatus = HFCtlPmcGetRegBigEndianDesc(iHfCtlFd, pTempCharData);

   if (iStatus == ERROR)
      {
      printf("hfCtlDevDmaReadTest: HFCtlPmcGetRegBigEndianDesc() failed.\n");
      close(iHfCtlFd);
      return(ERROR);
      }

   if (iDevTestDebug)
      {
      printf("hfCtlDevDmaReadTest: after set BIGEND, BIGEND = 0x%.8x\n", *pTempCharData);
      }

   /* get Local configuration register LMISC1 */
   iStatus = HFCtlPmcGetRegLocalMisc1(iHfCtlFd, pTempCharData);
   if (iStatus == ERROR)
      {
      printf("hfCtlDevDmaWriteTest: HFCtlPmcGetRegLocalMisc1() failed.\n");
      free(pDmaDataAdrs);
      close(iHfCtlFd);
      return(ERROR);
      }

   if (iDevTestDebug)
      {
      printf("hfCtlDevDmaWriteTest: LMISC1 = 0x%.8x\n", *pTempCharData);
      }

   /* set Local configuration register LMISC1 */
   ucRegCharData = 0x05;

   iStatus = HFCtlPmcSetRegLocalMisc1(iHfCtlFd, ucRegCharData);
   if (iStatus == ERROR)
      {
      printf("hfCtlDevDmaWriteTest: HFCtlPmcSetRegLocalMisc1() failed.\n");
      free(pDmaDataAdrs);
      close(iHfCtlFd);
      return(ERROR);
      }

   /* get Local configuration register LMISC1 */
   iStatus = HFCtlPmcGetRegLocalMisc1(iHfCtlFd, pTempCharData);
   if (iStatus == ERROR)
      {
      printf("hfCtlDevDmaWriteTest: HFCtlPmcGetRegLocalMisc1() failed.\n");
      free(pDmaDataAdrs);
      close(iHfCtlFd);
      return(ERROR);
      }

   if (iDevTestDebug)
      {
      printf("hfCtlDevDmaWriteTest: after set LMISC1, LMISC1 = 0x%.8x\n", *pTempCharData);
      }

   /* get Local configuration register LMISC2 */
   iStatus = HFCtlPmcGetRegLocalMisc2(iHfCtlFd, pTempCharData);
   if (iStatus == ERROR)
      {
      printf("hfCtlDevDmaWriteTest: HFCtlPmcGetRegLocalMisc2() failed.\n");
      free(pDmaDataAdrs);
      close(iHfCtlFd);
      return(ERROR);
      }

   if (iDevTestDebug)
      {
      printf("hfCtlDevDmaWriteTest: LMISC2 = 0x%.8x\n", *pTempCharData);
      }

   /* set Local configuration register LMISC2 */
   ucRegCharData = 0x01;
   iStatus = HFCtlPmcSetRegLocalMisc2(iHfCtlFd, ucRegCharData);
   if (iStatus == ERROR)
      {
      printf("hfCtlDevDmaWriteTest: HFCtlPmcSetRegLocalMisc2() failed.\n");
      free(pDmaDataAdrs);
      close(iHfCtlFd);
      return(ERROR);
      }

   /* get Local configuration register LMISC2 */
   iStatus = HFCtlPmcGetRegLocalMisc2(iHfCtlFd, pTempCharData);
   if (iStatus == ERROR)
      {
      printf("hfCtlDevDmaWriteTest: HFCtlPmcGetRegLocalMisc2() failed.\n");
      free(pDmaDataAdrs);
      close(iHfCtlFd);
      return(ERROR);
      }

   if (iDevTestDebug)
      {
      printf("hfCtlDevDmaWriteTest: after set LMISC2, LMISC2 = 0x%.8x\n", *pTempCharData);
      }

   /* get Local configuration register LBRD0 */
   iStatus = HFCtlPmcGetRegLocalBusSpace0RegionDesc(iHfCtlFd, pTempData);
   if (iStatus == ERROR)
      {
      printf("hfCtlDevDmaWriteTest: HFCtlPmcGetRegLocalBusSpace0RegionDesc() failed.\n");
      free(pDmaDataAdrs);
      close(iHfCtlFd);
      return(ERROR);
      }

   if (iDevTestDebug)
      {
      printf("hfCtlDevDmaWriteTest: LBRD0 = 0x%.8x\n", *pTempData);
      }

   /* set Local configuration register LBRD0 */
   ulRegData = 0x80430303;

#if 0
   ulRegData = 0x80430343; /* enable READY */
#endif /* if 0 */

   iStatus = HFCtlPmcSetRegLocalBusSpace0RegionDesc(iHfCtlFd, ulRegData);

   if (iStatus == ERROR)
      {
      printf("hfCtlDevDmaWriteTest: HFCtlPmcSetRegLocalBusSpace0RegionDesc() failed.\n");
      free(pDmaDataAdrs);
      close(iHfCtlFd);
      return(ERROR);
      }

   /* get Local configuration register LBRD0 */
   iStatus = HFCtlPmcGetRegLocalBusSpace0RegionDesc(iHfCtlFd, pTempData);
   if (iStatus == ERROR)
      {
      printf("hfCtlDevDmaWriteTest: HFCtlPmcGetRegLocalBusSpace0RegionDesc() failed.\n");
      free(pDmaDataAdrs);
      close(iHfCtlFd);
      return(ERROR);
      }

   if (iDevTestDebug)
      {
      printf("hfCtlDevDmaWriteTest: after set LBRD0, LBRD0 = 0x%.8x\n", *pTempData);
      }

   /* get DMA register DMAMODE0 */
   iStatus = HFCtlPmcGetRegDmaChannel0Mode(iHfCtlFd, pTempData);
   if (iStatus == ERROR)
      {
      printf("hfCtlDevDmaWriteTest: HFCtlPmcGetRegDmaChannel0Mode() failed.\n");
      free(pDmaDataAdrs);
      close(iHfCtlFd);
      return(ERROR);
      }

   if (iDevTestDebug)
      {
      printf("hfCtlDevDmaWriteTest: DMAMODE0 = 0x%.8x\n", *pTempData);
      }

   /* set DMA register DMAMODE0 */
/*
   ulRegData = 0x00030843;
*/
   ulRegData = 0x00030043;  /* the local addr is incremented */
   iStatus = HFCtlPmcSetRegDmaChannel0Mode(iHfCtlFd, ulRegData);

   if (iStatus == ERROR)
      {
      printf("hfCtlDevDmaWriteTest: HFCtlPmcSetRegDmaChannel0Mode() failed.\n");
      free(pDmaDataAdrs);
      close(iHfCtlFd);
      return(ERROR);
      }

   /* get DMA register DMAMODE0 */
   iStatus = HFCtlPmcGetRegDmaChannel0Mode(iHfCtlFd, pTempData);
   if (iStatus == ERROR)
      {
      printf("hfCtlDevDmaWriteTest: HFCtlPmcGetRegDmaChannel0Mode() failed.\n");
      free(pDmaDataAdrs);
      close(iHfCtlFd);
      return(ERROR);
      }

   if (iDevTestDebug)
      {
      printf("hfCtlDevDmaWriteTest: after set DMAMODE0, DMAMODE0 = 0x%.8x\n", *pTempData);
      }

   /* get DMA register DMAPADR0 */
   iStatus = HFCtlPmcGetRegDmaChannel0PciAdrs(iHfCtlFd, pTempData);
   if (iStatus == ERROR)
      {
      printf("hfCtlDevDmaWriteTest: HFCtlPmcGetRegDmaChannel0PciAdrs() failed.\n");
      free(pDmaDataAdrs);
      close(iHfCtlFd);
      return(ERROR);
      }

   if (iDevTestDebug)
      {
      printf("hfCtlDevDmaWriteTest: DMAPADR0 = 0x%.8x\n", *pTempData);
      }

   /* set DMA register DMAPADR0 */
   ulRegData = ulDmaDataPciAdrs;
   iStatus = HFCtlPmcSetRegDmaChannel0PciAdrs(iHfCtlFd, ulRegData);

   if (iStatus == ERROR)
      {
      printf("hfCtlDevDmaWriteTest: HFCtlPmcSetRegDmaChannel0PciAdrs() failed.\n");
      free(pDmaDataAdrs);
      close(iHfCtlFd);
      return(ERROR);
      }

   /* get DMA register DMAPADR0 */
   iStatus = HFCtlPmcGetRegDmaChannel0PciAdrs(iHfCtlFd, pTempData);
   if (iStatus == ERROR)
      {
      printf("hfCtlDevDmaWriteTest: HFCtlPmcGetRegDmaChannel0PciAdrs() failed.\n");
      free(pDmaDataAdrs);
      close(iHfCtlFd);
      return(ERROR);
      }

   if (iDevTestDebug)
      {
      printf("hfCtlDevDmaWriteTest: after set DMAPADR0, DMAPADR0 = 0x%.8x\n", *pTempData);
      }

   /* get DMA register DMALADR0 */
   iSta

⌨️ 快捷键说明

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