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