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

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

?? trmpc860.c

?? ppc860平臺上移植uc OS的實例
?? C
?? 第 1 頁 / 共 3 頁
字號:
/* 
 * SOURCE FILE FOR Motorola MPC860 QUICC Sample Driver
 *
 * This device driver is derived from the Ethernet Bridge example from
 * Motorola.
 * It has been modified to interface to the Treck TCP/IP stack and to
 * provide readability.
 *
 * Since it is a derived work, it remains the property of Motorola Corp.
 *
 * We have left the definintions of the mpc860 registers as they
 * are in the QUICC user manual
 *
 * This is why they do not match TRECK coding standards.
 */


#include <trsocket.h>
#include <trmpc860.h>


/* 
 * IMPORTANT
 * If the mpc860 device only receives a few frames and stops forever,
 * make sure that you are calling the tfMpc860RefillScc1RecvPool()
 * function from a low priority task
 */


/*    
 * Since we do not accept SHORT frames, we use the SHORT bit to 
 * mean that this frame has been notified
 * IF THIS DRIVER IS CHANGED TO ALLOW SHORT FRAMES, ANOTHER BIT
 * WILL NEED TO BE USED
 */
#define TM_MPC860_NOTIFIED TM_MPC860_RECV_E_SHORT
#define TM_MPC860_ERROR_RECV (TM_MPC860_RECV_ERROR & (~TM_MPC860_NOTIFIED))

/*
 * Local Function Prototypes
 */
void tfMpc860CreateXmitPool(int channel, int maxBd);
void tfMpc860CreateRecvPool(int channel, int maxBd);
void tfMpc860IssueCommand(unsigned short command);
void tfMpc860Busy(ttUserInterface interfaceHandle, int channel);
void tfMpc860RecvFrame(ttUserInterface interfaceHandle,
                      int             channel);
void tfMpc860XmitError(ttUserInterface interfaceHandle,int channel);
void tfMpc860Scc1SendComplete(ttUserInterface interfaceHandle);
void tfMpc860EtherUp(int channel);
void tfMpc860EtherScc1BoardInit(void);
void tfMpc860EtherScc1Init(void);
void tfMpc860RefillScc1RecvPool(void);
void tfMpc860Down(int channel);

int tfMpc860SerialClose(ttUserInterface interfaceHandle);
void tfMpc860SerialUp(int channel);
int tfMpc860SerialOpen(ttUserInterface interfaceHandle);
void tfMpc860SerialScc4BoardInit(void);
void tfMpc860SerialScc4Init(void);


static ttMpc860Ptr tlMpc860Ptr;

static ttMpc860BufDescPtr tlMpc860XmitBufDescPtr;
static ttMpc860BufDescPtr tlMpc860XmitIsrBufDescPtr;
static ttMpc860BufDescPtr tlMpc860XmitBufDescStartPtr;

static ttMpc860BufDescPtr tlMpc860RecvBufDescPtr;
static ttMpc860BufDescPtr tlMpc860RecvIsrBufDescPtr;
static ttMpc860BufDescPtr tlMpc860RecvBufDescStartPtr; 
static ttMpc860BufDescPtr tlScatterBufferStart;

static ttMpc860BufDescPtr tlMpc860RecvRefillBufDescPtr; 
unsigned long     tvMpc860RecvErrorCount;
unsigned long     tvMpc860RecvPacketCount;
unsigned long     tvMpc860SendPacketCount;
unsigned long     tvMpc860BusyPacketCount;
unsigned long     tvMpc860XmitWait;
unsigned long     tvMpc860IsrRecvErrorCount;

/*
 * Four Interface handles for four SCC's 
 */
static ttUserInterface tlInterfaceArray[4];

/*
 * Table of ttUserBuffer Handles
 */
static ttUserBuffer    tlUserBufferList[TM_MPC860_ETHER_MAX_RECV_BUFD];

/*
 * Our index to the ttUserBuffer's
 */
static ttUserBufferPtr tlUserBufferPtr; 
static ttUserBufferPtr tlUserRefillBufferPtr; 



