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

📄 arch.c

📁 这是单板上DPRAM的驱动程序
💻 C
字号:
/* @(#) pSOSystem/PPC V221 */
/***********************************************************************/
/*                                                                     */
/*   MODULE:  mpc8xx/ecom/src/arch.c                                   */
/*   DATE:    99/10/22                                                 */
/*   AUTHOR:  Dong Aiping                                              */
/*   PURPOSE:                                                          */
/*                                                                     */
/*---------------------------------------------------------------------*/
/*                                                                     */
/*           Copyright 1999 - 2000, ZHONGXING TELECOM CO.,LTD.         */
/*                      ALL RIGHTS RESERVED                            */
/*                                                                     */
/*---------------------------------------------------------------------*/
/*                                                                     */
/*                                                                     */
/***********************************************************************/

#include "board.h"
#include "bspcomm.h"
#include "ecom8xx.h"

IOIPinMapStruct IOIPinMap[MAX_IOI_ENTRIES]=
{    
/* -------------- */ /* av    port   bit par dir odr so inttype */
/* up8986 enable  */  { TRUE, PORTB,  14, 0,  1,  0,  0,  0},
/* dn8986 enable  */  { TRUE, PORTB,  15, 0,  1,  0,  0,  0},
/* BID_0          */  { TRUE, PORTB,  16, 0,  0,  0,  0,  0},
/* MST_2          */  { TRUE, PORTB,  17, 0,  0,  0,  0,  0},
/* MST_1          */  { TRUE, PORTB,  18, 0,  0,  0,  0,  0},

/* -------------- */ /* av    port   bit par dir odr so inttype */
/* RUN LED        */  { TRUE, PORTB,  26, 0,  1,  0,  0,  0,  2},
/* Alarm LED      */  { TRUE, PORTB,  27, 0,  1,  0,  0,  0,  2},
/* Clock Los      */  { TRUE, PORTB,  28, 0,  0,  0,  0,  0},
/* Clear Clk Alm  */  { TRUE, PORTB,  30, 0,  1,  0,  0,  0,  1},
/* 8986 2M OR 8M  */  { TRUE, PORTB,  31, 0,  0,  0,  0,  0},

/* -------------- */ /* av    port   bit par dir odr so inttype */
/* MMI  SMC1 -RXD   { TRUE, PORTB,  24, 1,  0,  0,  0,  0,  0}, */
/* MMI  SMC1 -TXD   { TRUE, PORTB,  25, 1,  0,  0,  0,  0,  0}, */

/* -------------- */ /* av    port   bit par dir odr so inttype */
/* Ethernet/enable    { TRUE, PORTC,  8,  0,  1,  0,  0,  0},  */
/* Ethernet/loop  */  { TRUE, PORTC,  4,  0,  1,  0,  0,  0,  0},
/* Ethernet/tpfldl*/  { TRUE, PORTC,  5,  0,  1,  0,  0,  0,  1},
/* Ethernet/tpsqel*/  { TRUE, PORTC,  6,  0,  1,  0,  0,  0,  1},
/* Ethernet/rena  */  { TRUE, PORTC,  10, 0,  0,  0,  1,  0},
/* Ethernet/clsn  */  { TRUE, PORTC,  11, 0,  0,  0,  1,  0},
/* Ethernet TENA  */  { TRUE, PORTB,  19, 1,  1,  0,  0,  0},
/* Ethernet Rx    */  { TRUE, PORTA,  15, 1,  0,  0,  0,  0},
/* Ethernet TCLK  */  { TRUE, PORTA,  4,  1,  0,  0,  0,  0},
/* Ethernet RCLK  */  { TRUE, PORTA,  6,  1,  0,  0,  0,  0},
/* Ethernet Tx    */  { TRUE, PORTA,  14, 1,  0,  0,  0,  0},

/* SCC2 and SCC4 are used for QMC */
/* TDMB --------- */ /* av    port   bit par dir odr so inttype */
/* QMC_2M_RCLKB   */  { TRUE, PORTA,  2,  1,  0,  0,  0,  0},
/* QMC_RXDB       */  { TRUE, PORTA,  10, 1,  1,  0,  0,  0},
/* QMC_TXDB       */  { TRUE, PORTA,  11, 1,  1,  0,  0,  0},
/* QMC_8K_RSYNCB  */  { TRUE, PORTD,  12, 1,  0,  0,  0,  0},
/* TDMA --------- */ /* av    port   bit par dir odr so inttype */
/* QMC_2M_RCLKA   */  { TRUE, PORTA,  7,  1,  0,  0,  0,  0},
/* QMC_RXDA       */  { TRUE, PORTA,  8,  1,  1,  0,  0,  0},
/* QMC_TXDA       */  { TRUE, PORTA,  9,  1,  1,  0,  0,  0},
/* QMC_8K_RSYNCA  */  { TRUE, PORTD,  14, 1,  0,  0,  0,  0},

};

