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

📄 ecom8xx.c

📁 这是单板上DPRAM的驱动程序
💻 C
📖 第 1 页 / 共 2 页
字号:
        addr=(UCHAR *)(CS4_BASE+Offset);
    else if(Name == ECOM_DPRAM_DN) 
        addr = (UCHAR *)(CS5_BASE+Offset);
    else 
        return FALSE;
   
    for(i=0;i<DataLen;i++) BufAddr[i] = addr[i];
    if (i == DataLen) 
        return TRUE;
    else
        return FALSE; 
}

/*******************************************************************/
/* DpramWrite: This function is used to store data in the DPRAM.   */
/*                                                                 */
/*   INPUTS : Name.   : ECOM_DPRAM_UP, ECOM_DPRAM_DN;
              Offset  : 字节偏移地址。
              DataLen : 要读取数据的字节长度。
              BufAddr : 缓冲区的指针
                                                                   */
/*  OUTPUTS : Write operation successful (TRUE) or not (FALSE)     */
/*                                                                 */
/*******************************************************************/
int DpramWrite(int Name, ULONG Offset, ULONG DataLen, UCHAR *BufAddr) 
{
    UCHAR *addr;
    int   i;
        
    if(Name == ECOM_DPRAM_UP) 
        addr = (UCHAR *)(CS4_BASE+Offset);
    else if(Name == ECOM_DPRAM_DN) 
        addr=(UCHAR *)(CS5_BASE+Offset);
    else 
        return FALSE;
    
    for(i=0;i<DataLen;i++) 
        addr[i]=BufAddr[i];
    
    if(i!=DataLen)
        return FALSE;
    else
    {
        return TRUE;
     }
}

/*******************************************************************/
/* DpramReadW16: This function is used to read data in the DPRAM.  */
/*                                                                 */
/*   INPUTS : Name.   : ECOM_DPRAM_UP, ECOM_DPRAM_DN;
              Offset  : 字偏移地址(以16比特为单位)。
              DataLen : 要读取数据的字长度(以16比特为单位)。
              BufAddr : 缓冲区的指针(内容为16比特的字) 
                                                                   */
/*  OUTPUTS : Write operation successful (TRUE) or not (FALSE)     */
/*                                                                 */
/*******************************************************************/
int DpramReadW16(int Name, ULONG Offset, ULONG DataLen, USHORT *BufAddr)
{       
    USHORT *addr;
    int   i;
        
    if(Name == ECOM_DPRAM_UP) 
        addr=(USHORT *)(CS4_BASE+Offset*2);
    else if(Name ==ECOM_DPRAM_DN)
        addr=(USHORT *)(CS5_BASE+Offset*2);
    else 
        return FALSE;

    for(i=0;i<DataLen;i++) 
        BufAddr[i]=addr[i];
        
    if (i == DataLen) 
        return TRUE;
    else
        return FALSE; 
}

/*******************************************************************/
/* DpramWriteW16: This function is used to read data in the DPRAM. */
/*                                                                 */
/*   INPUTS : Name.   : ECOM_DPRAM_UP, ECOM_DPRAM_DN;
              Offset  : 字偏移地址(以16比特为单位)。
              DataLen : 要读取数据的字长度(以16比特为单位)。
              BufAddr : 缓冲区的指针(内容为16比特的字) 
                                                                   */
/*  OUTPUTS : Write operation successful (TRUE) or not (FALSE)     */
/*                                                                 */
/*******************************************************************/
int DpramWriteW16(int Name, ULONG Offset, ULONG DataLen, USHORT *BufAddr) 
{
    USHORT *addr;
    int   i;
        
    if(Name ==ECOM_DPRAM_UP) 
        addr=(USHORT *)(CS4_BASE+Offset*2);
    else if(Name ==ECOM_DPRAM_DN)
        addr=(USHORT *)(CS5_BASE+Offset*2);
    else 
        return FALSE;

    for(i=0;i<DataLen;i++) 
        addr[i] = BufAddr[i];
    
    if(i != DataLen)
        return FALSE;
    else
        return TRUE;
}

/*******************************************************************/
/* GetBrdSideInfo: 获取板位信息 .(pb16)                             */
/*                                                                 */
/*   INPUTS      :                                                 */
/*                                                                 */
/*  OUTPUTS      : ECOM_LEFT  (=1),  表示ECOM板位在左;            */
/*                 ECOM_RIGHT(=0),   表示ECOM板位在右;            */
/*                   其它情况,表示读板位信息失败。                */
/*                                                                 */
/*                                                                 */
/*******************************************************************/
int GetBrdSideInfo(void)
{
	return (GET_PB_BIT(16)?ECOM_LEFT:ECOM_RIGHT);
}

/***********************************************************************/
/* GetMainMpInfo: 读取MP的主备信息 .(pb17\pb18)                        */
/*                                                                     */
/*   INPUTS      :                                                     */
/*                                                                     */
/*  OUTPUTS      : MP_LEFT(=1),  表示左边的MP为主用,右边的MP为备用;*/
/*                 MP_RIGHT(=0), 表示右边的MP为主用,左边的MP为备用;*/
/*                 其它情况,表示读MP的主备信息失败,一定是硬件有故障。*/
/*                                                                     */
/***********************************************************************/
int GetMainMpInfo(void)
{
	if(GET_PB_BIT(17)==0 && GET_PB_BIT(18)==1)return MP_LEFT;
	else if(GET_PB_BIT(17)==1 && GET_PB_BIT(18)==0)return MP_RIGHT;
    else return -1;
}
/***********************************************************************/
/* ReverseLED: 灯显示反转                                              */
/*                                                                     */
/*  INPUTS:   LED_RUN 运行灯                                           */
/*            LED_ALARM 告警灯                                         */
/*                                                                     */
/***********************************************************************/
void ReverseLED(ULONG led)
{
    /* PDA *pda= (PDA *)(GetIMMR() & IO_MAP_MASK); */
    if((led&LED_RUN)==LED_RUN)INV_PB_BIT(26)
    if((led&LED_ALARM)==LED_ALARM)INV_PB_BIT(27);
}

/***********************************************************************/
/* PollQMCClk: 检测QMC时钟                                             */
/*                                                                     */
/*  OUTPUTS:   TRUE   QMC时钟正常                                      */
/*             FALSE  QMC时钟出错                                      */
/*                                                                     */
/***********************************************************************/
int PollQMCClk(void)
{
   if(GET_PB_BIT(28)==1)
   {
      SET_PB_BIT(30,0);
      SET_PB_BIT(30,1);
      return FALSE;  /* QMC clock error */ 
   }
   else
      return TRUE;   /* QMC clock OK */

}
int Is2MHWInput(void)
{
   if(GET_PB_BIT(31)==0)
   {
      return FALSE;  /* input is 8M HW  */ 
   }
   else
      return TRUE;   /* OK ,input is 2M HW */

}

⌨️ 快捷键说明

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