亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? mt90826.c

?? 這是單板上DPRAM的驅動程序
?? C
字號:
#include <psos.h>
#include "board.h"
#include "sdev.h"
#include "mt8980.h"
#include "bspspec.h"
#include "mt90826.h"

#define MT90826_CR_REG    0x0
/* #define MT90826_IMS_REG   0x1 */
#define MT90826_FAR_REG   0x1

#define MT90826_DOS0_REG   0x2
#define MT90826_DOS1_REG   0x3
#define MT90826_DOS2_REG   0x4
#define MT90826_DOS3_REG   0x5
#define MT90826_DOS4_REG   0x6
#define MT90826_DOS5_REG   0x7
#define MT90826_DOS6_REG   0x8
#define MT90826_DOS7_REG   0x9

#define MT90826_FOR0_REG  0x0a
#define MT90826_FOR1_REG  0xb
#define MT90826_FOR2_REG  0xc
#define MT90826_FOR3_REG  0xd

#define  MT90826_MEMORY_BLOCK_PROGRAM  0x0020
#define  MT90826_MS_DATAM  0x0010 

#define MT90826_CR(ba,cr)     REG16(ba+(cr<<1))

static int ConfigTs(MT90826CfgStruct* pCfg, SDCConfigTsStruct *pTs)
{
    
    UCHAR  MaxSlotNum;
    unsigned short * ADDR;
    unsigned short re_val,input,temp,i;			//add by zhou

    if(pCfg->DataRate==DATA_RATE_2M)MaxSlotNum=32;
    else if(pCfg->DataRate== DATA_RATE_4M)MaxSlotNum=64;
    else if(pCfg->DataRate== DATA_RATE_8M)MaxSlotNum=128;   
    else return SDE_INVALID_ARG; 
        
    if(   pTs->StreamOut>31 || pTs->StreamIn>31 
       || pTs->ChanOut>MaxSlotNum-1 || pTs->ChanIn>MaxSlotNum-1)
       return SDE_INVALID_ARG;
    MT90826_CR(pCfg->BaseAddr,MT90826_CR_REG)&=0xffef;
    ADDR = (unsigned short *)(pCfg->BaseAddr+0x4000+((pTs->StreamOut<<8)
        +pTs->ChanOut)*2);
    *ADDR = 0xA000 + (pTs->StreamIn<<8)+pTs->ChanIn;
    //add code here by zhou
    //delay
    //for(i=0;i<1000;i++)
    //	{;}    
    input=0xA000 + (pTs->StreamIn<<8)+pTs->ChanIn;
    re_val=*ADDR;                                  
    if(re_val==input)
    	return SDE_OK;
    else
        return 	SDE_FAIL;
   //END    
}
////////////////////////////////////////////////////////////////////////////
/* Following added by zhou*/
static int Check_Connection(MT90826CfgStruct* pCfg, SDCConfigTsStruct *pTs)
{
    
    UCHAR  MaxSlotNum;
    unsigned short * ADDR;
    unsigned short re_val,input,temp,i;			

    if(pCfg->DataRate==DATA_RATE_2M)MaxSlotNum=32;
    else if(pCfg->DataRate== DATA_RATE_4M)MaxSlotNum=64;
    else if(pCfg->DataRate== DATA_RATE_8M)MaxSlotNum=128;   
    else return SDE_INVALID_ARG; 
        
    if(   pTs->StreamOut>31 || pTs->StreamIn>31 
       || pTs->ChanOut>MaxSlotNum-1 || pTs->ChanIn>MaxSlotNum-1)
       return SDE_INVALID_ARG;
       
    MT90826_CR(pCfg->BaseAddr,MT90826_CR_REG)&=0xffef;
    ADDR = (unsigned short *)(pCfg->BaseAddr+0x4000+((pTs->StreamOut<<8)+pTs->ChanOut)*2);
        
    input=0xA000 + (pTs->StreamIn<<8)+pTs->ChanIn;
    re_val=*ADDR;               
    if(re_val==input)
    	return SDE_OK;
    else
        return 	SDE_FAIL;   
}

