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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? trmpc860.c

?? ppc860平臺上移植uc OS的實例
?? C
?? 第 1 頁 / 共 3 頁
字號:
/* Save it off for our use in the recv routine */    
    tlMpc860RecvRefillBufDescPtr=tlMpc860RecvBufDescStartPtr=
            tlMpc860RecvIsrBufDescPtr=tlMpc860RecvBufDescPtr=
            tempBufDescPtr;
    tlUserRefillBufferPtr=tlUserBufferPtr=tlUserBufferList;

    for(i=0;i< maxBd;i++,tempBufDescPtr++ ) 
    {
/* bdDataPtr need to be aligned on a 4-byte boundary */
        tempBufDescPtr->bdDataPtr=
                    (tfGetEthernetBuffer(&userBuffer) - TM_ETHER_IP_ALIGN);
        if (tempBufDescPtr->bdDataPtr==(char TM_FAR *)0)
        {
/* No memory so stop the create here */
            break;
        }
        tlUserBufferList[i]=userBuffer;
        tempBufDescPtr->bdLength = 0;
        tempBufDescPtr->bdStatus = (TM_MPC860_RECV_EMPTY|TM_MPC860_RECV_INTR);
    }
    --tempBufDescPtr;
 /* signify last bit on */
    tempBufDescPtr->bdStatus |= TM_MPC860_RECV_WRAP;

}

/*
 * General function
 * Can be used to configure the device
 * or refill the receive pool
 */
int tfMpc860Ioctl (ttUserInterface interfaceHandle, int flag,
                  void TM_FAR * optionPtr, int optionLen)
{
    if (flag&TM_MPC860_REFILL_SCC1)
    {
        tfMpc860RefillScc1RecvPool();
    }
#ifndef TM_TASK_SEND
    if (flag&TM_MPC860_SEND_COMPLETE)
    {
        tfMpc860Scc1SendComplete(interfaceHandle);
    }
#endif /* NOT TM_TASK_SEND */
#ifdef TM_IGMP
    if (flag&TM_DEVICE_ADD_MCAST)
    {
/* Add multicast address */
    }
    if (flag&TM_DEVICE_DELETE_MCAST)
    {
/* Delete multicast addresss */
    }
#endif /* TM_IGMP */
    return TM_ENOERROR;
}
 

/*
 * Walk through receive list and allocate new buffers
 * after they have been processed
 */
void tfMpc860RefillScc1RecvPool()
{
    ttUserBuffer userBuffer;
    unsigned short *bdStatusPtr;
    void          **bdDataPtrPtr;

    bdDataPtrPtr = &tlMpc860RecvRefillBufDescPtr->bdDataPtr;
    bdStatusPtr  = &tlMpc860RecvRefillBufDescPtr->bdStatus;
/* Loop while it is empty or an error */
    while (*bdDataPtrPtr==(void TM_FAR *)0 ||
           (*bdStatusPtr & TM_MPC860_ERROR_RECV))
    {
/* Check to see if it is an error */
        if (!(*bdStatusPtr & TM_MPC860_ERROR_RECV))
        {
/* If it is not get a new buffer, otherwise just reuse it */
/* bdDataPtr need to be aligned on a 4-byte boundary */
            tlMpc860RecvRefillBufDescPtr->bdDataPtr=
                    (tfGetEthernetBuffer(&userBuffer) - TM_ETHER_IP_ALIGN);
            if (*bdDataPtrPtr == (char TM_FAR *)0)
            {
/* No memory so stop the refill */
                break;
            }
            *tlUserRefillBufferPtr=userBuffer;
        }
        tlMpc860RecvRefillBufDescPtr->bdLength = 0;
/* Clear the status Except for the wrap bit */
        *bdStatusPtr &= TM_MPC860_RECV_WRAP;
/* Mark this BD as ready to use */
        *bdStatusPtr |= (TM_MPC860_RECV_EMPTY|TM_MPC860_RECV_INTR);
        if (*bdStatusPtr & TM_MPC860_RECV_WRAP)
        {
            tlMpc860RecvRefillBufDescPtr = tlMpc860RecvBufDescStartPtr;
            tlUserRefillBufferPtr=tlUserBufferList;
        }
        else
        {
            tlMpc860RecvRefillBufDescPtr++;
            tlUserRefillBufferPtr++;
        }
        bdDataPtrPtr = &tlMpc860RecvRefillBufDescPtr->bdDataPtr;
        bdStatusPtr  = &tlMpc860RecvRefillBufDescPtr->bdStatus;
    }
}

