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

📄 addaboard.c

📁 vxworks下adda板驱动原码
💻 C
📖 第 1 页 / 共 4 页
字号:

#if 0
   ulTemp = ulTemp | ((ulData << 24) & 0xFF000000);
   ulTemp = ulTemp | ((ulData <<  8) & 0x00FF0000);
   ulTemp = ulTemp | ((ulData >>  8) & 0x0000FF00);
   ulTemp = ulTemp | ((ulData >> 24) & 0x000000FF);
#else
   ulTemp = ulData;
#endif /* if 0 */
 
   return(ulTemp);
}

/******************************************************************************
TITLE:  	vmeWriteLong
DESC:   	routine to write Long data to a VME address
PARAM:  	iVmeAddr       - VME address to write
         ulData         - data to be written
RETURN: 	none
******************************************************************************/
void vmeWriteLong(int iVmeAddr, unsigned long ulData)
{
   unsigned int * pVmeAddr;
   unsigned long  ulTemp;

#if 0
   ulTemp = 0;
   ulTemp = ulTemp | ((ulData << 24)& 0xFF000000);
   ulTemp = ulTemp | ((ulData <<  8)& 0x00FF0000);
   ulTemp = ulTemp | ((ulData >>  8)& 0x0000FF00);
   ulTemp = ulTemp | ((ulData >> 24)& 0x000000FF);
#else
   ulTemp = ulData;
#endif /* if 0 */

   pVmeAddr = ((unsigned int *)iVmeAddr);
   *pVmeAddr = ulTemp;
}

/******************************************************************************
TITLE:  	addaDDSRegWrite
DESC:   	routine to write DDS register in AD_DA board
PARAM:  	pAddaBrdDev    - pointer to ADDABRD_DEV device structure
         iRegNum        - which register to write
         pArray         - pointer to data buffer
         iList          - switch for list debug information
RETURN: 	OK             - operation runs successfully
         ERROR          - operation runs failed

NOTE:    data buffer pArray should be 2 Quadlet, i.e. 64 bit;
         high Quadlet should be holded in the high Quadlet of pArray, i.e. pArray[1],
         low Quadlet should be holded in the low Quadlet of pArray, i.e. pArray[0]
******************************************************************************/
STATUS addaDDSRegWrite(ADDABRD_DEV *pAddaBrdDev, int iRegNum, int *pArray, int iList)
{
   int i;
   unsigned long ulRegData;
   unsigned long ulTempData;
   int *pDataBaseBand;
   int pTemp[2];

   if (iRegNum & 0xffffffe0)
      {
      logMsg("addaDDSRegWrite: reg Number ERROR\n", 0, 0, 0, 0, 0, 0);
      return(ERROR);
      }

   pTemp[0] = pArray[0];
   pTemp[1] = pArray[1];

   if (iList)
      {
      logMsg("addaDDSRegWrite: pArray[0] = 0x%8x\n", pTemp[0], 0, 0, 0, 0, 0);
      logMsg("addaDDSRegWrite: pArray[1] = 0x%8x\n", pTemp[1], 0, 0, 0, 0, 0);
      }

   /* 1. write data to 64 bit CTL reg */
   pDataBaseBand = (int*)(pAddaBrdDev->iVmeBaseAddr + DDS_CTL_REG_OFFSET_TO_DDC_REG + ADDA_DDS_CTL_REG1_OFFSET);       /* CTL reg 1 */

   *pDataBaseBand = pArray[1];

   if (iList)
      {
      logMsg("addaDDSRegWrite: write High Quadlet to ctrl reg 1\n", 0, 0, 0, 0, 0, 0);
      logMsg("addaDDSRegWrite: addr of CTL reg 1 = 0x%8x\n", (int)pDataBaseBand, 0, 0, 0, 0, 0);
      ulTempData = *pDataBaseBand;
      logMsg("addaDDSRegWrite: CTL reg 1 = 0x%8x\n", ulTempData, 0, 0, 0, 0, 0);
      }

   pDataBaseBand = (int*)(pAddaBrdDev->iVmeBaseAddr + DDS_CTL_REG_OFFSET_TO_DDC_REG + ADDA_DDS_CTL_REG2_OFFSET);    /* CTL reg 2 */

   *pDataBaseBand = pArray[0];

   if (iList)
      {
      logMsg("addaDDSRegWrite: write low Quadlet to ctrl reg 2\n", 0, 0, 0, 0, 0, 0);
      logMsg("addaDDSRegWrite: addr of CTL reg 2 = 0x%8x\n", (int)pDataBaseBand, 0, 0, 0, 0, 0);
      ulTempData = *pDataBaseBand;
      logMsg("addaDDSRegWrite: CTL reg 2 = 0x%8x\n", ulTempData, 0, 0, 0, 0, 0);
      }

   /* 2. write 16 bit instruction reg, set bit 15 to 1 for write */
   pDataBaseBand = (int*)(pAddaBrdDev->iVmeBaseAddr + DDS_CTL_REG_OFFSET_TO_DDC_REG + ADDA_DDS_CFG_REG_OFFSET);

   ulRegData = iRegNum & 0x0000001f;

   *pDataBaseBand = (int)ulRegData;

   if (iList)
      {
      logMsg("addaDDSRegWrite: addr of INST reg = 0x%8x\n", (int)pDataBaseBand, 0, 0, 0, 0, 0);
      logMsg("addaDDSRegWrite: DATA to write = 0x%8x\n", (int)ulRegData, 0, 0, 0, 0, 0);
      ulTempData = *pDataBaseBand;
      logMsg("addaDDSRegWrite: INST reg = 0x%8x\n", ulTempData, 0, 0, 0, 0, 0);
      }

   return(OK);
}

