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

📄 addaboard.c

📁 vxworks下adda板驱动原码
💻 C
📖 第 1 页 / 共 4 页
字号:
      case AD_DA_BOARD_SET_DUC_FLUSH_CNTL:
         vmeWriteLong((int)(pAddaBrdDev->iVmeBaseAddr + DUC_REG_OFFSET_TO_DDC_REG +
                      GC4116_FLUSH_REG_OFFSET), *(unsigned long *)iParam);
         return(OK);

      case AD_DA_BOARD_GET_DUC_MISC:
         *(UINT32*)iParam = vmeReadLong((int)(pAddaBrdDev->iVmeBaseAddr + DUC_REG_OFFSET_TO_DDC_REG +
                                        GC4116_MISC_REG_OFFSET));
         return(OK);

      case AD_DA_BOARD_SET_DUC_MISC:
         vmeWriteLong((int)(pAddaBrdDev->iVmeBaseAddr + DUC_REG_OFFSET_TO_DDC_REG +
                      GC4116_MISC_REG_OFFSET), *(unsigned long *)iParam);
         return(OK);

      case AD_DA_BOARD_GET_DUC_PAGE:
         *(UINT32*)iParam = vmeReadLong((int)(pAddaBrdDev->iVmeBaseAddr + DUC_REG_OFFSET_TO_DDC_REG +
                                        GC4116_PAGE_REG_OFFSET));
         return(OK);

      case AD_DA_BOARD_SET_DUC_PAGE:
#if 0
         logMsg("AddaBrdIoctl.AD_DA_BOARD_SET_DUC_PAGE: Entered.\n", 0, 0, 0, 0, 0, 0);
         logMsg("AddaBrdIoctl.AD_DA_BOARD_SET_DUC_PAGE: Vme Addr = 0x%.8x.\n", 
                (pAddaBrdDev->iVmeBaseAddr + DUC_REG_OFFSET_TO_DDC_REG + GC4116_PAGE_REG_OFFSET), 0, 0, 0, 0, 0);
#endif /* if 0 */
         vmeWriteLong((int)(pAddaBrdDev->iVmeBaseAddr + DUC_REG_OFFSET_TO_DDC_REG + 
                      GC4116_PAGE_REG_OFFSET), *(unsigned long *)iParam);
#if 0
         ulTemp = vmeReadLong((int)(pAddaBrdDev->iVmeBaseAddr + DUC_REG_OFFSET_TO_DDC_REG + GC4116_PAGE_REG_OFFSET));
         logMsg("AddaBrdIoctl.AD_DA_BOARD_SET_DUC_PAGE: Page = 0x%.8x.\n", ulTemp, 0, 0, 0, 0, 0);
#endif /* if 0 */
         return(OK);

      case AD_DA_BOARD_READ_DUC_PAGE_REGS:
         pPgRegBlk = (ADDABRD_BLOCK *)((unsigned long*)iParam);
         pDestBuf = (unsigned long*)pPgRegBlk->buffer;
         pSrcBuf = (unsigned long *)(pAddaBrdDev->iVmeBaseAddr + DUC_REG_OFFSET_TO_DDC_REG + 
                                     pPgRegBlk->offset);
#if 0
         logMsg("AddaBrdIoctl.AD_DA_BOARD_READ_DUC_PAGE_REGS: Entered.\n", 0, 0, 0, 0, 0, 0);
         logMsg("AddaBrdIoctl.AD_DA_BOARD_READ_DUC_PAGE_REGS: Vme Addr = 0x%.8x.\n", 
                (pAddaBrdDev->iVmeBaseAddr + DUC_REG_OFFSET_TO_DDC_REG + pPgRegBlk->offset), 0, 0, 0, 0, 0);
         logMsg("AddaBrdIoctl.AD_DA_BOARD_READ_DUC_PAGE_REGS: pPgRegBlk->offset = %d.\n", pPgRegBlk->offset, 0, 0, 0, 0, 0);
         logMsg("AddaBrdIoctl.AD_DA_BOARD_READ_DUC_PAGE_REGS: pPgRegBlk->count = %d.\n", pPgRegBlk->count, 0, 0, 0, 0, 0);
         logMsg("AddaBrdIoctl.AD_DA_BOARD_READ_DUC_PAGE_REGS: pPgRegBlk->incr = %d.\n", pPgRegBlk->incr, 0, 0, 0, 0, 0);
         logMsg("AddaBrdIoctl.AD_DA_BOARD_READ_DUC_PAGE_REGS: pPgRegBlk->buffer = 0x%.8x.\n", (int)pPgRegBlk->buffer, 0, 0, 0, 0, 0);