#ifndef TM_TASK_SEND
/*
 * Walk through send list and post send completes
 */
void tfMpc860Scc1SendComplete(ttUserInterface interfaceHandle)
{
    unsigned short *bdStatusPtr;
    void          **bdDataPtrPtr;

    bdStatusPtr = &tlMpc860XmitIsrBufDescPtr->bdStatus;
    bdDataPtrPtr = &tlMpc860XmitIsrBufDescPtr->bdDataPtr;
/* An ethernet frame has completed transmitting so notify the user*/
    while ((*bdStatusPtr & TM_MPC860_XMIT_READY)==0 &&
            tlMpc860XmitIsrBufDescPtr != tlScatterBufferStart && 
            *bdDataPtrPtr != (void TM_FAR *)0)
    {
/* Zero it out so we know that we have freed this one before */
        *bdDataPtrPtr=(void TM_FAR *)0;
        if (*bdStatusPtr & TM_MPC860_XMIT_WRAP)
        {
            tlMpc860XmitIsrBufDescPtr = tlMpc860XmitBufDescStartPtr;
        }
        else
        {
            tlMpc860XmitIsrBufDescPtr++;
        }
/* Only call send complete when the last piece has been transmitted */
        if (*bdStatusPtr & TM_MPC860_XMIT_LAST)
        {
            tfSendCompleteInterface(interfaceHandle,TM_DEV_SEND_COMPLETE_DRIVER);
        }
        bdStatusPtr = &tlMpc860XmitIsrBufDescPtr->bdStatus;
        bdDataPtrPtr = &tlMpc860XmitIsrBufDescPtr->bdDataPtr;
    }
}
#endif /* NOT TM_TASK_SEND */


/* 
 * Prepare a transmit pool, set the status bits in the buffer descriptors
 * to be not READY to transmit and set the last buffer descriptor to
 * be wrapped
 */
void tfMpc860CreateXmitPool(int channel, int maxBd)
{
    int i;
    ttMpc860BufDescPtr tempBufDescPtr;
    struct ethernet_pram *enetPramAddr;
    struct scc_regs *regs;

/* Save the ethernet parameter address */
    enetPramAddr = &tlMpc860Ptr->pram[channel].enet_scc;
    regs = &tlMpc860Ptr->scc_regs[channel];

    tempBufDescPtr = TM_MPC860_XMIT_BD_ADDR(tlMpc860Ptr,enetPramAddr);

/* Save it off for our use in the xmit routine */    
    tlMpc860XmitIsrBufDescPtr=tlMpc860XmitBufDescStartPtr=
            tlMpc860XmitBufDescPtr=tempBufDescPtr;
    for(i=0;i< maxBd;i++,tempBufDescPtr++ ) {
        tempBufDescPtr-> bdStatus = 0;
        tempBufDescPtr-> bdLength = 0;
        tempBufDescPtr-> bdDataPtr = (void TM_FAR *)0;
    }
    --tempBufDescPtr;
/* signify last bit on */
    tempBufDescPtr->bdStatus |= TM_MPC860_XMIT_WRAP; 
}

/*
 *
 *
 * SERIAL INTERFACE
 *
 *
 */



/* 
 * Initialize SCC4 to be an UART channel
 */