/*above add by zhou 7-6*/
////////////////////////////////////////////////////////////////////////
static int DisableTs(MT90826CfgStruct* pCfg, SDCConfigTsStruct *pTs)
{
    
    UCHAR  MaxSlotNum;
    unsigned short * ADDR;

    if(pCfg->DataRate==DATA_RATE_2M)MaxSlotNum=32;
    else if(pCfg->DataRate== DATA_RATE_4M)MaxSlotNum=64;
    else if(pCfg->DataRate== DATA_RATE_8M)MaxSlotNum=128;   
    else return SDE_INVALID_ARG; 
        
    if(   pTs->StreamOut>31 || pTs->StreamIn>31 
       || pTs->ChanOut>MaxSlotNum-1 || pTs->ChanIn>MaxSlotNum-1)
       return SDE_INVALID_ARG;
    MT90826_CR(pCfg->BaseAddr,MT90826_CR_REG)&=0xffef;
    ADDR = (unsigned short *)(pCfg->BaseAddr+0x4000+((pTs->StreamOut<<8)
        +pTs->ChanOut)*2);
    (*ADDR) &= 0xdfff; 
    return SDE_OK;
}


static void MT90826Init(void *pDataBuf, MT90826CfgStruct *cfg )
{
    int i;
    unsigned short * ADDR;
     
    MT90826CfgStruct *pCfg = (MT90826CfgStruct *)(pDataBuf);
   
   
    /*-------------------------<< Initial data >>-------------------------------*/
    memmove(pCfg,cfg,sizeof(MT90826CfgStruct));
    
    SetLLDat(&pCfg->Rst,0); 
    for(i=0;i<12;i++);
    SetLLDat(&pCfg->Rst,1); 
    for(i=0;i<19;i++);

    ADDR= (unsigned short *)(pCfg->BaseAddr);
    for (i=0;i<18;i++)
         *(ADDR+i) = 0x0;
    memset(pCfg->BaseAddr+0x4000,0,0x3fff);

   
    MT90826_CR(pCfg->BaseAddr,MT90826_CR_REG)|=pCfg->DataRate;

    for (i=0;i<pCfg->DefTsTabEntryNum;i++)
          ConfigTs(pCfg, &(cfg->pDefTsTable[i]));
}

static int MT90826ConfigMessageMode(MT90826CfgStruct* pCfg, 
                                    MT90826MessageModeStruct *pMsgMode)
{
    UCHAR  MaxSlotNum;
    unsigned short * ADDR;

    if(pCfg->DataRate==DATA_RATE_2M)MaxSlotNum=32;
    else if(pCfg->DataRate== DATA_RATE_4M)MaxSlotNum=64;
    else if(pCfg->DataRate== DATA_RATE_8M)MaxSlotNum=128;   
    else return SDE_INVALID_ARG; 
    
    if((pMsgMode->Stream>31)||(pMsgMode->Chan>MaxSlotNum-1))
       return SDE_INVALID_ARG;

    MT90826_CR(pCfg->BaseAddr,MT90826_CR_REG)&=0xffef;
    ADDR = (USHORT *)(pCfg->BaseAddr+0x4000
          +((pMsgMode->Stream<<8)+pMsgMode->Chan)*2);

    *ADDR = 0x6000 +(USHORT)pMsgMode->Value; 
    return SDE_OK;
}