/*
 * Return the Physical Address for the device
 * For the MPC860, it should be read from EEPROM
 * because every ethernet address is Unique
 *
 * THIS ROUTINE MUST BE MODIFIED!
 *
 * To get an ethernet address address block for 
 * your company, you need to contact IEEE Standards
 * or visit http://standards.ieee.org/faqs/OUI.html
 * for information on getting an Company ID/OUI
 */
int tfMpc860GetPhyAddr(ttUserInterface userInterface,
        char *address)
{
/* 
 * We don't use the interface handle here, but we keep the compiler
 * from complaining about unused formal parameters
 */
    userInterface=userInterface;
    address[0]=0x00;
    address[1]=0xea;
    address[2]=0xc0;
    address[3]=0xf0;
    address[4]=0x08;
    address[5]=0x60;
    return 0;
}


/* 
 * Initialize SCC1 to be an ethernet channel
 */
void tfMpc860EtherScc1Init()
{
    char                  etherAddr[6];
    struct ethernet_pram *enet_pram;
    struct scc_regs *regs;

/* Retrieve the Ethernet Address */
    tfMpc860GetPhyAddr((ttUserInterface)0,
            etherAddr);

    enet_pram = &tlMpc860Ptr->pram[0].enet_scc;          
    regs = &tlMpc860Ptr->scc_regs[0];

/* Disable transmit/receive */
    regs->scc_gsmrl = 0;

/* 
 * Initialize paramater ram 
 */

/* points to start of receiving ring */
    enet_pram->rbase =   TM_MPC860_SCC1_RECV_BASE;
/* points to start of transmiting ring */
    enet_pram->tbase =   TM_MPC860_SCC1_XMIT_BASE;   
/* Function Codes for Transmit and Receive */
    enet_pram->rfcr =    TM_MPC860_SCC1_RECV_FUNC_CODE;
    enet_pram->tfcr =    TM_MPC860_SCC1_XMIT_FUNC_CODE;
/* We always receive a full ethernet frame so we set it to 1518 */
    enet_pram->mrblr =   TM_MPC860_SCC1_MAX_RECV_BUF_LEN;
/* A good ethernet CRC */
    enet_pram->c_mask =  TM_MPC860_ETHER_CRC_MASK;
/* The CRC we start with */
    enet_pram->c_pres =  TM_MPC860_ETHER_CRC_PRES;
/* These three registers are cleared for clarity sake */
    enet_pram->crcec =   TM_MPC860_ETHER_CRCEC;
    enet_pram->alec =    TM_MPC860_ETHER_ALEC;
    enet_pram->disfc =   TM_MPC860_ETHER_DISFC;
/* Pad Character */
    enet_pram->pads =    TM_MPC860_ETHER_PADS;
/* Max Retries when we have a collision */
    enet_pram->ret_lim = TM_MPC860_ETHER_RETRY_LIMIT;
/* Maximum Ethernet Frame Length (Always 1518) */
    enet_pram->mflr =    TM_MPC860_ETHER_MAX_FRAME_LEN;
/* Minimum Ethernet Frame Length (Always 64) */
    enet_pram->minflr =  TM_MPC860_ETHER_MIN_FRAME_LEN;
/* Maximum DMA Counts */
    enet_pram->maxd1 =   TM_MPC860_ETHER_MAX_DMA1_COUNT;
    enet_pram->maxd2 =   TM_MPC860_ETHER_MAX_DMA2_COUNT; 
/* Group Addresses */
    enet_pram->gaddr1 =  TM_MPC860_ETHER_GROUP_ADDR1;    
    enet_pram->gaddr2 =  TM_MPC860_ETHER_GROUP_ADDR2;    
    enet_pram->gaddr3 =  TM_MPC860_ETHER_GROUP_ADDR3;    
    enet_pram->gaddr4 =  TM_MPC860_ETHER_GROUP_ADDR4;    
/* 
 * Our physical (Ethernet) address (IN LITTLE ENDIAN)
 * If the physical address is:
 * 0x112233445566
 *
 * It is stored like this:
 * paddr_l=0x2211
 * paddr_m=0x4433
 * paddr_h=0x6655
 * 
 * If not done correctly, the MPC860 will NOT receive any packets
 * with its destination address 
 */
    enet_pram->paddr_l = ((unsigned short)etherAddr[0]        &0x00ff)|
                         ((((unsigned short)etherAddr[1])<<8) &0xff00);
    enet_pram->paddr_m = ((unsigned short)etherAddr[2]        &0x00ff)|
                         ((((unsigned short)etherAddr[3])<<8) &0xff00);
    enet_pram->paddr_h = ((unsigned short)etherAddr[4]        &0x00ff)|
                         ((((unsigned short)etherAddr[5])<<8) &0xff00);

    enet_pram->p_per =   TM_MPC860_ETHER_P_PER;
/* Individual Hash Addresses */
    enet_pram->iaddr1 =  TM_MPC860_ETHER_INDV_ADDR1; 
    enet_pram->iaddr2 =  TM_MPC860_ETHER_INDV_ADDR2; 
    enet_pram->iaddr3 =  TM_MPC860_ETHER_INDV_ADDR3; 
    enet_pram->iaddr4 =  TM_MPC860_ETHER_INDV_ADDR4; 
/* Temp Registers */
    enet_pram->taddr_h = TM_MPC860_ETHER_T_ADDR_H;   
    enet_pram->taddr_m = TM_MPC860_ETHER_T_ADDR_M;
    enet_pram->taddr_l = TM_MPC860_ETHER_T_ADDR_L;
    tvMpc860RecvPacketCount=0L;
    tvMpc860SendPacketCount=0L;
    tvMpc860XmitWait=0L;
    tvMpc860RecvErrorCount=0L;
    tvMpc860IsrRecvErrorCount=0L;
    tlScatterBufferStart=(ttMpc860BufDescPtr)0;

/* Tell the CP to initialize our Recv/Xmit parameters */
    tfMpc860IssueCommand(TM_MPC860_INIT_RXTX_SCC1);
}