#endif /* if 0 */

         for(i = 0; i < pPgRegBlk->count; i++)
            {
            *pDestBuf = vmeReadLong((int)pSrcBuf);
            pDestBuf++;

            if (pPgRegBlk->incr == 1)
               {
               pSrcBuf++;
               }
            else        /* pPgRegBlk->incr == 0 */
               {
               pSrcBuf--;
               }
            }

         return(OK);
         
      case AD_DA_BOARD_WRITE_DUC_PAGE_REGS:
         pPgRegBlk = (ADDABRD_BLOCK *)((unsigned long*)iParam);
         pSrcBuf = (unsigned long*)pPgRegBlk->buffer;
         pDestBuf = (unsigned long *)(pAddaBrdDev->iVmeBaseAddr + DUC_REG_OFFSET_TO_DDC_REG + 
                                      pPgRegBlk->offset);
#if 0
         logMsg("AddaBrdIoctl.AD_DA_BOARD_WRITE_DUC_PAGE_REGS: Entered.\n", 0, 0, 0, 0, 0, 0);
         logMsg("AddaBrdIoctl.AD_DA_BOARD_WRITE_DUC_PAGE_REGS: Vme Addr = 0x%.8x.\n", 
                (pAddaBrdDev->iVmeBaseAddr + DUC_REG_OFFSET_TO_DDC_REG + pPgRegBlk->offset), 0, 0, 0, 0, 0);
         logMsg("AddaBrdIoctl.AD_DA_BOARD_WRITE_DUC_PAGE_REGS: loop time = %d.\n", 
                (pPgRegBlk->count), 0, 0, 0, 0, 0);
         logMsg("AddaBrdIoctl.AD_DA_BOARD_READ_DUC_PAGE_REGS: pPgRegBlk->offset = %d.\n", pPgRegBlk->offset, 0, 0, 0, 0, 0);
         logMsg("AddaBrdIoctl.AD_DA_BOARD_READ_DUC_PAGE_REGS: pPgRegBlk->count = %d.\n", pPgRegBlk->count, 0, 0, 0, 0, 0);
         logMsg("AddaBrdIoctl.AD_DA_BOARD_READ_DUC_PAGE_REGS: pPgRegBlk->incr = %d.\n", pPgRegBlk->incr, 0, 0, 0, 0, 0);
         logMsg("AddaBrdIoctl.AD_DA_BOARD_READ_DUC_PAGE_REGS: pPgRegBlk->buffer = 0x%.8x.\n", (int)pPgRegBlk->buffer, 0, 0, 0, 0, 0);

         for(i = 0; i < 16; i++)
            {
            logMsg("AddaBrdIoctl.AD_DA_BOARD_READ_DUC_PAGE_REGS: pPgRegBlk->buffer[%d] = 0x%.8x.\n", i, pPgRegBlk->buffer[i], 0, 0, 0, 0);
            }
#endif /* if 0 */

         for(i = 0; i < pPgRegBlk->count; i++)
            {
            vmeWriteLong((int)pDestBuf, (unsigned long)*pSrcBuf);
            pSrcBuf++;

            if (pPgRegBlk->incr == 1)
               {
               pDestBuf++;
               }
            else        /* pPgRegBlk->incr == 0 */
               {
               pDestBuf--;
               }
            }

#if 0
         pSrcBuf = (unsigned long *)(pAddaBrdDev->iVmeBaseAddr + DUC_REG_OFFSET_TO_DDC_REG + 
                                      pPgRegBlk->offset);

         for(i = 0; i < pPgRegBlk->count; i++)
            {
            ulTemp = vmeReadLong((int)pSrcBuf);

            logMsg("ultemp = 0x%x\n", ulTemp, 0, 0, 0, 0, 0);

            if (pPgRegBlk->incr == 1)
               {
               pSrcBuf++;
               }
            else        /* pPgRegBlk->incr == 0 */
               {
               pSrcBuf--;
               }
            }
#endif /* if 0 */
         
         return(OK);

      case AD_DA_BOARD_READ_DAC_REGS:
#if 0
         pPgRegBlk = (ADDABRD_BLOCK *)((unsigned long*)iParam);
         pDestBuf = (unsigned long*)pPgRegBlk->buffer;

         /********address reg structure**********/
         /*  b31 --- b16 | b15 -- b8 | b7 -- b0  *
          *    0x0000    |  Command  |   0x00    *
          ****************************************/
         pSrcBuf = (unsigned long *)(pAddaBrdDev->iVmeBaseAddr + DAC_MODE_CTL_REG_TO_DDC_REG + 
                                     AD_DA_BOARD_DAC_READ_ADDR_OFFSET);

         ulTemp = ((pPgRegBlk->offset) & 0xFF) << 8;

         vmeWriteLong((int)pSrcBuf, ulTemp);

         taskDelay(1);     /* wait for return data */

         /***************data reg structure**************/
         /*  b31 --- b17 |  b16  | b15 -- b8 | b7 -- b0  *
          *    0x0000    |  done |  Command  |   data    *
          ************************************************/
         /* judge whether the read operation is done and read the reg */
         
         pSrcBuf = (unsigned long *)(pAddaBrdDev->iVmeBaseAddr + DAC_MODE_CTL_REG_TO_DDC_REG + 
                                     AD_DA_BOARD_DAC_READ_DATA_OFFSET);

         while (!(ulTemp & 0x10000))
            {
            taskDelay(1);
            ulTemp = vmeReadLong((int)pSrcBuf);
            }

         *pDestBuf = ulTemp & 0xFF;

         return(OK);
#else
         pPgRegBlk = (ADDABRD_BLOCK *)((unsigned long*)iParam);         pDestBuf = (unsigned long*)pPgRegBlk->buffer;#if 0
         logMsg("AddaBrdIoctl: pDestBuf(0x%.8x) = 0x%.8x\n", (int)pDestBuf, *pDestBuf, 0, 0, 0, 0);
#endif /* if 0 */
         iStatus = addaDACRegRead(pAddaBrdDev, pPgRegBlk->offset, pDestBuf, 1);#if 1
         logMsg("AddaBrdIoctl: pDestBuf(0x%.8x) = 0x%.8x\n", (int)pDestBuf, *pDestBuf, 0, 0, 0, 0);
#endif /* if 0 */
         return(iStatus);#endif /* if 0 */

      case AD_DA_BOARD_WRITE_DAC_REGS:
#if 0
         pPgRegBlk = (ADDABRD_BLOCK *)((unsigned long*)iParam);
         pSrcBuf = (unsigned long*)pPgRegBlk->buffer;

         /********WRITE reg structure  **********/
         /*  b31 --- b16 | b15 -- b8 | b7 -- b0  *
          *    0x0000    |  Command  |   data    *
          ****************************************/
         pDestBuf = (unsigned long *)(pAddaBrdDev->iVmeBaseAddr + DAC_MODE_CTL_REG_TO_DDC_REG + 
                                     AD_DA_BOARD_DAC_WRITE_ADDR_OFFSET);

         ulTemp = (((pPgRegBlk->offset) & 0xFF) << 8) | (*pSrcBuf & 0xFF);

         vmeWriteLong((int)pDestBuf, ulTemp);

         return(OK);
#else
         pPgRegBlk = (ADDABRD_BLOCK *)((unsigned long*)iParam);         pSrcBuf = (unsigned long*)pPgRegBlk->buffer;         iStatus = addaDACRegWrite(pAddaBrdDev, pPgRegBlk->offset, *pSrcBuf, 1);         return(iStatus);#endif /* if 0 */

      case AD_DA_BOARD_READ_DDS_REGS:
         pPgRegBlk = (ADDABRD_BLOCK *)((unsigned long*)iParam);
         pDestBuf = (unsigned long*)pPgRegBlk->buffer;         iStatus = addaDDSRegRead(pAddaBrdDev, pPgRegBlk->offset, (int *)pDestBuf, 1);

         return(iStatus);

      case AD_DA_BOARD_WRITE_DDS_REGS:
         pPgRegBlk = (ADDABRD_BLOCK *)((unsigned long*)iParam);         pSrcBuf = (unsigned long*)pPgRegBlk->buffer;         iStatus = addaDDSRegWrite(pAddaBrdDev, pPgRegBlk->offset, (int *)pSrcBuf, 1);
         return(iStatus);
      case AD_DA_BOARD_RESET_DDS:
         iStatus = addaDDSGlobalReset(pAddaBrdDev);
         taskDelay(100);
         
         iStatus = addaDDSIOReset(pAddaBrdDev);
         taskDelay(100);

         /* configure DDS registers */
         /* 1. Configure DDS control register 1(CFR1) */
         pRegData[0] = 0x00000000;
         pRegData[1] = 0x00000000;
         iStatus = addaDDSRegWrite(pAddaBrdDev, 0, pRegData, 0);
         taskDelay(100);

         /* 1. Configure DDS control register 2(CFR2) */
         pRegData[0] = 0x00180020;
         pRegData[1] = 0x00000000;
         iStatus = addaDDSRegWrite(pAddaBrdDev, 1, pRegData, 0);
         taskDelay(100);

         return(iStatus);

      case AD_DA_BOARD_GLOBAL_RESET_DDS:
         iStatus = addaDDSGlobalReset(pAddaBrdDev);
         taskDelay(1);
         return(iStatus);
         
      case AD_DA_BOARD_IO_RESET_DDS:
         iStatus = addaDDSIOReset(pAddaBrdDev);
         taskDelay(1);
         return(iStatus);

      case AD_DA_BOARD_CFG_CFRS_DDS:
         /* configure DDS registers */
         /* 1. Configure DDS control register 1(CFR1) */
         pRegData[0] = 0x00000000;
         pRegData[1] = 0x00000000;
         iStatus = addaDDSRegWrite(pAddaBrdDev, 0, pRegData, 0);
         taskDelay(1);

         /* 2. Configure DDS control register 2(CFR2) */
         pRegData[0] = 0x00180020;
         pRegData[1] = 0x00000000;
         iStatus = addaDDSRegWrite(pAddaBrdDev, 1, pRegData, 0);
         taskDelay(1);
         return(iStatus);

      }

   return(ERROR);
}

