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

📄 meclib.c

📁 vxworks MPC8541 BSP
💻 C
📖 第 1 页 / 共 4 页
字号:
}

void  reportStateToMate (UINT8 state)
{
}

/**************************************************************
* mateBoardIsReady - whether mate is  ready
* Return: TRUE or FALSE if mate isn't ready
*/
BOOL mateBoardIsReady (void)
{   
    return TRUE;
}

/*----------------------------------------------------------------------------------
* contendForMaster - when power on,two MEC card compete with each other for master
*
* Called by ROS system when power on.
*
* Parameter: void
*
* RETURN: OK/ERROR
* 注:如果是在启动ROS之前主备竞争,就不能向系统控制进程发消息,如果是ROS启动之后主备竞争,就可以向
* 系统控制进程发消息
*********************************/
STATUS contendForMaster (void)
    {
    mecRegWrite (0xF7, 1);
    mecRegWrite (0xF8, 1);

    boardIsMaster();
    return(OK);
    }

void revokeContention (void)
{
     if( boardIsMaster() == FALSE)
        return ;
    
    mecRegWrite (0xFC, 0);
    sysMsDelay (1);
    mecRegWrite (0xFC, 1);
}

STATUS getBoardMBStatus(void)
{
    UINT8 val;

    val = mecRegRead (0xF0);

    if (val & 0x01)
        return BOARD_SLAVE;
    else
        return BOARD_MASTER;
}

STATUS getMateMBStatus(void)
{
    UINT8 val;

    val = mecRegRead (0xF0);

    if (val & 0x10)
        return BOARD_SLAVE;
    else
        return BOARD_MASTER;
}
    
/*******************************************************************************
*                               本板控制与状态接口                             *
*******************************************************************************/


/*******************************************************************************
* b_GetWatchDogResetCount
*
*
*/
/*
return code:
>=0 : valid count
-1: old epld version
the maxium count is 0xf,overflow will recount from zero
zhouyuhui 2005-7-29 14:19
*/
/* wlc:狗复位计数 -1:不支持*/
int b_GetWatchDogResetCount (void)
    {
    return (-1);
    }

/*******************************************************************************
* b_GetSoftResetCount - 软复位的次数
*
*/
int b_GetSoftResetCount (void)
    {
    return (-1);
    }

/*******************************************************************************
* b_GetLastResetSource - MP板上取上一次复位原因
*
* 返回:
*    1 - 表示看门狗溢出复位(没有及时喂狗,有看门狗溢出计数)
*    0 - 表示其它情况引起的复位(可能是硬复位)
*/
int b_GetLastResetSource (void)
    {
    UINT8 count;

    if (bdIsDogReset == 0xFF)
        {
        count = mecRegRead (0x48);
        /* 清除看门狗溢出次数
         * 060718 09:26
         * 硬件实现有问题,只要向[0x48]处有写操作,都会导致重启;暂时屏蔽此操作
        mecRegWrite (0x48, 0);
        */
        if (count == 2)
            bdIsDogReset = 1;
        else
            bdIsDogReset = 0;
        }

    return (bdIsDogReset);

    }

/*******************************************************************************
*                               线卡状态与控制                                 *
*******************************************************************************/

/*******************************************************************************
* ResetAllLicBoard
*
*/
STATUS ResetAllLicBoard (void)
    {
    int   physlot;
    UINT8 myslot = physSlotNumber();

    /* 本板不在线 */
    if (myslot == 0xFF)
        return (ERROR);

    for (physlot = 1; physlot <= 14; physlot++)
        {
       /*
        if (physlot == myslot)
            continue;
       */
       /*不复位本板与备用主控板*/
        if( (physlot == 7) ||(physlot == 8)) 
            continue;
        resetBoard (physlot);
        taskDelay (1);
        }

    return (OK);

    }

/*******************************************************************************
* resetBoard
*
*
*/

#define DBG_PRINT printf