/* 
 * Initialize SCC1 to be an ethernet channel    
 */
void tfMpc860EtherScc1BoardInit()
{
    unsigned char  scc1Vector;
    unsigned long  scc1Location;

/*  tlMpc860Ptr->sim_mcr =   0x608f; */

/*
 * IMPLEMENTATION NOTE:
 *
 * This routine is very board specific
 * In this example we use the Atlas Communications Engines
 * DARWIN devlopment board for an example
 * We assume the the ethernet is in SLOT 0 and at SCC1
 * on the DARWIN
 *
 * Please refer to your boards design to modify this routine
 */

/* clear previous scc1 settings */
        tlMpc860Ptr->si_sicr &= ~(0x3f);  
/* Atlas DARWIN Setup */
    tlMpc860Ptr->si_sicr |=  TM_MPC860_SI_SCC1_RCS_CLK1 |
                             TM_MPC860_SI_SCC1_TCS_CLK2;
                             
/* Disconnect the clock routing source */
    tlMpc860Ptr->si_sicr &=  ~TM_MPC860_SI_SCC1_CONNECT;
                            
/* Make PortA Pins 6,7,14,15 for onchip use */
    tlMpc860Ptr->pio_padir &= ~(TM_MPC860_PORTA_PA6 |
                                TM_MPC860_PORTA_PA7 |
                                TM_MPC860_PORTA_PA14 |
                                TM_MPC860_PORTA_PA15);
    
/* 
 * Use PortA pins 15,14 for SCC1 Ethernet RX/TX and 
 * pins 6,7 for Ethernet TCLK and RCLK 
 */
    tlMpc860Ptr->pio_papar |= TM_MPC860_PORTA_PA6 |
                              TM_MPC860_PORTA_PA7 |
                              TM_MPC860_PORTA_PA14 |
                              TM_MPC860_PORTA_PA15;
/* Turn off the Open Drain */
    tlMpc860Ptr->pio_paodr &= ~TM_MPC860_PORTA_PA14;
                            
/* Clear the pending and in-service registers */
    tlMpc860Ptr->intr_cipr = TM_MPC860_SCC1_INT_MASK;
    tlMpc860Ptr->intr_cisr = TM_MPC860_SCC1_INT_MASK;
/* Set the CP mask register to accept interrupts from SCC1 */
    tlMpc860Ptr->intr_cimr |= TM_MPC860_SCC1_INT_MASK;

    tlMpc860Ptr->sdma_sdcr=TM_MPC860_SDMA_ARB_ID; 

    
 /* PortC Pins 10 & 11 are onchip */
    tlMpc860Ptr->pio_pcdir &=   ~(TM_MPC860_PORTC_PC10 |
                                  TM_MPC860_PORTC_PC11);
 /* PortC Pins 10 & 11 are onchip */
    tlMpc860Ptr->pio_pcpar &=   ~(TM_MPC860_PORTC_PC10 |
                                  TM_MPC860_PORTC_PC11);
                                 
/*
 * Use Pins 10 and 11 (SCC1 CD and CTS) for Ethernet RENA and CLSN  
 */
    tlMpc860Ptr->pio_pcso|=    TM_MPC860_PORTC_PC10 |
                               TM_MPC860_PORTC_PC11;
                              
/* Clear the data register for pins 10 and 11 */
    tlMpc860Ptr->pio_pcdat&=   ~(TM_MPC860_PORTC_PC10 |
                                 TM_MPC860_PORTC_PC11);

/*
 * Port B External Signals 
 * PB14,PB15 are clock select
 * PB26 is Link Enable
 * PB27 Is Full Duplex Select
 */
    tlMpc860Ptr->pip_pbdir |= TM_MPC860_PORTB_PB14 |
                              TM_MPC860_PORTB_PB15 |
                              TM_MPC860_PORTB_PB27 |
                              TM_MPC860_PORTB_PB26;
                                
    tlMpc860Ptr->pip_pbpar &= ~(TM_MPC860_PORTB_PB14 |
                                TM_MPC860_PORTB_PB15 |
                                TM_MPC860_PORTB_PB27 |
                                TM_MPC860_PORTB_PB26);
/* Set clock select to 00 */
    tlMpc860Ptr->pip_pbdat &= ~(TM_MPC860_PORTB_PB14 |
                                TM_MPC860_PORTB_PB15);
/* Set Link Enable */
    tlMpc860Ptr->pip_pbdat |=  TM_MPC860_PORTB_PB26;                                

/* Turn OFF Full Duplex Mode */
    tlMpc860Ptr->pip_pbdat &=  ~TM_MPC860_PORTB_PB27;                                
    


/*
 * IMPLEMENTATION NOTE:
 *
 * The Actual SCC1 ISR Wrapper Function in installed here
 * It must call the tfMpc860Scc1HandlerIsr function
 * This routine may be in "C" if it is supported
 * or assembly if not.  It is VERY RTOS dependent
 * so it cannot be provided with the driver
 *
 * With some RTOS's a wrapper function may not be
 * needed.  All the driver cares about is that the
 * function tfMpc860Scc1HandlerIsr function is called
 * when the interrupt occurs.
 *
 */

/* Port B pin 19 is Ethernet TENA for DARWIN */
    tlMpc860Ptr->pip_pbpar |= TM_MPC860_PORTB_PB19;
    tlMpc860Ptr->pip_pbdir |= TM_MPC860_PORTB_PB19;

/* Install the wrapper function */
    tfKernelInstallIsrHandler(tfMpc860Scc1Isr,TM_MPC860_SCCA_INT);
}