void BoardSpecInit(void)
{
    unsigned long tmp_long;
    unsigned long *siumcr;
    char * pDpram;

	SetLED(LED_ALL,0);
	SetLED(LED_RUN,1);
    /*---------------------------------------------*/
    /*  set SIUMCR_DPC                             */
    /*      DP[0-3]/IRQ[3-6] function as DP[0-3]   */
    /*---------------------------------------------*/
    siumcr=(unsigned long *)(S_REGISTER_BASE+0x0L);
    SPLX(*siumcr |= 0x0000A000;)
    /*---------------------------------------------*/
    /*  set the Recieve/Transmit clock for scc1    */
    /*      R1CS->CLK2; T1CS->CLK4;                */
    /*---------------------------------------------*/
	SPLX(E_SI_ClockRouteReg=(E_SI_ClockRouteReg&~0xFF)|0x2F);
    /*---------------------------------------------*/
    /*  Reserved dpram for QMC's BD                */
    /*---------------------------------------------*/
    dpram_reserve(0, BD_DPRAM_OFF,(BD_QMC_CHAN_NUM1+BD_QMC_CHAN_NUM2)*64 );
    /*-----------Zero Dpram------------------------*/
    pDpram=(char *)CS4_BASE;
    memset(pDpram,0,0x1000);
    pDpram=(char *)CS5_BASE;
    memset(pDpram,0,0x1000);
    /*---------------------------------------------*/
    /*  Initialize IRQ interrupt                   */
    /*---------------------------------------------*/
    InitInt();
  
}

ULONG GetBoardID(void)
{
    return 0xff;
}

ULONG GetDefaultIP(void)
{
   return 0x8a010a38;
}

void LanEnable(void){}

void SetLED(ULONG led, int status )
{
    if (status == 0)
    {
        if((led&LED_RUN)==LED_RUN)     BD_RUN_DISABLE
        if((led&LED_ALARM)==LED_ALARM) BD_ALM_DISABLE
       
    }
    else if (status == 1)
    {
        if((led&LED_RUN)==LED_RUN)     BD_RUN_ENABLE
        if((led&LED_ALARM)==LED_ALARM) BD_ALM_ENABLE
        
    }
    else if (status == -1)
        ReverseLED(led);
        
}

unsigned short GetBoardType (void)
{
   return (unsigned short)32;   
}

void InitTDM(void)
{
    int i;
    PDA *pda= (PDA *)(GetIMMR() & IO_MAP_MASK);  
    /*fill SRAM */
    for(i=0;i<128;i++)((unsigned long *)pda->si_siram)[i]=0x00010000;
    /* Init SIRAM TDMA and TDMB */ 
    InitTDMA();
    InitTDMB();
}

void InitTDMA(void)
{
    int i;
    PDA *pda= (PDA *)(GetIMMR() & IO_MAP_MASK);
    /* Init SIRAM TDMA */ 
    for(i=0;i<BD_QMC_CHAN_NUM1;i++)
    {   
        ((unsigned long *)pda->si_siram)[i]=0x00820000;   
        ((unsigned long *)pda->si_siram)[64+i]=0x00820000; 
    }
    ((unsigned long *)pda->si_siram)[i-1]=0x00830000;       
    ((unsigned long *)pda->si_siram)[64+i-1]=0x00830000;    

   SPLX(pda->si_simode&=0xfffff000;)
   SPLX(pda->si_simode|=0x00000048;)
   SPLX(pda->si_sigmr |= 0x02;)
   SPLX(pda->si_sigmr &= 0xfb;)
}

void InitTDMB(void)
{
   int i;
   PDA *pda= (PDA *)(GetIMMR() & IO_MAP_MASK);  
   /* Init SIRAM TDMB */ 
   for(i=0;i<BD_QMC_CHAN_NUM2;i++)
   {   
       ((unsigned long *)pda->si_siram)[i+32]=0x01020000;   
       ((unsigned long *)pda->si_siram)[64+32+i]=0x01020000; 
   }
   ((unsigned long *)pda->si_siram)[32+i-1]=0x01030000;       
   ((unsigned long *)pda->si_siram)[64+32+i-1]=0x01030000;    
   SPLX(pda->si_simode&=0xf000ffff; )
   SPLX(pda->si_simode|=0x00480000; )
   SPLX(pda->si_sigmr |= 0x02;)
   SPLX(pda->si_sigmr &= 0xf7;)
}

⌨️ 快捷键说明

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