/******************************************************************************
TITLE:  	addaDDSRegRead
DESC:   	routine to read DDS register in AD_DA board
PARAM:  	pAddaBrdDev    - pointer to ADDABRD_DEV device structure
         iRegNum        - which register to read
         pArray         - pointer to data buffer
         iList          - switch for list debug information
RETURN: 	OK             - operation runs successfully
         ERROR          - operation runs failed

NOTE:    data buffer pArray should be 2 Quadlet, i.e. 64 bit;
         high Quadlet should be holded in the high Quadlet of pArray, i.e. pArray[1],
         low Quadlet should be holded in the low Quadlet of pArray, i.e. pArray[0]
******************************************************************************/
STATUS addaDDSRegRead(ADDABRD_DEV *pAddaBrdDev, int iRegNum, int *pArray, int iList)
{
   int i;
   unsigned long ulRegData;
   unsigned long ulTempData;
   int *pDataBaseBand;
   int pTemp[2];

   if (iRegNum & 0xffffffe0)
      {
      logMsg("addaDDSRegRead: reg Number ERROR\n", 0, 0, 0, 0, 0, 0);
      return(ERROR);
      }

   /* 1. write 16 bit instruction reg, set bit 14 to 1 for read */
   pDataBaseBand = (int*)(pAddaBrdDev->iVmeBaseAddr + DDS_CTL_REG_OFFSET_TO_DDC_REG + ADDA_DDS_CFG_REG_OFFSET);

   ulRegData = 0x00000080 | (iRegNum & 0x0000001f);

   *pDataBaseBand = (int)ulRegData;

   if (iList)
      {
      logMsg("addaDDSRegRead: addr of INST reg = 0x%8x\n", (int)pDataBaseBand, 0, 0, 0, 0, 0);
      logMsg("addaDDSRegRead: DATA to write = 0x%8x\n", (int)ulRegData, 0, 0, 0, 0, 0);
      ulTempData = *pDataBaseBand;
      logMsg("addaDDSRegRead: INST reg = 0x%8x\n", ulTempData, 0, 0, 0, 0, 0);
      }

  /* 2. wait for a while */
   taskDelay(1);
   if (iList)
      {
      logMsg("addaDDSRegRead: wait for a while\n", 0, 0, 0, 0, 0, 0);
      }

  /* 3. read register data */
   pDataBaseBand = (int*)(pAddaBrdDev->iVmeBaseAddr + DDS_CTL_REG_OFFSET_TO_DDC_REG + ADDA_DDS_STA_REG1_OFFSET);       /* STA reg 1 */
   ulTempData = *pDataBaseBand;
   pArray[1] = ulTempData;

   if (iList)
      {
      logMsg("addaDDSRegRead: read High Quadlet to buffer 1\n", 0, 0, 0, 0, 0, 0);
      logMsg("addaDDSRegRead: addr of STA reg 1 = 0x%8x\n", (int)pDataBaseBand, 0, 0, 0, 0, 0);
      logMsg("addaDDSRegRead: STA reg 1 = 0x%8x\n", ulTempData, 0, 0, 0, 0, 0);
      }

   pDataBaseBand = (int*)(pAddaBrdDev->iVmeBaseAddr + DDS_CTL_REG_OFFSET_TO_DDC_REG + ADDA_DDS_STA_REG2_OFFSET);    /* STA reg 2 */
   ulTempData = *pDataBaseBand;
   pArray[0] = ulTempData;

   if (iList)
      {
      logMsg("addaDDSRegRead: read low Quadlet to buffer 0\n", 0, 0, 0, 0, 0, 0);
      logMsg("addaDDSRegRead: addr of STA reg 2 = 0x%8x\n", (int)pDataBaseBand, 0, 0, 0, 0, 0);
      logMsg("addaDDSRegRead: STA reg 2 = 0x%8x\n", ulTempData, 0, 0, 0, 0, 0);
      }

   return(OK);
}

