?? ds21354.c
字號:
#include <psos.h>
#include "board.h"
#include "sdev.h"
#include "bspcomm.h"
#include "bspspec.h"
#include "ds21354.h"
const DS21x54Reg DS21x54DefaultReg={
0,/* UCHAR VCR1;*/
0,/* UCHAR VCR2;*/
0,/* UCHAR CRCCR1;*/
0,/* UCHAR CRCCR2;*/
0,/* UCHAR EBCR1;*/
0,/* UCHAR EBCR2;*/
0,/* UCHAR SR1;*/
0,/* UCHAR SR2;*/
0,/* UCHAR RIR*/
0,0,0,0,0,0,/* UCHAR Reserved6[6];*/
0,/* UCHAR IDR;*/
0x20,/* UCHAR RCR1;*/
0x06,/* UCHAR RCR2;*/
0x00,/* UCHAR TCR1;*/
0x00,/* UCHAR TCR2;*/
0x4c,/* UCHAR CCR1;*/
0x00,/* UCHAR TEST1;*/
0x00,/* UCHAR IMR1;*/
0x00,/* UCHAR IMR2;*/
0x40,/* UCHAR LICR*/
0x98,/* UCHAR TEST2;*/
0x14,/* UCHAR CCR2;*/
0x02,/* UCHAR CCR3;*/
0x00,/* UCHAR TSaCR;*/
0x00,/* UCHAR CCR6;*/
0x00,/* UCHAR SSR;*/
0x00,/* UCHAR RNAF;*/
0x1b,/* UCHAR TAF;*/
0x40,/* UCHAR TNAF;*/
0x00,/* UCHAR TCBR1;*/
0x00,/* UCHAR TCBR2;*/
0x00,/* UCHAR TCBR3;*/
0x00,/* UCHAR TCBR4;*/
0x00,/* UCHAR TIR1;*/
0x00,/* UCHAR TIR2;*/
0x00,/* UCHAR TIR3;*/
0x00,/* UCHAR TIR4;*/
0x00,/* UCHAR TIDR;*/
0x00,/* UCHAR RCBR1;*/
0x00,/* UCHAR RCBR2;*/
0x00,/* UCHAR RCBR3;*/
0x00,/* UCHAR RCBR4;*/
0x00,/* UCHAR RAF;*/
0x00,/* UCHAR RS1;*/
0x00,/* UCHAR RS2;*/
0x00,/* UCHAR RS3;*/
0x00,/* UCHAR RS4;*/
0x00,/* UCHAR RS5;*/
0x00,/* UCHAR RS6;*/
0x00,/* UCHAR RS7;*/
0x00,/* UCHAR RS8;*/
0x00,/* UCHAR RS9;*/
0x00,/* UCHAR RS10;*/
0x00,/* UCHAR RS11;*/
0x00,/* UCHAR RS12;*/
0x00,/* UCHAR RS13;*/
0x00,/* UCHAR RS14;*/
0x00,/* UCHAR RS15;*/
0x00,/* UCHAR RS16;*/
0x00,/* UCHAR TS1;*/
0x00,/* UCHAR TS2;*/
0x00,/* UCHAR TS3;*/
0x00,/* UCHAR TS4;*/
0x00,/* UCHAR TS5;*/
0x00,/* UCHAR TS6;*/
0x00,/* UCHAR TS7;*/
0x00,/* UCHAR TS8;*/
0x00,/* UCHAR TS9;*/
0x00,/* UCHAR TS10x00;*/
0x00,/* UCHAR TS11;*/
0x00,/* UCHAR TS12;*/
0x00,/* UCHAR TS13;*/
0x00,/* UCHAR TS14;*/
0x00,/* UCHAR TS15;*/
0x00,/* UCHAR TS16;*/
0x00,/* UCHAR TSiAF;*/
0x00,/* UCHAR TSiNAF;*/
0x00,/* UCHAR TRA;*/
0x00,/* UCHAR TSa4;*/
0x00,/* UCHAR TSa5;*/
0x00,/* UCHAR TSa6;*/
0x00,/* UCHAR TSa7;*/
0x00,/* UCHAR TSa8;*/
0x00,/* UCHAR RSiAF;*/
0x00,/* UCHAR RSiNAF;*/
0x00,/* UCHAR RRA;*/
0x00,/* UCHAR RSa4;*/
0x00,/* UCHAR RSa5;*/
0x00,/* UCHAR RSa6;*/
0x00,/* UCHAR RSa7;*/
0x00,/* UCHAR RSa8;*/
0x00,/* UCHAR TC1;*/
0x00,/* UCHAR TC2;*/
0x00,/* UCHAR TC3;*/
0x00,/* UCHAR TC4;*/
0x00,/* UCHAR TC5;*/
0x00,/* UCHAR TC6;*/
0x00,/* UCHAR TC7;*/
0x00,/* UCHAR TC8;*/
0x00,/* UCHAR TC9;*/
0x00,/* UCHAR TC10x00;*/
0x00,/* UCHAR TC11;*/
0x00,/* UCHAR TC12;*/
0x00,/* UCHAR TC13;*/
0x00,/* UCHAR TC14;*/
0x00,/* UCHAR TC15;*/
0x00,/* UCHAR TC16;*/
0x00,/* UCHAR TC17;*/
0x00,/* UCHAR TC18;*/
0x00,/* UCHAR TC19;*/
0x00,/* UCHAR TC20x00;*/
0x00,/* UCHAR TC21;*/
0x00,/* UCHAR TC22;*/
0x00,/* UCHAR TC23;*/
0x00,/* UCHAR TC24;*/
0x00,/* UCHAR TC25;*/
0x00,/* UCHAR TC26;*/
0x00,/* UCHAR TC27;*/
0x00,/* UCHAR TC28;*/
0x00,/* UCHAR TC29;*/
0x00,/* UCHAR TC30x00;*/
0x00,/* UCHAR TC31;*/
0x00,/* UCHAR TC32;*/
0x00,/* UCHAR RC1;*/
0x00,/* UCHAR RC2;*/
0x00,/* UCHAR RC3;*/
0x00,/* UCHAR RC4;*/
0x00,/* UCHAR RC5;*/
0x00,/* UCHAR RC6;*/
0x00,/* UCHAR RC7;*/
0x00,/* UCHAR RC8;*/
0x00,/* UCHAR RC9;*/
0x00,/* UCHAR RC10x00;*/
0x00,/* UCHAR RC11;*/
0x00,/* UCHAR RC12;*/
0x00,/* UCHAR RC13;*/
0x00,/* UCHAR RC14;*/
0x00,/* UCHAR RC15;*/
0x00,/* UCHAR RC16;*/
0x00,/* UCHAR RC17;*/
0x00,/* UCHAR RC18;*/
0x00,/* UCHAR RC19;*/
0x00,/* UCHAR RC20x00;*/
0x00,/* UCHAR RC21;*/
0x00,/* UCHAR RC22;*/
0x00,/* UCHAR RC23;*/
0x00,/* UCHAR RC24;*/
0x00,/* UCHAR RC25;*/
0x00,/* UCHAR RC26;*/
0x00,/* UCHAR RC27;*/
0x00,/* UCHAR RC28;*/
0x00,/* UCHAR RC29;*/
0x00,/* UCHAR RC30x00;*/
0x00,/* UCHAR RC31;*/
0x00,/* UCHAR RC32;*/
0x00,/* UCHAR TCC1;*/
0x00,/* UCHAR TCC2;*/
0x00,/* UCHAR TCC3;*/
0x00,/* UCHAR TCC4;*/
0x00,/* UCHAR RCC1;*/
0x00,/* UCHAR RCC2;*/
0x00,/* UCHAR RCC3;*/
0x00,/* UCHAR RCC4;*/
0x00,/* UCHAR CCR4;*/
0x00,/* UCHAR TDS0M;*/
0x00,/* UCHAR CCR5;*/
0x00,/* UCHAR RDS0M;*/
0,/* UCHAR TEST3;*/
0x00,0x00,0x00,/* UCHAR Reserved3[3];*/
0x00,/* UCHAR HCR;*/
0x00,/* UCHAR HSR;*/
0x00,/* UCHAR HIMR;*/
0x00,/* UCHAR RHIR;*/
0x00,/* UCHAR RHFR;*/
0x00,/* UCHAR IBO;*/
0x00,/* UCHAR THIR;*/
0x00,/* UCHAR THFR;*/
0x00,/* UCHAR RDC1;*/
0x00,/* UCHAR RDC2;*/
0x00,/* UCHAR TDC1;*/
0x00,/* UCHAR TDC2;*/
0x00,0x00,0x00,0x00/* UCHAR Reserved4[4];*/
};
void DS21x54Init(void *pDataBuf,DS21x54CfgStruct *Cfg)
{
int i;
DS21x54Reg *pRegMap;
DS21x54CfgStruct *pCfg=(DS21x54CfgStruct *)pDataBuf;
memcpy(pCfg,Cfg,sizeof(*Cfg));
pRegMap=(DS21x54Reg *)(pCfg->BaseAddr);
//for(i=0;i<4000;i++);
memset(pRegMap,0,256);
memcpy(pRegMap,&DS21x54DefaultReg,sizeof(DS21x54Reg));
pRegMap->CCR5&=~0x60;
pRegMap->CCR5|=0x60;
pRegMap->CCR5&=~0x60;
pRegMap->CCR5|=0x80;/*reset line interface*/
for(i=0;i<2000;i++);
pRegMap->CCR5&=~0x80;/*reset line interface*/
for(i=0;i<2000;i++);
pRegMap->CCR6|=2;/*reset RECEIVE ELASTIC STORE*/
if(pCfg->SyncIF)
pRegMap->CCR6|=0x20;
else
pRegMap->CCR6&=~0x20;
}
int DS21x54GetWarning(void *pDataBuf,void *pParam,int maxlen)
{
UCHAR *pReg;
UCHAR RegContext;
DS21x54CfgStruct *pCfg=(DS21x54CfgStruct *)(pDataBuf);
DS21x54WarningStruct *pp=(DS21x54WarningStruct *)pParam;
/* RegContext=SRead(&(((DS21x54Reg *)pRegBase)->SR1)); */
pCfg->Timer++;
RegContext=SRead(&(((DS21x54Reg *)pCfg->BaseAddr)->SR1));
if(RegContext & 0x02) pp->RCL=1;
else pp->RCL=0;
if(RegContext & 0x01) pp->RLOS=1;
else pp->RLOS=0;
RegContext=SRead(&(((DS21x54Reg *)pCfg->BaseAddr)->RIR));
/*if(RegContext & 0x80)if(++(pp->TPSlipCnt)>=SLIP_TH)pp->TPSlip=1;*/
/*if(RegContext & 0x40)if(++(pp->TNSlipCnt)>=SLIP_TH)pp->TNSlip=1;*/
if(RegContext & 0x10) ++(pCfg->RPSlipCnt);
if(RegContext & 0x08) ++(pCfg->RNSlipCnt);
pp->RPSlip=0;
pp->RNSlip=0;
if(pCfg->Timer>=WARNINGTIMECNT)
{
/*memset(pp,0,sizeof(DS21x54WarningStruct));*/
pp->RPSlip=(pCfg->RPSlipCnt)>=SLIP_TH ? 1:0;
pp->RNSlip=(pCfg->RNSlipCnt)>=SLIP_TH ? 1:0;
pCfg->RPSlipCnt=0;
pCfg->RNSlipCnt=0;
pCfg->Timer=0;
}
return SDE_OK;
}
int DS21x54Cntrl(void *pDataBuf, int cmd, void *pParam, int maxlen)
{
int res;
DS21x54Reg *pRegMap;
DS21x54CfgStruct* pCfg =(DS21x54CfgStruct *)(pDataBuf);
pRegMap=(DS21x54Reg *)(pCfg->BaseAddr);
switch(cmd) {
case SDC_REINIT:
DS21x54Init(pDataBuf,pCfg);
res=SDE_OK;
break;
case SDC_DS21x54_REMOTE_LOOPBACK:
pRegMap->CCR4 |= 0x80;
res=SDE_OK;
break;
case SDC_DS21x54_REMOTE_UNLOOPBACK:
pRegMap->CCR4 &= ~0x80;
res=SDE_OK;
break;
case SDC_DS21x54_LOCAL_LOOPBACK:
pRegMap->CCR4 |= 0x40;
res=SDE_OK;
break;
case SDC_DS21x54_LOCAL_UNLOOPBACK:
pRegMap->CCR4 &= ~0x40;
res=SDE_OK;
break;
case SDC_DS21x54_FRAMER_LOOPBACK:
pRegMap->CCR1 |= 0x80;
res=SDE_OK;
break;
case SDC_DS21x54_FRAMER_UNLOOPBACK:
pRegMap->CCR1 &= ~0x80;
res=SDE_OK;
break;
case SDC_DS21x54_SETSDH:
pRegMap->CCR6|=0x20;
res=SDE_OK;
break;
case SDC_DS21x54_UNSETSDH:
pRegMap->CCR6&=~0x20;
res=SDE_OK;
break;
case SDC_DS21x54_GET_CODE_VILATION_COUNT:
res=pRegMap->VCR1<<8;
res|=pRegMap->VCR2;
break;
case SDC_DS21x54_GET_CRC_COUNT:
res=(pRegMap->CRCCR1&3)<<8;
res|=pRegMap->CRCCR2;
break;
case SDC_DS21x54_GET_ERR_COUNT:
res=(pRegMap->EBCR1&3)<<8;
res|=pRegMap->EBCR2;
break;
case SDC_DS21x54_GET_ID:
res=(pRegMap->IDR)& 0xf;
break;
case SDC_DS21x54_GETWARNING:
if(maxlen!=sizeof(DS21x54WarningStruct))
res=SDE_INVALID_ARG;
else
res=DS21x54GetWarning(pCfg,pParam,maxlen);
break;
default:
res=SDE_UNKNOW_CMD;
}
return res;
}
static UCHAR SRead(UCHAR *pReg)
{
/*SR1,SR2,RIR reading
write-read-write mechanism
*/
UCHAR Reg;
*pReg=0xff;
Reg=*pReg;
*pReg=Reg;
return Reg;
}
UCHAR *DS21x54BspInit(int DEV, char *FreeMemPtr, DS21x54CfgStruct *cfg)
{
InstallSD(DEV,NULL,NULL,DS21x54Cntrl,FreeMemPtr);
DS21x54Init(FreeMemPtr, cfg);
FreeMemPtr += sizeof(DS21x54CfgStruct);
memcpy(FreeMemPtr,"*DS21x54",8);
FreeMemPtr += 8;
return FreeMemPtr;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -