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

📄 scu2misc.c

📁 这是单板上DPRAM的驱动程序
💻 C
字号:
#include <psos.h>
#include "board.h"
#include "scu2misc.h"
#include "bspcomm.h"
#include "bspspec.h"

static void ScuMiscInit(void *pDataBuf, ScuMiscCfgStruct *cfg )
{
    ScuMiscCfgStruct*   pCfg =(ScuMiscCfgStruct *)(pDataBuf);
    memmove(pCfg,cfg,sizeof(*cfg));
}

static int ScuMiscCntrl(void *pDataBuf, int cmd, void *pParam, int maxlen)
{
    int ret, i, j, Slave0=0, Slave1=1, NIUAlarmsBuf[10];
    volatile int rc;
    ULONG temp, temp1, *buf;
    ScuMiscCfgStruct*  pCfg =(ScuMiscCfgStruct *)(pDataBuf);
    temp=*(ULONG *)(CS7_BASE+8);
    temp1=*(ULONG *)(CS7_BASE+12);
    switch(cmd)
    {
        case SDC_REINIT:
            ScuMiscInit(pDataBuf,pCfg);
            break;

        case SDC_GET_ALARMS:
            buf=(ULONG *)pParam;i=0; maxlen/=4;
            if((temp&(1L<<(31-0)))==0){ 
                if(i>=maxlen)return SDE_SHORTER_BUF;
                buf[i++]=SDA_LOST_FCLK;
            }
            if((temp&(1L<<(31-1)))==0){ 
                if(i>=maxlen)return SDE_SHORTER_BUF;
                buf[i++]=SDA_LOST_OBCLK;
            }
            if((temp&(1L<<(31-2)))==0){ 
                if(i>=maxlen)return SDE_SHORTER_BUF;
                buf[i++]=SDA_ZIPSOCKET0_SYNC1;
            }
            if((temp&(1L<<(31-3)))==0){ 
                if(i>=maxlen)return SDE_SHORTER_BUF;
                buf[i++]=SDA_ZIPSOCKET0_SYNC2;
            }
            if(temp&(1L<<(31-4))){ 
                if(i>=maxlen)return SDE_SHORTER_BUF;
                buf[i++]=SDA_ZIPSOCKET0_ALARM;
            }
            if(temp&(1L<<(31-5))){ 
                if(i>=maxlen)return SDE_SHORTER_BUF;
                buf[i++]=SDA_ZIPSOCKET0_TESTMODE;
            }
            if((temp&(1L<<(31-8)))==0){
                if(i>=maxlen)return SDE_SHORTER_BUF;
                buf[i++]=SDA_BAT_TEMP_HI;
            }
            if((temp&(1L<<(31-10)))==0){
                if(i>=maxlen)return SDE_SHORTER_BUF;
                buf[i++]=SDA_DC_POWER_ERR;
            }                
            if((temp&(1L<<(31-25)))==0){
            	if(i>=maxlen)return SDE_SHORTER_BUF;
            	buf[i++]=SDA_BAT_VOLTAGE_HI;
            }	
            if((temp&(1L<<(31-27)))==0){
            	if(i>=maxlen)return SDE_SHORTER_BUF;
            	buf[i++]=SDA_BAT_VOLTAGE_LO;                                                                             
            }
            if((temp&(1L<<(31-21)))==0){ 
                if(i>=maxlen)return SDE_SHORTER_BUF;
                buf[i++]=SDA_ZIPSOCKET1_SYNC1;
            }
            if((temp&(1L<<(31-22)))==0){ 
                if(i>=maxlen)return SDE_SHORTER_BUF;
                buf[i++]=SDA_ZIPSOCKET1_SYNC2;
            }
            if(temp&(1L<<(31-23))){ 
                if(i>=maxlen)return SDE_SHORTER_BUF;
                buf[i++]=SDA_ZIPSOCKET1_ALARM;
            }
            if(temp&(1L<<(31-24))){ 
                if(i>=maxlen)return SDE_SHORTER_BUF;
                buf[i++]=SDA_ZIPSOCKET1_TESTMODE;
            }
            if(temp&(1L<<(31-29))){ 
                if(i>=maxlen)return SDE_SHORTER_BUF;
                buf[i++]=SDA_MAIN_POWER_LOST;
            }
            if((temp&(1L<<(31-11)))==0){ 
                if(i>=maxlen)return SDE_SHORTER_BUF;
                buf[i++]=SDA_BPU0_DSP0_TIMEOUT;
            }
            if((temp&(1L<<(31-12)))==0){ 
                if(i>=maxlen)return SDE_SHORTER_BUF;
                buf[i++]=SDA_BPU0_DSP1_TIMEOUT;
            }
            if((temp&(1L<<(31-30)))==0){ 
                if(i>=maxlen)return SDE_SHORTER_BUF;
                buf[i++]=SDA_BPU1_DSP0_TIMEOUT;
            } 
            if((temp&(1L<<(31-31)))==0){ 
                if(i>=maxlen)return SDE_SHORTER_BUF;
                buf[i++]=SDA_BPU1_DSP1_TIMEOUT;
            }
            if(temp&(1L<<(31-13))){ 
                if(i>=maxlen)return SDE_SHORTER_BUF;
                buf[i++]=SDA_TLOW0;
            }
            if(temp&(1L<<(31-14))){ 
                if(i>=maxlen)return SDE_SHORTER_BUF;
                buf[i++]=SDA_THIGH0;
            }
            if(temp&(1L<<(31-16))){ 
                if(i>=maxlen)return SDE_SHORTER_BUF;
                buf[i++]=SDA_TLOW1;
            }
            if(temp&(1L<<(31-17))){ 
                if(i>=maxlen)return SDE_SHORTER_BUF;
                buf[i++]=SDA_TLOW2;
            }
            if(temp&(1L<<(31-18))){ 
                if(i>=maxlen)return SDE_SHORTER_BUF;
                buf[i++]=SDA_THIGH2;
            }
            if(temp&(1L<<(31-19))){ 
                if(i>=maxlen)return SDE_SHORTER_BUF;
                buf[i++]=SDA_TLOW3;
            }
            if(temp&(1L<<(31-20))){ 
                if(i>=maxlen)return SDE_SHORTER_BUF;
                buf[i++]=SDA_THIGH3;
            }
            if((temp&(1L<<(31-7)))==0){ 
                if(i>=maxlen)return SDE_SHORTER_BUF;
                buf[i++]=SDA_BT8370_ALARM0;
                rc = sd_cntrl(SDN_NIU, SDC_SEL_SLAVE, &Slave0, sizeof(int));
                rc = sd_cntrl(SDN_NIU, SDC_GET_ALARMS, NIUAlarmsBuf, sizeof(NIUAlarmsBuf));
                for (j = 0; j < rc; j++){
                    if(rc == SDE_SHORTER_BUF)
                        return SDE_SHORTER_BUF;
                    else if(NIUAlarmsBuf[j] == SDA_BT8370_LOSS_OF_FRAME_ALIGNMENT)
                        buf[i++]=SDA_BT8370_0_LOSS_OF_FRAME_ALIGNMENT;
			        else if(NIUAlarmsBuf[j] == SDA_BT8370_LOSS_OF_RECEIVE_SIGNAL)
                        buf[i++]=SDA_BT8370_0_LOSS_OF_RECEIVE_SIGNAL;
			        else if(NIUAlarmsBuf[j] == SDA_BT8370_LOSS_OF_RECEIVE_ANALOG_SIGNAL)
                        buf[i++]=SDA_BT8370_0_LOSS_OF_RECEIVE_ANALOG_SIGNAL;
                    else if(NIUAlarmsBuf[j] == SDA_BT8370_LOSS_OF_ALARM_INDICATION_SIGNAL)
                        buf[i++]=SDA_BT8370_0_LOSS_OF_ALARM_INDICATION_SIGNAL;
                    else if(NIUAlarmsBuf[j] == SDA_BT8370_POSITIVE_FRAME_SLIP)
                        buf[i++]=SDA_BT8370_0_POSITIVE_FRAME_SLIP;
                    else if(NIUAlarmsBuf[j] == SDA_BT8370_NEGATIVE_FRAME_SLIP)
                        buf[i++]=SDA_BT8370_0_NEGATIVE_FRAME_SLIP;
                }
            }
            if((temp&(1L<<(31-26)))==0){ 
                if(i>=maxlen)return SDE_SHORTER_BUF;
                buf[i++]=SDA_BT8370_ALARM1;
                rc = sd_cntrl(SDN_NIU, SDC_SEL_SLAVE, &Slave1, sizeof(int));
                rc = sd_cntrl(SDN_NIU, SDC_GET_ALARMS, NIUAlarmsBuf, sizeof(NIUAlarmsBuf));
                for (j = 0; j < rc; j++){
                    if(rc == SDE_SHORTER_BUF)
                        return SDE_SHORTER_BUF;
                    else if(NIUAlarmsBuf[j] == SDA_BT8370_LOSS_OF_FRAME_ALIGNMENT)
                        buf[i++]=SDA_BT8370_1_LOSS_OF_FRAME_ALIGNMENT;
			        else if(NIUAlarmsBuf[j] == SDA_BT8370_LOSS_OF_RECEIVE_SIGNAL)
                        buf[i++]=SDA_BT8370_1_LOSS_OF_RECEIVE_SIGNAL;
			        else if(NIUAlarmsBuf[j] == SDA_BT8370_LOSS_OF_RECEIVE_ANALOG_SIGNAL)
                        buf[i++]=SDA_BT8370_1_LOSS_OF_RECEIVE_ANALOG_SIGNAL;
                    else if(NIUAlarmsBuf[j] == SDA_BT8370_LOSS_OF_ALARM_INDICATION_SIGNAL)
                        buf[i++]=SDA_BT8370_1_LOSS_OF_ALARM_INDICATION_SIGNAL;
                    else if(NIUAlarmsBuf[j] == SDA_BT8370_POSITIVE_FRAME_SLIP)
                        buf[i++]=SDA_BT8370_1_POSITIVE_FRAME_SLIP;
                    else if(NIUAlarmsBuf[j] == SDA_BT8370_NEGATIVE_FRAME_SLIP)
                        buf[i++]=SDA_BT8370_1_NEGATIVE_FRAME_SLIP;
                }
            }
            if(temp1&(1L<<(31-0))){ 
                if(i>=maxlen)return SDE_SHORTER_BUF;
                buf[i++]=SDA_EXTERNAL_ALARM0;
            }
            if(temp1&(1L<<(31-1))){ 
                if(i>=maxlen)return SDE_SHORTER_BUF;
                buf[i++]=SDA_EXTERNAL_ALARM1;
            }
            if(temp1&(1L<<(31-2))){ 
                if(i>=maxlen)return SDE_SHORTER_BUF;
                buf[i++]=SDA_EXTERNAL_ALARM2;
            }
            return i;
        case SDC_NIU0_TYPE:
            return (GET_PA_BIT(4))?NIU_E1:NIU_HDSL;
        case SDC_NIU1_TYPE:
            return (GET_PA_BIT(5))?NIU_E1:NIU_HDSL;
        case SDC_BAT_RECHS:
            return (temp&(1<<(31-6)))?1:0;
        case SDC_GET_TCOM0:
            return (temp&(1<<(31-15)))?1:0;
        case SDC_GET_SITE_TYPE:
            return (GET_PC_BIT(4))?SITE_S:SITE_O;
        case SDC_GET_SITE_ADDR:
            return (GET_PA_BIT(3)<<2)|(GET_PC_VAL(0x0600)>>9);
        default:
            return SDE_UNKNOW_CMD;
    }/* end of switch(cmd) */
    return SDE_OK;
}

char *ScuMiscBspInit(int DEV, char *FreeMemPtr, ScuMiscCfgStruct *cfg)
{
    InstallSD(DEV,NULL,NULL,ScuMiscCntrl,FreeMemPtr);
    ScuMiscInit(FreeMemPtr, cfg); 
    FreeMemPtr += sizeof(ScuMiscCfgStruct);
    memcpy(FreeMemPtr,"*ScuMisc",8);
    FreeMemPtr += 8;
    return FreeMemPtr;
}

⌨️ 快捷键说明

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