/******************************************************************************
TITLE:  	addaDDSGlobalReset
DESC:   	routine to reset DDS in AD_DA board
PARAM:  	pAddaBrdDev    - pointer to ADDABRD_DEV device structure
RETURN: 	OK             - operation runs successfully
         ERROR          - operation runs failed
******************************************************************************/
STATUS addaDDSGlobalReset(ADDABRD_DEV *pAddaBrdDev)
{
   int *pDataBaseBand;

   /* write data to Global Reset reg */
   pDataBaseBand = (int*)(pAddaBrdDev->iVmeBaseAddr + DDS_CTL_REG_OFFSET_TO_DDC_REG + ADDA_DDS_GRST_CS_REG_OFFSET);       /* Global Reset reg */

   *pDataBaseBand = 0x47;

   return(OK);
}

/******************************************************************************
TITLE:  	addaDDSIOReset
DESC:   	routine to reset DDS I/O in AD_DA board
PARAM:  	pAddaBrdDev    - pointer to ADDABRD_DEV device structure
RETURN: 	OK             - operation runs successfully
         ERROR          - operation runs failed
******************************************************************************/
STATUS addaDDSIOReset(ADDABRD_DEV *pAddaBrdDev)
{
   int *pDataBaseBand;

   /* write data to I/O Reset reg */
   pDataBaseBand = (int*)(pAddaBrdDev->iVmeBaseAddr + DDS_CTL_REG_OFFSET_TO_DDC_REG + ADDA_DDS_IORST_CS_REG_OFFSET);       /* I/O Reset reg */

   *pDataBaseBand = 0x47;

   return(OK);
}