STATUS resetBoard (UINT32 physlot)
    {
    UINT8   val;

    /* 只有主用板才可以复位线卡 */
    if (boardIsMaster() == FALSE)
        {
        DBG_PRINT ("not a master board\n");
        return (ERROR);
        }

    if (physlot > 14) 
        {
        DBG_PRINT ("slot invalid\n");
        return (ERROR);
        }

    /* 不能复位本板;复位本板使用另外的函数
     * 如果本板读取槽位号失败,意味着本板不在线,也不能复位其它线卡
     */
    if ((physlot == physSlotNumber()) || (physSlotNumber() == 0xFF))
        {
        DBG_PRINT ("board offline or try to reset self\n");
        return (ERROR);
        }

    if ((physlot == 7) || (physlot == 8))
        val = 0x07;
    else
        val = physlot;
    mecRegWrite (0xE8, val);

    taskDelay (5);

    mecRegWrite (0xE8, 0);

    return (OK);
    }

/*******************************************************************************
* AllLicOnline
*
*/
/*
读取所有线卡在线状态。
  bit 0(最低位)表示slot 1 down (1D)电源板;
  bit 1表示slot 1 up (1U)电源板;
  bit 2表示slot 2;
  ...
  bit 7表示slot 7;
  bit 8表示slot 8;
  ...
  bit 14表示slot 14。
  1表示online,0表示offline。
*/
unsigned int AllLicOnline (void)
    {
#ifdef  INSTALL_GCSA
    UINT16 val;
#elif defined(INSTALL_GCSD)
    UINT8  val1;
    UINT8  val2;
    UINT16 val;
#endif 

    UINT32 status;

    if (sysMySlot == 0xFF)
        return 0;

#ifdef  INSTALL_GCSA
    val = *(volatile UINT16 *)0xEB000000;
#elif defined(INSTALL_GCSD)
    val1 = *(volatile UINT8 *)0xEB000000;
    val2 = *(volatile UINT8 *)0xEB040000;
    val = val2;
    val = ( val << 8 ) | val1;
#endif 

    status = val & 0x7F;
    status |= ((val & 0x3F00) << 1);
    if (sysMySlot == 7)
        {
        status |= 0x80;
        status |= ((val & 0x80) << 1);
        }
    else
        {
        status |= (val & 0x80);
        status |= 0x100;
        }

    return (status);
    }

/*******************************************************************************
*                               单板状态灯                                     *
*******************************************************************************/

/*******************************************************************************
* Run_Led
*/
void  Run_Led(BOOL flag)
{
    if (flag)
        {
        SYS_LED_RUN (GRE_ON);
        }
    else
        {
        SYS_LED_RUN (ALL_OFF);
        }
}

/*******************************************************************************
* Alarm_Led
*/
void Alarm_Led (BOOL flag)
{
}


/*******************************************************************************
* Master_Led
*/
void ResRun_Led (BOOL flag)
{
}

void ResRun_Alarm (BOOL flag)
{
}


/*******************************************************************************
* Slave_Led
*/
void Slave_Led (BOOL flag)
{
}

/*******************************************************************************
* post_Led 
*/
void post_Led (UINT32 light, UINT8 indicatChar, BOOL flag)
    {
    }
void LICRunLedOn (UINT8 LicNum)
    {
    }

void LICRunLedOff (UINT8 LicNum)
    {
    }

void LICAlarmLedOn (UINT8 LicNum)
    {
    }

void LICAlarmLedOff (UINT8 LicNum)
    {
    }

/*******************************************************************************
*                               风扇相关接口                                   *
*******************************************************************************/

#if 1
void b_GetFanStatus (unsigned char fan[])
{
}

UINT8 CheckFanState (void)
{
    return 0;
}

void Fan_Run_Led (BOOL flag)
{
}