static int MT90826CheckMsg(MT90826CfgStruct* pCfg, 
                          MT90826MessageModeStruct *pMsgMode)
{
   UCHAR  MaxSlotNum;
   unsigned short * ADDR;
   int i,val1,val2;
    
   if(pCfg->DataRate==DATA_RATE_2M)MaxSlotNum=32;
     else if(pCfg->DataRate== DATA_RATE_4M)MaxSlotNum=64;
       else if(pCfg->DataRate== DATA_RATE_8M)MaxSlotNum=128;   
         else return SDE_INVALID_ARG;   
   if((pMsgMode->Stream>31)||(pMsgMode->Chan>MaxSlotNum-1))
       return SDE_INVALID_ARG;
 
   MT90826_CR(pCfg->BaseAddr,MT90826_CR_REG)&=0xffef;
   MT90826_CR(pCfg->BaseAddr,MT90826_CR_REG)|=0x0010;
   ADDR = (USHORT *)(pCfg->BaseAddr+0x4000 
         +((pMsgMode->Stream<<8)+pMsgMode->Chan)*2) ; 
   val1 = *ADDR;  
   for(i=0;i<10;i++)
   {
      val1 = *ADDR;  
      val2 = *ADDR;  
      if(val1==val2) break; 
   }
   if(i==10) return SDE_CHK_MSG_FALSE;
   pMsgMode->Value=val1;
   return  SDE_OK;  
}


/*FLOW ADD BY MAOLD 2004-2-13*/
static int SETPRBS(MT90826CfgStruct*  pCfg,SDCConfigTsStruct *pTs) //set 90826 to bit error test mode and start test
 {  
      int rc;
      unsigned short *ADDR;
      unsigned short * CMADDR;
      unsigned short * BISR;
      UCHAR  MaxSlotNum;
      
      if(pCfg->DataRate==DATA_RATE_2M)MaxSlotNum=32;
    else if(pCfg->DataRate== DATA_RATE_4M)MaxSlotNum=64;
    else if(pCfg->DataRate== DATA_RATE_8M)MaxSlotNum=128;   
    else return SDE_INVALID_ARG;
    
      if(   pTs->StreamOut>31 || pTs->StreamIn>31 
       || pTs->ChanOut>MaxSlotNum-1 || pTs->ChanIn>MaxSlotNum-1)
       return SDE_INVALID_ARG; 
      // ConfigTs(pCfg, pTs);
       //set output StreamNum and ChannelNum and Output Enable 
       CMADDR = (unsigned short *)(0x30004000 +  ((pTs->StreamOut<<8) + pTs->ChanOut)*2);
      *CMADDR = 0xe000;      
       //set input StreamNum and ChannelNum which are set in BISR rigister
      BISR = (unsigned short *)(0x30000022);
      *BISR = 0x0000+ (pTs->StreamIn<<8) + pTs->ChanIn ; 
                   
      ADDR = (unsigned short *)(0x30000000);    //0x30000000 is 90826_control register CR
      *ADDR = *ADDR & 0xF9FF;  		        //bit SBER=0 and bit CBER=0  
     
      ADDR = (unsigned short *)(0x30000000);    
      *ADDR = *ADDR | 0x0600;                   //bit CBER=1 SBER=1
      //CBER(0 TO 1)resets the bit error count register and the internal bit error counter.
      //SBER(0 TO 1)initiates the bit error test and enables the internal bit error counter.
     
      ADDR = (unsigned short *)(0x30000000);
      *ADDR = *ADDR & 0xfbff;                   //bit CBER=0 to end clear bit error count
     	
     ADDR = (unsigned short *)(0x30000000);
      *ADDR = *ADDR | 0x0200;  		            //bit SBER=1 to START TEST  
      return SDE_OK;
  }    


    
int PRBSEC(void)    //get the test error count number
 {  
     int val;
     unsigned short *ADDR;
     
     ADDR = (unsigned short *)(0x30000000);
     *ADDR = *ADDR & 0xfdff;                      //6  bit SBER=0 :TEST STOP
   	
     ADDR = (unsigned short *)(0x30000024);     //read the error count number
     val = *ADDR; 
    
     ADDR = (unsigned short *)(0x30000000);     //90826_control register CR
     *ADDR = *ADDR | 0x0400;                    //bit CBER=1
     
     ADDR = (unsigned short *)(0x30000000);
     *ADDR = *ADDR & 0xfbff;                     //CBER=0 to end clear BERR  
      
      ADDR = (unsigned short *)(0x30000000);
      *ADDR = *ADDR | 0x0200;  		            //bit SBER=1 to START TEST  
     return val;
}