/******************************************************************************
TITLE:  	AddaBrdIntHandle
DESC:   	ADC VME interrupt handler for AD_DA board device
PARAM:  	pAddaBrdDev - pointer to ADDABRD_DEV device structure
RETURN: 	none
******************************************************************************/
void AddaBrdADCIntHandle(ADDABRD_DEV *pAddaBrdDev)
{
      
}

/******************************************************************************
TITLE:  	AddaBrdDACIntHandle
DESC:   	DAC VME interrupt handler for AD_DA board device
PARAM:  	pAddaBrdDev - pointer to ADDABRD_DEV device structure
RETURN: 	none
******************************************************************************/
void AddaBrdDACIntHandle(ADDABRD_DEV *pAddaBrdDev)
{
      
}

/******************************************************************************
TITLE:  	AddaBrdDMAIntHandle
DESC:   	DMA VME interrupt handler for AD_DA board device
PARAM:  	pAddaBrdDev - pointer to ADDABRD_DEV device structure
RETURN: 	none
******************************************************************************/
void AddaBrdDMAIntHandle(ADDABRD_DEV *pAddaBrdDev)
{
      
}

/******************************************************************************
TITLE:  	VmeBoardSearch
DESC:   	routine to search the AD_DA board on the vme bus
PARAM:  	pAddaBrdDev - pointer to ADDABRD_DEV device structure
RETURN: 	OK          - find the VME device and get the VME base address
         ERROR       - cannot find the VME device
******************************************************************************/
STATUS VmeBoardSearch (ADDABRD_DEV *pAddaBrdDev)
{
   int      iStatus;
   unsigned long p;
   char     *pVmeAddr;
   /********************************/
   /*
    *       to find a board with a ID
    */
   /********************************/

#if 1
   pVmeAddr = (char*)0x8000000;        /* ADDA board 1 */
#else
   pVmeAddr = (char*)0x10000000;       /* ADDA board 2 */
#endif /* if 0 */

   logMsg("VmeBoardSearch: Board VME address = 0x%.8x\n", (int)pVmeAddr, 0, 0, 0, 0, 0);

   iStatus = sysBusToLocalAdrs(0xd, pVmeAddr, (char**)&p);
   if (iStatus == ERROR)
      {
      logMsg("VmeBoardSearch: sysBusToLocalAdrs() failed.\n", 0, 0, 0, 0, 0, 0);
      return(ERROR);
      }

   pAddaBrdDev->iVmeBaseAddr = p;
   
   return(OK);
}

/******************************************************************************
TITLE:  	vmeReadLong
DESC:   	routine to read Long data from a VME address
PARAM:  	iVmeAddr       - VME address to read
RETURN: 	               - value read from VME address
******************************************************************************/
unsigned long vmeReadLong(int iVmeAddr)
{
   unsigned int *  pVmeAddr;
   unsigned long   ulData;
   unsigned long   ulTemp;

   ulTemp = 0;

   pVmeAddr = ((unsigned int *)iVmeAddr);
   ulData = *pVmeAddr;

⌨️ 快捷键说明

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