void Fan_Alarm_Led (BOOL flag)
{
}
#endif
/*********************************************************************************
 *
 *bit0       : FILTER         0-防尘网完好,  1-防尘网触不正常
 *bit1~bit3  : XBCAT1~3       0-风扇板在位,  1-风扇板不在位
 *bit6~bit8  : XBCFSTATUS1~3  0-风扇发生故障,1-风扇板正常。
 *
 *********************************************************************************/

#ifdef INSTALL_GCSA
UINT16 bspGetAllFanStatus(void)
{
    UINT16 val;
        
    val = *(volatile UINT16 *)0xEB040000;

    return val;
}

#elif defined (INSTALL_GCSD)
UINT16 bspGetAllFanStatus(void)
{
    UINT8  val1;
    UINT8  val2;
    UINT16 val;
        
    val1 = *(volatile UINT8 *)0xEB020000;
    val2 = *(volatile UINT8 *)0xEB060000;
    val = val2;
    val = ( val << 8 ) | val1;

    return val;
}
#endif

BOOL bspGetFanStatus (UINT32 fanNo)
{
    UINT16 val;
    
    if(fanNo < 1 || fanNo >3)
    {
        printf("Fan Number Error!\n");
        return FALSE;
    }
    
    val = bspGetAllFanStatus();

    val = val & (0x20 << fanNo);
    if(val)
        return TRUE;
    else
        return FALSE;
}

BOOL bspGetFilterStatus (void)
{
    UINT16 val;
   
    val = bspGetAllFanStatus();

    val = val & 0x1;
    if(val)
        return FALSE;
    else
        return TRUE;
}

BOOL bspGetFanOnline (UINT32 fanNo)
{
    UINT16 val;
    
    if(fanNo < 1 || fanNo >3)
    {
        printf("Fan Number Error!\n");
        return FALSE;
    }
    
    val = bspGetAllFanStatus();

    val = val & (0x1 << fanNo);
    
    if(val)
        return FALSE;
    else
        return TRUE;
}
int bspSetFanSpeed(int speed)
{
    UINT8 val;
    switch(speed)
    {
        case FAN_FULL_SPEED:
            val = 0xe;
            break;
        case FAN_THR_QTR_SPEED:
            val = 0xc;
            break;
        case FAN_HALF_SPEED:
            val = 0x8;
            break;
        case FAN_QUARTER_SPEED:
            val = 0x6;
            break;
        case FAN_NONE_SPEED:
            val = 0x2;
            break;
        default:
            printf("Input speed error!\n");
            return ERROR;
    }
    *(volatile UINT8 *)0xE80000F5 = val;

    return OK;
}

/*****************************************************************************
 *                         电源板相关接口
 *****************************************************************************/
/*********************************************************************************
 *
 *bit4-bit5  : XPAALARM/XPBALARM  0-电源板有电,1-电源板没电
 *
 *********************************************************************************/
BOOL bspGetPowerStatus (UINT32 powerNo)
{
    UINT16 val;
    
    if(powerNo < 1 || powerNo >2)
    {
        printf("powerNo Number Error!\n");
        return FALSE;
    }
    
    val = *(volatile UINT16 *)0xEB040000;

    val = val & (0x8 << powerNo);
    
    if(val)
        return FALSE;
    else
        return TRUE;
}

/*****************************************************************************
 *                         温度相关接口
 *****************************************************************************/

/************************************************************************
*FUNCTION NAME	: Sub_ThermometerInit									*
*DESCRIPTION	: 温度传感器初始化										*
*INPUT			:														*
*OUTPUT 		:														*
*RETURN 		: none													*
*GLOBAL 		: none													*
*NOTE			:														*
*MODIFY DATE	VERSION 		AUTHOR			REASON					*
*=======================================================================*
*02/18/2004 	 1.0			XiaShundong 	Create					*
************************************************************************/
#include "drv/parallel/m8260IOPort.h"
typedef volatile INT32 VINT32; /* volatile unsigned word */

⌨️ 快捷键说明

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