int STOPPRBS(MT90826CfgStruct*  pCfg,SDCConfigTsStruct *pTs)    //stop prbs test
 {  
     unsigned short *ADDR;
     UCHAR  MaxSlotNum;
      
    if(pCfg->DataRate==DATA_RATE_2M)MaxSlotNum=32;
    else if(pCfg->DataRate== DATA_RATE_4M)MaxSlotNum=64;
    else if(pCfg->DataRate== DATA_RATE_8M)MaxSlotNum=128;   
    else return SDE_INVALID_ARG;
    
      if(   pTs->StreamOut>31 || pTs->StreamIn>31 
       || pTs->ChanOut>MaxSlotNum-1 || pTs->ChanIn>MaxSlotNum-1)
       return SDE_INVALID_ARG; 	
     ADDR = (unsigned short *)(0x30000000);
     *ADDR = *ADDR & 0xfdff;                      //6  bit SBER=0 :TEST STOP
     
     ADDR = (unsigned short *)(0x30004000 +  ((pTs->StreamOut<<8) + pTs->ChanOut)*2);
     *ADDR &= 0x1fff;        //clean CM
     return SDE_OK;
}

static int MT90826Cntrl(void *pDataBuf, int cmd, void *pParam, int maxlen)
{
    int rc;
    MT90826CfgStruct*  pCfg =(MT90826CfgStruct *)(pDataBuf);   
    SDCConfigTsStruct *pTs;
   
    switch(cmd)
    {
        case SDC_REINIT:
            MT90826Init(pDataBuf, pCfg);
            break;
            
        case SDC_SET_MTCH:
            if(maxlen!=sizeof(SDCConfigTsStruct))return SDE_INVALID_ARG;
                
            pTs = (SDCConfigTsStruct *)pParam;
            rc=ConfigTs(pCfg, pTs);
            return rc;
            
        case SDC_CHK_CONNECT:
            if(maxlen!=sizeof(SDCConfigTsStruct))return SDE_INVALID_ARG;
                
            pTs = (SDCConfigTsStruct *)pParam;
            rc=Check_Connection(pCfg, pTs);
            return rc;
   
        case SDC_MESSAGE_MODE:
            if(maxlen!=sizeof(MT90826MessageModeStruct))
                return SDE_INVALID_ARG;
            rc=MT90826ConfigMessageMode(pCfg,(MT90826MessageModeStruct*)pParam);
            return rc;
       
       case SDC_CHECK_MSG:
            if(maxlen!=sizeof(MT90826MessageModeStruct))
                return SDE_INVALID_ARG;
            rc=MT90826CheckMsg(pCfg, (MT90826MessageModeStruct *)pParam);
            return rc;
       case SDC_SET_UNCONNECT:
            if(maxlen!=sizeof(SDCConfigTsStruct))return SDE_INVALID_ARG;
                
            pTs = (SDCConfigTsStruct *)pParam;
            rc=DisableTs(pCfg, pTs);
            return rc;
            /*flow add by maold 2004-2-13*/

       case SDC_PRBS_MODE:
            pTs = (SDCConfigTsStruct *)pParam;
            rc=SETPRBS(pCfg,pTs);
            return rc;  
     
       case SDC_PRBSEC_READ:  
            rc=PRBSEC();
            return rc; 
                  
      case SDC_PRBS_STOP:
            pTs = (SDCConfigTsStruct *)pParam;
            rc=STOPPRBS(pCfg,pTs);
            return rc;
                    
       default: 
            return SDE_UNKNOW_CMD;
    }/* end of switch(cmd) */
    return SDE_OK;
}