/* 
 * Enable the SCC's  to recieve and transmit 
 */
void tfMpc860EtherUp(int channel)
{
    struct scc_regs *regs;


    regs = &tlMpc860Ptr->scc_regs[channel];

/* clear all events on the SCC event register and CP event reg*/
    regs->scc_scce=0xffff;

/* Clear the appropriate bit in the CISR */
    switch (channel)
    {
        case TM_MPC860_SCC1_CHANNEL:
            tlMpc860Ptr->intr_cisr = TM_MPC860_SCC1_INT_MASK;
            break;
        case TM_MPC860_SCC2_CHANNEL:
            tlMpc860Ptr->intr_cisr = TM_MPC860_SCC2_INT_MASK;
            break;
        case TM_MPC860_SCC3_CHANNEL:
            tlMpc860Ptr->intr_cisr = TM_MPC860_SCC3_INT_MASK;
            break;
        case TM_MPC860_SCC4_CHANNEL:
            tlMpc860Ptr->intr_cisr = TM_MPC860_SCC4_INT_MASK;
            break;
        default:
            break;
    }


/* 
 * mask the events we sich to interrupt on
 */
    regs->scc_sccm = 
/* An error in transmitting has occured */
                     TM_MPC860_INTR_ETHER_E_XMIT |
/* A buffer has completed transmitting */
                     TM_MPC860_INTR_ETHER_XMIT_B |
/* A ethernet frame has been received */
                     TM_MPC860_INTR_ETHER_RECV_F |
/* The busy condition has occured */
                     TM_MPC860_INTR_ETHER_BUSY;
    
/* SCC1 data sync reg  (The pattern for Ethernet)*/
    regs->scc_dsr=   TM_MPC860_SCC_FRAME_SYNC_ETHER;         

/* protocol specific mode register */
    regs->scc_psmr = 
/* To disable the reception of Broadcast packets uncomment this line */
/*                     TM_MPC860_ETHER_BROADCAST | */
/* Turn on the CRC for ethernet */
                     TM_MPC860_ETHER_ENABLE_CRC | 
/* Ignore 22 bits for ethernet */
                     TM_MPC860_ETHER_NBITS_IGNORED;


/* SCC general mode reg */
    regs->scc_gsmrh = 0;

/* SCC general mode reg */
    regs->scc_gsmrl = 
/* Transmit Clock Inversion */
                      TM_MPC860_XMIT_CLOCK_INV | 
/* Preamble Bit Length (48 always for ethernet) */
                      TM_MPC860_PREAMBLE_48 | 
/* Preamble Bit Pattern (Alternating '1' and '0' for ethernet */
                      TM_MPC860_PREAMBLE_PAT_10 | 
/* Ethernet Mode */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美一区二区三区色| 久久久午夜精品理论片中文字幕| 国产精品一线二线三线| 日日欢夜夜爽一区| 欧美亚洲免费在线一区| 亚洲国产综合91精品麻豆| 国产无一区二区| 日韩欧美国产综合| 久久综合给合久久狠狠狠97色69| 国产欧美一区二区精品仙草咪 | 91麻豆精品国产自产在线观看一区 | 欧美性色黄大片手机版| 日韩一级免费观看| 国产女人aaa级久久久级 | 国产伦精品一区二区三区免费迷| 国产精品一区二区无线| 色综合久久66| 久久只精品国产| 亚洲一区二区视频| 激情深爱一区二区| 91成人免费电影| 久久中文字幕电影| 日韩精品一卡二卡三卡四卡无卡| 国产尤物一区二区| 精品婷婷伊人一区三区三| 久久精品欧美日韩精品| 日本午夜一区二区| 色偷偷一区二区三区| 久久综合中文字幕| 视频一区欧美日韩| 色一区在线观看| 国产色产综合产在线视频| 免费在线看成人av| 精品视频一区三区九区| 17c精品麻豆一区二区免费| 亚洲成人动漫av| 欧美不卡在线视频| 成人国产精品免费网站| 亚洲手机成人高清视频| 色综合久久综合网| 天堂va蜜桃一区二区三区| 日韩欧美亚洲国产精品字幕久久久| 天天综合网天天综合色| 久久亚洲影视婷婷| 欧美视频一二三区| 国内精品国产成人国产三级粉色| 亚洲特黄一级片| 欧美成人一区二区三区片免费| av影院午夜一区| 日韩电影在线一区| 亚洲欧美乱综合| www成人在线观看| 欧美视频一区在线| 国产成人综合自拍| 日韩精品一二三四| 亚洲特级片在线| 国产日韩精品一区二区三区| 欧美美女一区二区| 色狠狠综合天天综合综合| 丁香六月久久综合狠狠色| 狠狠色丁香婷婷综合| 日韩亚洲欧美综合| 国产精品中文有码| 一区二区三区久久久| 日韩午夜小视频| 色综合久久综合网| 理论片日本一区| 亚洲天堂免费在线观看视频| 欧美日韩国产小视频| 免费的成人av| 亚洲精品久久久蜜桃| 精品捆绑美女sm三区| 在线亚洲免费视频| 狠狠色综合播放一区二区| 国产精品久久久久久久久免费樱桃| 欧美午夜片在线看| 国产 日韩 欧美大片| 亚洲成人自拍一区| 中文字幕中文在线不卡住| 日韩写真欧美这视频| 91福利视频久久久久| 国产91精品精华液一区二区三区| 亚洲在线视频一区| 一区二区三区蜜桃网| 日本一区二区成人在线| 日韩精品一区二区三区视频播放 | 欧美一区二区在线观看| 91久久久免费一区二区| 国产麻豆视频一区二区| 精品国产91洋老外米糕| 久久精品国产澳门| 欧美—级在线免费片| 福利一区在线观看| 国产精品护士白丝一区av| 91麻豆精品国产自产在线观看一区 | 精品免费一区二区三区| 欧美视频一区在线观看| 91国产视频在线观看| 白白色 亚洲乱淫| 风流少妇一区二区| 国产91露脸合集magnet| 国产一区二区三区四| 国产在线视视频有精品| 久久国产尿小便嘘嘘| 日本中文字幕不卡| 裸体一区二区三区| 美国三级日本三级久久99| 免费成人美女在线观看.| 麻豆国产一区二区| 另类人妖一区二区av| 日本亚洲电影天堂| 亚洲国产一区二区视频| 亚洲综合在线视频| 亚洲一区二区四区蜜桃| 日韩国产精品大片| 日日摸夜夜添夜夜添国产精品| 免费在线看成人av| 国产高清精品在线| 99精品一区二区三区| 91福利在线播放| 久久先锋影音av| 亚洲视频一区二区免费在线观看| 夜夜嗨av一区二区三区| 青青草91视频| 91美女在线视频| 日韩午夜电影av| 亚洲日本青草视频在线怡红院| 午夜欧美电影在线观看| 国产一区日韩二区欧美三区| 一本色道亚洲精品aⅴ| 日韩精品最新网址| 国产精品久久久久久久午夜片 | 91成人国产精品| 久久久国产精华| 奇米色777欧美一区二区| www.亚洲精品| 日韩一级视频免费观看在线| 亚洲一区二区四区蜜桃| 大胆欧美人体老妇| 日韩精品中文字幕在线不卡尤物 | 免费成人av在线播放| 色综合久久久久网| 久久久噜噜噜久久人人看| 日本不卡中文字幕| 欧美日韩视频在线第一区| 最新不卡av在线| 不卡电影免费在线播放一区| 日韩一区二区三区高清免费看看| 亚洲精品第1页| 91小视频在线免费看| 国产精品国产自产拍高清av| 国产剧情一区二区三区| 精品国产一区二区三区忘忧草| 午夜在线成人av| 欧美日韩二区三区| 亚洲国产欧美日韩另类综合 | 色婷婷久久久久swag精品| 亚洲欧洲精品成人久久奇米网| 国产成人无遮挡在线视频| 久久影院电视剧免费观看| 国产激情精品久久久第一区二区 | 欧美精品v日韩精品v韩国精品v| 亚洲国产精品一区二区久久| 欧美性感一区二区三区| 亚洲国产乱码最新视频| 91超碰这里只有精品国产| 麻豆91免费看| 久久美女艺术照精彩视频福利播放| 国产一本一道久久香蕉| 国产目拍亚洲精品99久久精品| 91美女蜜桃在线| 日韩成人一区二区三区在线观看| 精品电影一区二区三区| 成人av电影在线网| 婷婷久久综合九色国产成人| 久久精品视频网| 在线观看亚洲a| 韩国三级在线一区| 一区二区视频在线| 欧美v日韩v国产v| 波多野结衣中文字幕一区| 天天综合色天天综合| 国产欧美日韩卡一| 91精品国产乱| 成人av中文字幕| 国产一区二区影院| 国产精品一二二区| 亚洲蜜桃精久久久久久久| 欧美tickle裸体挠脚心vk| 99精品一区二区| 日韩电影在线观看网站| 国产精品三级av| 91精品国产综合久久久久久漫画 | 色嗨嗨av一区二区三区| 美女在线一区二区| 中文字幕一区二区三区精华液| 91精品欧美综合在线观看最新| 国产传媒欧美日韩成人| 亚洲综合在线第一页| 日韩欧美综合一区|