void tfMpc860SerialScc4Init()
{
    struct uart_pram *rs232_pram;
    struct scc_regs  *regs;


    rs232_pram = &tlMpc860Ptr->pram[3].scc.pscc.u;
    regs = &tlMpc860Ptr->scc_regs[3];

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



/* points to start of receiving ring */
    rs232_pram->rbase =   TM_MPC860_SCC4_RECV_BASE;
/* points to start of transmiting ring */
    rs232_pram->tbase =   TM_MPC860_SCC4_XMIT_BASE;   

/* Function Codes for Transmit and Receive */
    rs232_pram->rfcr =    TM_MPC860_SCC4_RECV_FUNC_CODE;
    rs232_pram->tfcr =    TM_MPC860_SCC4_XMIT_FUNC_CODE;

/* We always receive a full ethernet frame so we set it to 1518 */
    rs232_pram->mrblr =   TM_MPC860_SCC4_MAX_RECV_BUF_LEN;
/* maximum idle characters */
    rs232_pram->max_idl = TM_MPC860_SCC4_MAX_IDL16;        

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




/* 
 * Initialize SCC1 to be an ethernet channel    
 */
void tfMpc860SerialScc4BoardInit()
{
    unsigned char  scc4Vector;
    unsigned long  scc4Location;

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

/*
 * IMPLEMENTATION NOTE:
 *
 * This routine is very board specific
 * In this example we use the Atlas Communications Engines
 * HSB devlopment board for an example
 * Please refer to your boards design to modify this routine
 */

/* Atlas HSB Setup */
    tlMpc860Ptr->si_sicr |=   TM_MPC860_SI_SCC4_RCS_BRG1 |
                             TM_MPC860_SI_SCC4_TCS_BRG1;

/* Set the divider to 0x130 and RESET and no DIV16 
 * NOTE: The divider starts in bit location 1 not 0
 * The formula is
 * Divider=ClockRate/DesiredBaudRate/16-1*2
 * Example for 24.576 clock
 * 318=((24576000/9600)/16)-1*2
 * 0x130=318
 */
    tlMpc860Ptr->brgc1 = 0x130|TM_MPC860_BRGC_RST;                            

/* Make PortA Pins 6,7 for onchip use */
    tlMpc860Ptr->pio_padir &= ~(TM_MPC860_PORTA_PA6 |
                               TM_MPC860_PORTA_PA7);
    
/* 
 * pins 6,7 for SCC4 Xmit and Recv
 */
    tlMpc860Ptr->pio_papar |= TM_MPC860_PORTA_PA6 |
                             TM_MPC860_PORTA_PA7;
                            
/* Clear the pending and in-service registers */
    tlMpc860Ptr->intr_cipr = TM_MPC860_SCC4_INT_MASK;
    tlMpc860Ptr->intr_cisr = TM_MPC860_SCC4_INT_MASK;
/* Set the CP mask register to accept interrupts from SCC4 */
    tlMpc860Ptr->intr_cimr |= TM_MPC860_SCC4_INT_MASK;

    tlMpc860Ptr->sdma_sdcr=TM_MPC860_SDMA_ARB_ID; 

    
/* PortC Pins 10 & 11 ar CD and CTS */
    tlMpc860Ptr->pio_pcpar &=   ~(TM_MPC860_PORTC_PC10 |
                                 TM_MPC860_PORTC_PC11);

    tlMpc860Ptr->pio_pcdir &=   ~(TM_MPC860_PORTC_PC10 |
                                 TM_MPC860_PORTC_PC11);
                                 
/*
 * Use Pins 10 and 11 (SCC4 CTS and CD)
 */
    tlMpc860Ptr->pio_pcso|=    TM_MPC860_PORTC_PC10|
                              TM_MPC860_PORTC_PC11;


/* Port B pin 12 is Ethernet TENA for HSB */
    tlMpc860Ptr->pip_pbpar |= TM_MPC860_PORTB_PB15;
    tlMpc860Ptr->pip_pbdir |= TM_MPC860_PORTB_PB15;
    

/*
 * IMPLEMENTATION NOTE:
 *
 * The Actual SCC4 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.
 *
 */

/* Install the wrapper function */
/* NOTE: TO ADD ISR HANDLER */
/*    tfKernelInstallIsrHandler(tfMpc860Scc4Isr,TM_MPC860_SCCD_INT); */
}

/* 
 * The main initialization routine for the mpc860 and the scc's 
 */
int tfMpc860SerialOpen(ttUserInterface interfaceHandle)
{

    unsigned long  mpc860Registers;

    mpc860Registers=TM_MPC860_IMMR_LOC;
    tlMpc860Ptr = (ttMpc860 *)(mpc860Registers&0xfffffffc);

/* Interface handle is not used, but could be for multiple ethernets */
    interfaceHandle=interfaceHandle;
/* Initialize default Ethernet parameters */
    tfMpc860SerialScc4Init();
/* Initial board specific parameters */
    tfMpc860SerialScc4BoardInit();
/* Bring the ethernet scc port online */
    tfMpc860SerialUp(TM_MPC860_SCC4_CHANNEL);

/* Save our interfaceHandle for ISR use */
    tlInterfaceArray[TM_MPC860_SCC4_CHANNEL]=interfaceHandle;
    return TM_ENOERROR;
}


/*
 * Disable the Serial (RS-232) on SCC4
 */
int tfMpc860SerialClose(ttUserInterface interfaceHandle)
{
    tfMpc860Down(TM_MPC860_SCC4_CHANNEL);
    return 0;
}

/* 
 * Enable the SCC's  to recieve and transmit 
 */
void tfMpc860SerialUp(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 = 
/* A buffer has completed transmitting */
                     TM_MPC860_INTR_SERIAL_XMIT_B |
/* A ethernet frame has been received */
                     TM_MPC860_INTR_SERIAL_RECV_B |
/* The busy condition has occured */
                     TM_MPC860_INTR_SERIAL_BUSY;
    
/* protocol specific mode register */
    regs->scc_psmr = 
/* CTS Flow Control On */
                     TM_MPC860_UART_FLOW |
/* CHaracters are 8 Bits */
                     TM_MPC860_CHAR_8;
                     


/* SCC general mode reg */
/* Set receive FIFO to 1 byte for UART mode */
    regs->scc_gsmrh = TM_MPC860_UART_RECV_FIFO_1;

/* SCC general mode reg */
    regs->scc_gsmrl = 
/* 16x Sample Rate */
                      TM_MPC860_UART_RECV_SAMPLE | 
                      TM_MPC860_UART_XMIT_SAMPLE | 
/* Serial UART Mode */
                      TM_MPC860_UART;

/* enable SCC1 receive/transmit operation */
    regs->scc_gsmrl |= TM_MPC860_ENABLE_RECV | TM_MPC860_ENABLE_XMIT;
     
}



?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
97国产一区二区| 国产精品日韩精品欧美在线| 欧美怡红院视频| 91视频精品在这里| 91婷婷韩国欧美一区二区| av中文字幕亚洲| 不卡一二三区首页| 91免费观看国产| 色婷婷久久久久swag精品| 91亚洲永久精品| 91国产丝袜在线播放| 91福利视频久久久久| 91啪亚洲精品| 色素色在线综合| 欧美日韩国产a| 91麻豆精品国产91久久久久久久久| 欧美亚洲动漫精品| 欧美久久久久久蜜桃| 欧美大片一区二区| 国产亚洲综合色| 国产精品护士白丝一区av| 亚洲精品日日夜夜| 午夜伦理一区二区| 国产在线精品免费av| a级精品国产片在线观看| 欧美最新大片在线看| 欧美丰满少妇xxxxx高潮对白| 精品日韩在线观看| 国产精品成人免费精品自在线观看 | 奇米888四色在线精品| 另类小说图片综合网| 国产一区二区三区免费| 99这里只有精品| 欧美日韩国产高清一区二区| 久久综合久色欧美综合狠狠| 国产精品久久久久久久蜜臀| 亚洲成a人片综合在线| 精品一区二区三区免费播放| 成人av资源在线观看| 欧美日韩黄色一区二区| 26uuu精品一区二区三区四区在线| 国产精品污www在线观看| 亚洲国产日日夜夜| 国产一区久久久| 色婷婷综合中文久久一本| 日韩女优视频免费观看| 中文字幕亚洲欧美在线不卡| 琪琪一区二区三区| 成人av在线资源网| 欧美一区二区三区在线看| 欧美激情资源网| 日韩国产精品91| 99久久精品99国产精品| 2021中文字幕一区亚洲| 亚洲女同一区二区| 免费在线观看一区| 日本久久一区二区三区| 久久在线观看免费| 天堂蜜桃一区二区三区| 成人性生交大片| 日韩免费成人网| 亚洲一区二区三区免费视频| 国产91清纯白嫩初高中在线观看 | 欧美群妇大交群中文字幕| 久久蜜臀精品av| 午夜欧美在线一二页| 成人午夜av电影| 欧美一区二区免费观在线| 亚洲欧美日韩国产综合在线| 国内精品伊人久久久久av一坑 | 欧美日韩一级大片网址| 国产精品久久777777| 国内精品免费在线观看| 在线成人免费观看| 亚洲靠逼com| 成人夜色视频网站在线观看| 精品国内片67194| 天天综合天天综合色| 99re视频精品| 欧美激情在线观看视频免费| 麻豆91免费观看| 欧美一区二区三区日韩| 亚洲图片欧美视频| 色天天综合久久久久综合片| 国产精品色一区二区三区| 国产在线视频精品一区| 日韩精品专区在线影院观看| 视频一区在线播放| 欧美日韩精品高清| 亚洲一区二区三区国产| 日本精品视频一区二区三区| 最好看的中文字幕久久| www.视频一区| 国产精品乱子久久久久| 国产suv精品一区二区6| 欧美国产精品一区二区三区| 国产一区二区三区视频在线播放| 日韩欧美色电影| 亚洲成人先锋电影| 欧美福利视频一区| 日韩av一级片| 欧美一区二区三区视频免费| 日韩电影一区二区三区四区| 欧美一区二区三区在线看| 日产国产高清一区二区三区| 欧美高清性hdvideosex| 午夜欧美在线一二页| 欧美一区二区三区成人| 免费精品视频在线| 欧美一级免费大片| 蜜桃视频第一区免费观看| 欧美成人vps| 国产精品影音先锋| 中文在线一区二区| 色综合中文字幕国产 | 日本一区二区电影| 国产91露脸合集magnet| 国产精品久久久久一区二区三区| 99国产精品久久久久久久久久久| 综合久久一区二区三区| 欧美亚洲图片小说| 日韩中文字幕一区二区三区| 日韩一二在线观看| 国产乱一区二区| 自拍偷拍国产精品| 欧美高清你懂得| 国内成人自拍视频| 国产精品欧美极品| 欧美视频一区二区| 韩国av一区二区三区四区| 国产精品久久久久一区二区三区| 日本国产一区二区| 日韩在线观看一区二区| 337p粉嫩大胆色噜噜噜噜亚洲| 成人一道本在线| 国产成人无遮挡在线视频| 国产精品综合在线视频| 亚洲一区自拍偷拍| 色综合久久六月婷婷中文字幕| 欧美成人一区二区三区| 一区二区三区精品| 国产剧情一区在线| 亚洲免费高清视频在线| 欧美精品精品一区| 国产成人99久久亚洲综合精品| 亚洲精品免费看| 欧美成人综合网站| 成人高清免费观看| 石原莉奈一区二区三区在线观看| 久久综合久久鬼色| 欧洲一区二区av| 国产一区二区不卡| 亚洲欧美激情视频在线观看一区二区三区 | 一级特黄大欧美久久久| 精品久久久久久无| 91国产精品成人| 激情图片小说一区| 亚洲最大成人网4388xx| 久久久久久日产精品| 欧美日韩精品一区二区三区| 国产成人av一区二区| 偷拍一区二区三区四区| 国产精品久久一卡二卡| 日韩欧美美女一区二区三区| 99精品视频一区二区| 日韩不卡在线观看日韩不卡视频| 成人欧美一区二区三区黑人麻豆| 欧美一卡2卡3卡4卡| 色综合视频在线观看| 国产剧情一区二区| 日本亚洲天堂网| 亚洲精品免费一二三区| 国产片一区二区| 日韩精品中午字幕| 欧美另类变人与禽xxxxx| 丁香亚洲综合激情啪啪综合| 欧美aaaaa成人免费观看视频| 一区二区三区鲁丝不卡| 日本一区二区三区四区在线视频 | 国产亚洲一区字幕| 欧美一区二区私人影院日本| 欧美亚洲禁片免费| 99久久精品国产一区二区三区| 国产高清视频一区| 激情亚洲综合在线| 日韩电影一区二区三区| 亚洲午夜羞羞片| 亚洲少妇30p| 国产精品萝li| 国产精品午夜久久| 久久天天做天天爱综合色| 日韩亚洲欧美综合| 欧美日韩高清不卡| 日本福利一区二区| 91免费版pro下载短视频| 99免费精品视频| 成人高清视频免费观看| 高清日韩电视剧大全免费| 国产成人综合在线播放| 国产一区二区三区精品欧美日韩一区二区三区 |