UCHAR *MT90826BspInit(int DEV, UCHAR *FreeMemPtr, MT90826CfgStruct *cfg)
{
    MT90826CfgStruct *pCfg;
    InstallSD(DEV,NULL,NULL,MT90826Cntrl,FreeMemPtr);
    MT90826Init(FreeMemPtr, cfg); 
    pCfg=(MT90826CfgStruct*)FreeMemPtr;
    FreeMemPtr += sizeof(MT90826CfgStruct);
    
    pCfg->pDefTsTable=(SDCConfigTsStruct*)FreeMemPtr;
    memcpy(FreeMemPtr,cfg->pDefTsTable,cfg->DefTsTabEntryNum*
                sizeof(SDCConfigTsStruct));
    FreeMemPtr +=cfg->DefTsTabEntryNum*sizeof(SDCConfigTsStruct);
    memcpy(FreeMemPtr,"90826Dat",8);
    FreeMemPtr += 8;
    return FreeMemPtr;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品一区专区| 国产在线视视频有精品| 综合婷婷亚洲小说| 日韩码欧中文字| 亚洲欧洲日韩综合一区二区| 国产精品久久久久天堂| 国产日本欧洲亚洲| 欧美激情艳妇裸体舞| 国产精品久久久久久亚洲毛片| 国产精品私人影院| 国产精品久久久久三级| 亚洲色图在线视频| 一区二区三区四区五区视频在线观看 | 成人性生交大片免费看中文| 亚洲国产精品久久人人爱| 9191成人精品久久| 在线播放欧美女士性生活| 在线观看欧美日本| 欧美精品精品一区| 精品国精品国产尤物美女| 久久综合一区二区| 中文字幕在线观看不卡| 一区二区三区免费| 日韩av高清在线观看| 精品无人区卡一卡二卡三乱码免费卡| 激情国产一区二区| 成人app网站| 欧美性受xxxx黑人xyx| 91精品国产入口| 久久久精品一品道一区| 亚洲人成精品久久久久久| 天堂蜜桃一区二区三区| 国产乱人伦精品一区二区在线观看| 成人性生交大片免费看中文 | 欧美在线视频你懂得| 欧美日韩国产首页| 欧美白人最猛性xxxxx69交| 欧美激情一区二区三区在线| 亚洲一区二区三区自拍| 久久爱www久久做| 成人黄色国产精品网站大全在线免费观看 | 亚洲专区一二三| 国产精品色在线观看| 一区av在线播放| 久久不见久久见中文字幕免费| 高清av一区二区| 欧美精品日韩精品| 中文一区二区在线观看| 性感美女久久精品| 高清不卡在线观看av| 欧美日韩视频第一区| 国产香蕉久久精品综合网| 亚洲猫色日本管| 激情久久五月天| 欧美在线免费观看视频| 日本一区二区三区四区在线视频 | 激情久久五月天| 欧美色综合网站| 欧美激情综合五月色丁香小说| 亚洲777理论| 成人免费黄色大片| 日韩美女天天操| 亚洲福利视频一区二区| 国产精品888| 日韩女同互慰一区二区| 亚洲欧美日韩电影| 国产乱妇无码大片在线观看| 欧美日韩一区在线观看| 国产精品美女久久久久久久久久久 | av色综合久久天堂av综合| 日韩视频一区二区三区 | 欧美在线一区二区三区| 久久精品亚洲麻豆av一区二区| 亚洲h动漫在线| av一本久道久久综合久久鬼色| 亚洲精品在线一区二区| 午夜免费久久看| 91亚洲精品乱码久久久久久蜜桃| 精品日韩一区二区三区免费视频| 午夜视频一区二区| 色婷婷av一区二区三区软件 | 亚洲精品乱码久久久久| 高清久久久久久| 久久久久久久久久看片| 美日韩一区二区三区| 欧美精品xxxxbbbb| 亚洲福利一二三区| 欧美少妇性性性| 亚洲综合丁香婷婷六月香| aa级大片欧美| 国产高清亚洲一区| 精品久久久网站| 久热成人在线视频| 日韩视频一区在线观看| 免费不卡在线视频| 欧美一区二区三区在线观看| 天堂蜜桃一区二区三区| 制服丝袜日韩国产| 亚洲大片精品永久免费| 欧美私模裸体表演在线观看| 亚洲资源在线观看| 欧美日韩一本到| 首页亚洲欧美制服丝腿| 欧美军同video69gay| 视频一区二区三区入口| 在线不卡一区二区| 日本人妖一区二区| 日韩一区二区不卡| 久久精品国产一区二区三区免费看| 制服丝袜亚洲色图| 激情综合色综合久久| 国产视频在线观看一区二区三区| 国产.欧美.日韩| 亚洲欧洲成人自拍| 在线观看日韩毛片| 日韩精品久久理论片| 欧美变态凌虐bdsm| 大美女一区二区三区| 亚洲视频 欧洲视频| 欧美性感一类影片在线播放| 日韩av午夜在线观看| 2023国产精品| 成人激情图片网| 一区二区久久久| 欧美一区二区在线看| 精品一区二区三区久久| 中文字幕国产一区| 在线中文字幕一区二区| 天天影视涩香欲综合网| 精品三级在线看| 9i在线看片成人免费| 亚洲国产中文字幕在线视频综合| 91精品国产高清一区二区三区蜜臀| 看片网站欧美日韩| 中文字幕在线不卡一区| 欧美日韩电影在线| 韩日欧美一区二区三区| 亚洲欧美中日韩| 欧美精品自拍偷拍| 国产精品自拍av| 一区二区在线观看免费视频播放| 91精品国产91久久久久久一区二区| 国产真实精品久久二三区| 一区在线中文字幕| 欧美卡1卡2卡| av网站一区二区三区| 日韩不卡一二三区| 中文字幕在线一区| 91精品福利在线一区二区三区| 成人免费视频网站在线观看| 亚洲成av人综合在线观看| 欧美大黄免费观看| 色婷婷综合久久久久中文一区二区 | 亚洲欧美日韩中文播放 | 免费欧美在线视频| 成人欧美一区二区三区视频网页| 日韩av中文在线观看| 在线不卡一区二区| 国产精品18久久久久久久久久久久| 综合久久综合久久| 日韩久久久精品| 欧美在线观看18| 国产一区二区日韩精品| 亚洲高清一区二区三区| 亚洲国产成人自拍| 欧美不卡视频一区| 欧美日韩免费观看一区二区三区| 国产在线视视频有精品| 爽好多水快深点欧美视频| 亚洲女与黑人做爰| 国产亚洲人成网站| 欧美一级黄色录像| 精品视频在线免费看| www.66久久| 国产电影精品久久禁18| 美国一区二区三区在线播放| 亚洲一区二区三区四区的| 国产精品久久毛片| 国产午夜亚洲精品不卡| 日韩一区二区三区视频在线观看 | 椎名由奈av一区二区三区| 久久久久亚洲综合| 日韩三级av在线播放| 5858s免费视频成人| 在线一区二区三区四区五区| 成人精品电影在线观看| 国产一区二区三区不卡在线观看| 日韩电影在线观看电影| 亚洲国产精品一区二区www | 成人综合激情网| 狠狠狠色丁香婷婷综合激情| 日本亚洲电影天堂| 亚洲一区二区精品久久av| 一区二区免费看| 亚洲精品v日韩精品| 亚洲精品久久久久久国产精华液| 国产精品精品国产色婷婷| 国产亚洲视频系列| 中文av一区二区| 国产精品久久久久国产精品日日|