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

📄 addaboard.c

📁 vxworks下adda板驱动原码
💻 C
📖 第 1 页 / 共 4 页
字号:
         destination = (unsigned int *)(pAddaBrdDev->iVmeBaseAddr + DUC_REG_OFFSET_TO_DDC_REG);
      }

   iTmpNum = iNum / 4;
   for(i = 0; i < iTmpNum; i++)
      {
         *destination = *lbuffer;
         lbuffer++;
         destination++;
      }
   return(iNum);
}

/******************************************************************************
TITLE:  	AddaBrdIoctl
DESC:   	Routine to configure and control AD_DA board device
PARAM:  	pAddaBrdDev - pointer to ADDABRD_DEV device structure
         iFunCode    - code for the desired action
         iParam      - data supplied to or from routine
RETURN: 	OK          - operation was successful
         ERROR       - operation failed
******************************************************************************/
int AddaBrdIoctl (ADDABRD_DEV *pAddaBrdDev, int iFunCode, int iParam)
{
   int   i;
   int   iStatus;
   ADDABRD_BLOCK *pPgRegBlk;
   unsigned long *pDestBuf;
   unsigned long *pSrcBuf;
   unsigned long ulTemp;
   int pRegData[2];

   switch (iFunCode)
      {
      case AD_DA_BOARD_GET_DDC_STATUS:
         *(UINT32*)iParam = vmeReadLong((int)(pAddaBrdDev->iVmeBaseAddr + GC4016_STATUS_REG_OFFSET));
         return(OK);

      case AD_DA_BOARD_SET_DDC_STATUS:
         vmeWriteLong((int)(pAddaBrdDev->iVmeBaseAddr + GC4016_STATUS_REG_OFFSET), *(unsigned long *)iParam);
         return(OK);

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

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

      case AD_DA_BOARD_GET_DDC_RESET:
#if 0
         logMsg("AddaBrdIoctl.AD_DA_BOARD_GET_DDC_RESET: vmeAddr = 0x%.8x\n", 
                (int)(pAddaBrdDev->iVmeBaseAddr + GC4016_GLOBAL_RESET_REG_OFFSET), 0, 0, 0, 0, 0);
#endif /* if 0 */
         *(UINT32*)iParam = vmeReadLong((int)(pAddaBrdDev->iVmeBaseAddr +
                                        GC4016_GLOBAL_RESET_REG_OFFSET));
         return(OK);

      case AD_DA_BOARD_SET_DDC_RESET:
         vmeWriteLong((int)(pAddaBrdDev->iVmeBaseAddr + 
                      GC4016_GLOBAL_RESET_REG_OFFSET), *(unsigned long *)iParam);
         return(OK);

      case AD_DA_BOARD_DDC_RESET:
#if 0
         logMsg("AddaBrdIoctl.AD_DA_BOARD_DDC_RESET: vmeAddr = 0x%.8x\n", 
                (int)(pAddaBrdDev->iVmeBaseAddr + GC4016_GLOBAL_RESET_REG_OFFSET), 0, 0, 0, 0, 0);
#endif /* if 0 */
         
         vmeWriteLong((int)(pAddaBrdDev->iVmeBaseAddr + GC4016_GLOBAL_RESET_REG_OFFSET), 0xF0);
         return(OK);

      case AD_DA_BOARD_DDC_RELEASE_RESET:
#if 0
         logMsg("AddaBrdIoctl.AD_DA_BOARD_DDC_RELEASE_RESET: Entered.\n", 0, 0, 0, 0, 0, 0);
         logMsg("AddaBrdIoctl.AD_DA_BOARD_DDC_RELEASE_RESET: Vme Addr = 0x%.8x.\n", 
                (pAddaBrdDev->iVmeBaseAddr + GC4016_GLOBAL_RESET_REG_OFFSET), 0, 0, 0, 0, 0);
#endif /* if 0 */
         vmeWriteLong((int)(pAddaBrdDev->iVmeBaseAddr + GC4016_GLOBAL_RESET_REG_OFFSET), 0x00);
#if 0
         ulTemp = vmeReadLong((int)(pAddaBrdDev->iVmeBaseAddr + GC4016_GLOBAL_RESET_REG_OFFSET));
         logMsg("AddaBrdIoctl.AD_DA_BOARD_DDC_RELEASE_RESET: Global Reset = 0x%.8x.\n", ulTemp, 0, 0, 0, 0, 0);
#endif /* if 0 */
         return(OK);

      case AD_DA_BOARD_GET_DDC_PAGE:
         *(UINT32*)iParam = vmeReadLong((int)(pAddaBrdDev->iVmeBaseAddr + GC4016_PAGE_REG_OFFSET));
         return(OK);

      case AD_DA_BOARD_SET_DDC_PAGE:
         vmeWriteLong((int)(pAddaBrdDev->iVmeBaseAddr + GC4016_PAGE_REG_OFFSET), *(unsigned long *)iParam);
         return(OK);

      case AD_DA_BOARD_GET_DDC_CHECKSUM:
         *(UINT32*)iParam = vmeReadLong((int)(pAddaBrdDev->iVmeBaseAddr + GC4016_CHECKSUM_REG_OFFSET));
         return(OK);

      case AD_DA_BOARD_GET_DDC_GEN_SYNC:
         *(UINT32*)iParam = vmeReadLong((int)(pAddaBrdDev->iVmeBaseAddr + GC4016_GEN_SYNC_REG_OFFSET));
         return(OK);

      case AD_DA_BOARD_SET_DDC_GEN_SYNC:
         vmeWriteLong((int)(pAddaBrdDev->iVmeBaseAddr + GC4016_GEN_SYNC_REG_OFFSET), *(unsigned long *)iParam);
         return(OK);

      case AD_DA_BOARD_GET_DDC_COUNT_SYNC:
         *(UINT32*)iParam = vmeReadLong((int)(pAddaBrdDev->iVmeBaseAddr + GC4016_COUNT_SYNC_REG_OFFSET));
         return(OK);

      case AD_DA_BOARD_SET_DDC_COUNT_SYNC:
         vmeWriteLong((int)(pAddaBrdDev->iVmeBaseAddr + GC4016_COUNT_SYNC_REG_OFFSET), *(unsigned long *)iParam);
         return(OK);

      case AD_DA_BOARD_GET_DDC_COUNTER_BYTE0:
         *(UINT32*)iParam = vmeReadLong((int)(pAddaBrdDev->iVmeBaseAddr + GC4016_COUNT_BYTE0_REG_OFFSET));
         return(OK);

      case AD_DA_BOARD_SET_DDC_COUNTER_BYTE0:
         vmeWriteLong((int)(pAddaBrdDev->iVmeBaseAddr + GC4016_COUNT_BYTE0_REG_OFFSET), *(unsigned long *)iParam);
         return(OK);

      case AD_DA_BOARD_GET_DDC_COUNTER_BYTE1:
         *(UINT32*)iParam = vmeReadLong((int)(pAddaBrdDev->iVmeBaseAddr + GC4016_COUNT_BYTE1_REG_OFFSET));
         return(OK);

      case AD_DA_BOARD_SET_DDC_COUNTER_BYTE1:
         vmeWriteLong((int)(pAddaBrdDev->iVmeBaseAddr + GC4016_COUNT_BYTE1_REG_OFFSET), *(unsigned long *)iParam);
         return(OK);

      case AD_DA_BOARD_READ_DDC_PAGE_REGS:
         pPgRegBlk = (ADDABRD_BLOCK *)((unsigned long *)iParam);
         pDestBuf = (unsigned long *)pPgRegBlk->buffer;
         pSrcBuf = (unsigned long *)(pAddaBrdDev->iVmeBaseAddr + /*GC4016_PREG_ADDR16_REG_OFFSET + */
                                     pPgRegBlk->offset);
#if 0
         logMsg("AddaBrdIoctl.AD_DA_BOARD_READ_DDC_PAGE_REGS: VmeAddr = 0x%.8x\n", 
                 (int)pSrcBuf, 0, 0, 0, 0, 0);
#endif /* if 0 */

         for(i = 0; i < pPgRegBlk->count; i++)
            {
            *pDestBuf = vmeReadLong((int)pSrcBuf);
#if 0
            logMsg("AddaBrdIoctl.AD_DA_BOARD_READ_DDC_PAGE_REGS: pDestBuf[%d] = 0x%.8x\n", 
                   i, (int)*pDestBuf, 0, 0, 0, 0);
#endif /* if 0 */
            pDestBuf++;

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

      case AD_DA_BOARD_WRITE_DDC_PAGE_REGS:
         pPgRegBlk = (ADDABRD_BLOCK *)((unsigned long*)iParam);
         pSrcBuf = (unsigned long*)pPgRegBlk->buffer;
         pDestBuf = (unsigned long *)(pAddaBrdDev->iVmeBaseAddr + /*GC4016_PREG_ADDR16_REG_OFFSET + */
                                      pPgRegBlk->offset);
#if 0
         logMsg("AddaBrdIoctl.AD_DA_BOARD_WRITE_DDC_PAGE_REGS: VmeAddr = 0x%.8x\n", 
                 (int)pDestBuf, 0, 0, 0, 0, 0);
         logMsg("AddaBrdIoctl.AD_DA_BOARD_WRITE_DDC_PAGE_REGS: pSrcBuf[0] = 0x%.2x\n", 
                 (int)pSrcBuf[0], 0, 0, 0, 0, 0);
         logMsg("AddaBrdIoctl.AD_DA_BOARD_WRITE_DDC_PAGE_REGS: pSrcBuf[1] = 0x%.2x\n", 
                 (int)pSrcBuf[1], 0, 0, 0, 0, 0);
         logMsg("AddaBrdIoctl.AD_DA_BOARD_WRITE_DDC_PAGE_REGS: pSrcBuf[2] = 0x%.2x\n", 
                 (int)pSrcBuf[2], 0, 0, 0, 0, 0);
         logMsg("AddaBrdIoctl.AD_DA_BOARD_WRITE_DDC_PAGE_REGS: pSrcBuf[3] = 0x%.2x\n", 
                 (int)pSrcBuf[3], 0, 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
         pDestBuf = (unsigned long *)(pAddaBrdDev->iVmeBaseAddr + pPgRegBlk->offset);
         logMsg("AddaBrdIoctl.AD_DA_BOARD_WRITE_DDC_PAGE_REGS: VmeAddr = 0x%.8x\n", 
                 (int)pDestBuf, 0, 0, 0, 0, 0);
         for(i = 0; i < pPgRegBlk->count; i++)
            {
            ulTemp = vmeReadLong((int)pDestBuf);

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

            logMsg("AddaBrdIoctl.AD_DA_BOARD_WRITE_DDC_PAGE_REGS: pDestBuf[%d] = 0x%.2x\n", 
                   i, ulTemp, 0, 0, 0, 0);
            }
#endif /* if 0 */

         return(OK);

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

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

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

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

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

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

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

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

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

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

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

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

      case AD_DA_BOARD_DUC_RESET:
         vmeWriteLong((int)(pAddaBrdDev->iVmeBaseAddr + DUC_REG_OFFSET_TO_DDC_REG +
                      GC4116_RESET_REG_OFFSET), 0xFF);
         return(OK);

      case AD_DA_BOARD_RELEASE_DUC_RESET:
         vmeWriteLong((int)(pAddaBrdDev->iVmeBaseAddr + DUC_REG_OFFSET_TO_DDC_REG +
                      GC4116_RESET_REG_OFFSET), 0x00);
         return(OK);

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

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

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

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

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

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

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

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

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

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

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

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

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

⌨️ 快捷键说明

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