/******************************************************************************TITLE:  	addaDACRegWrite
DESC:   	routine to write DAC register in AD_DA board
PARAM:  	pAddaBrdDev    - pointer to ADDABRD_DEV device structure         iRegNum        - which register to write         ulData         - pointer to data buffer
         iList          - switch for list debug informationRETURN: 	OK             - operation runs successfully         ERROR          - operation runs failedNOTE:    data buffer ulData should be BYTE, i.e. 8 bit;
******************************************************************************/
STATUS addaDACRegWrite(ADDABRD_DEV *pAddaBrdDev, int iRegNum, unsigned long ulData, int iList)
{   int i;   unsigned long ulRegData;   unsigned long ulTempData;   int *pDataBaseBand;   int pTemp[2];   if (iRegNum & 0xffffffe0)      {      logMsg("addaDACRegWrite: reg Number ERROR\n", 0, 0, 0, 0, 0, 0);
      return(ERROR);      }   /* 1. write 16 bit instruction reg, set bit 15 to 1 for write */
   pDataBaseBand = (int*)(pAddaBrdDev->iVmeBaseAddr + DAC_MODE_CTL_REG_TO_DDC_REG + ADDA_DAC_CTL_REG_OFFSET);       /* CTL reg */
   ulRegData = ((iRegNum & 0x0000001f) << 8) | (ulData & 0xff);
   *pDataBaseBand = (int)ulRegData;   if (iList)      {      logMsg("addaDACRegWrite: addr of INST reg = 0x%8x\n", (int)pDataBaseBand, 0, 0, 0, 0, 0);
      logMsg("addaDACRegWrite: DATA to write = 0x%8x\n", (int)ulRegData, 0, 0, 0, 0, 0);
      ulTempData = *pDataBaseBand;      logMsg("addaDACRegWrite: INST reg = 0x%8x\n", ulTempData, 0, 0, 0, 0, 0);
      }   return(OK);}/******************************************************************************TITLE:  	addaDACRegRead
DESC:   	routine to read DAC register in AD_DA board
PARAM:  	pAddaBrdDev    - pointer to ADDABRD_DEV device structure         iRegNum        - which register to read         pRegData       - pointer to data buffer
         iList          - switch for list debug informationRETURN: 	OK             - operation runs successfully         ERROR          - operation runs failedNOTE:    data buffer ulData should be BYTE, i.e. 8 bit;
******************************************************************************/STATUS addaDACRegRead(ADDABRD_DEV *pAddaBrdDev, int iRegNum, unsigned long *pRegData, int iList)
{   int i;   unsigned long ulRegData;   unsigned long ulTempData;   int *pDataBaseBand;   int pTemp[2];   if (iRegNum & 0xffffffe0)      {      logMsg("addaDACRegRead: reg Number ERROR\n", 0, 0, 0, 0, 0, 0);
      return(ERROR);      }   /* 1. write 16 bit instruction reg */
   pDataBaseBand = (int*)(pAddaBrdDev->iVmeBaseAddr + DAC_MODE_CTL_REG_TO_DDC_REG + ADDA_DAC_CTL_REG_OFFSET);
   ulRegData = (0x00000080 | (iRegNum & 0x0000001f)) << 8;
   *pDataBaseBand = (int)ulRegData;   if (iList)      {      logMsg("addaDACRegRead: addr of INST reg = 0x%8x\n", (int)pDataBaseBand, 0, 0, 0, 0, 0);
      logMsg("addaDACRegRead: DATA to write = 0x%8x\n", (int)ulRegData, 0, 0, 0, 0, 0);
      ulTempData = *pDataBaseBand;      logMsg("addaDACRegRead: INST reg = 0x%8x\n", ulTempData, 0, 0, 0, 0, 0);
      }  /* 2. wait for a while */   taskDelay(1);   if (iList)      {      logMsg("addaDACRegRead: wait for a while\n", 0, 0, 0, 0, 0, 0);
      }  /* 3. read register data */   pDataBaseBand = (int*)(pAddaBrdDev->iVmeBaseAddr + DAC_MODE_CTL_REG_TO_DDC_REG + ADDA_DAC_STATUS_REG_OFFSET);
   ulTempData = (*pDataBaseBand) & 0xff;
   *pRegData = ulTempData;

   if (iList)      {      logMsg("addaDACRegRead: addr of STA reg 1 = 0x%8x\n", (int)pDataBaseBand, 0, 0, 0, 0, 0);
      logMsg("addaDACRegRead: reg(0x%.2x) = 0x%.2x\n", iRegNum, ulTempData, 0, 0, 0, 0);
      logMsg("addaDACRegRead: pRegData(0x%.8x) = 0x%.2x\n", (int)pRegData, *pRegData, 0, 0, 0, 0);
      }   return(OK);
}/******************************************************************************
TITLE:   AddaBrdDrvParmReset
DESC:    routine to clear all driver specific parameter of ADDA board 
PARAM:   none
RETURN:  none
******************************************************************************/
void AddaBrdDrvParmReset(void)
{
   DriverNumber = 0;
   NumberOfDevices = 0; 
}


⌨️ 快捷键说明

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