📄 addaboard.c
字号:
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 + -