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

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

?? pl010ser.c

?? 收集到的orion_ep93xx_wince_bsp_1-3-507串行通訊驅(qū)動源碼,未作測試
?? C
?? 第 1 頁 / 共 5 頁
字號:
{
    PSER16550_INFO  pSer16550 = &(((PSER_INFO)pHead)->ser16550);
    PAMBA_UART_INFO pSerAMBA  = &(((PSER_INFO)pHead)->serAMBA);
    USHORT        divisor = 0;
    UCHAR         lcr = 0;

    // **** Warning ***** Make no system calls, called in power context
    divisor = DivisorOfRate(pHead, BaudRate);

    if ( divisor )
    {
      
       pSerAMBA->LCR_M = ((divisor & 0xFF00) >> 8);
       pSerAMBA->LCR_L = (divisor & 0xFF);
       OUTB(pSerAMBA, pUART_LCR_M, pSerAMBA->LCR_M);
       OUTB(pSerAMBA, pUART_LCR_L, pSerAMBA->LCR_L);

       // NOTE: Writes to LCR_M or LCR_L *must* be followed by a write to
       // LCR_H - this strobes the data into the 23-bit wide LCR register.
       //
       lcr = INB(pSerAMBA, pUART_LCR_H);
       OUTB(pSerAMBA, pUART_LCR_H, lcr);

       return( TRUE );
    
    } else {
        return( FALSE );
    }

}

//
// @doc OEM
// @func BOOL | SL_SetBaudRate |
//  This routine sets the baud rate of the device.
//
// @rdesc None.
//
BOOL
SL_SetBaudRate(
              PVOID   pHead,    // @parm     PVOID returned by HWInit
              ULONG   BaudRate    // @parm     ULONG representing decimal baud rate.
              )
{
    PSER16550_INFO  pSer16550 = &(((PSER_INFO)pHead)->ser16550);
    PAMBA_UART_INFO pSerAMBA  = &(((PSER_INFO)pHead)->serAMBA);
    BOOL fRet = FALSE;

    DEBUGMSG (ZONE_FUNCTION,
              (TEXT("+SL_SetbaudRate 0x%X, 0x%X\r\n"), pHead, BaudRate));

    try {
        // Enter critical section before calling function, since
        // we can't make sys calls inside SetBaudRate
        EnterCriticalSection(&(pSer16550->RegCritSec));

        fRet = SetBaudRate(pHead, BaudRate);

        LeaveCriticalSection(&(pSer16550->RegCritSec));
    }except (GetExceptionCode() == EXCEPTION_ACCESS_VIOLATION ?
             EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH) {
        return( FALSE );
    }

    if ( fRet ) {
        pSer16550->dcb.BaudRate = BaudRate;

        DEBUGMSG (ZONE_FUNCTION,
                  (TEXT("-SL_SetbaudRate 0x%X (%d Baud)\r\n"),
                   pHead, BaudRate));
        return( TRUE );
    } else {
        DEBUGMSG (ZONE_FUNCTION | ZONE_ERROR,
                  (TEXT("-SL_SetbaudRate - Error setting %d, failing to %d\r\n"),
                   BaudRate, pSer16550->dcb.BaudRate) );
        return( FALSE );
    }
}

//
// @doc OEM
// @func BOOL | SL_SetByteSize |
//  This routine sets the WordSize of the device.
//
// @rdesc None.
//
BOOL
SL_SetByteSize(
              PVOID   pHead,        // @parm     PVOID returned by HWInit
              ULONG   ByteSize    // @parm     ULONG ByteSize field from DCB.
              )
{
    PSER16550_INFO  pSer16550 = &(((PSER_INFO)pHead)->ser16550);
    PAMBA_UART_INFO pSerAMBA  = &(((PSER_INFO)pHead)->serAMBA);
    UINT8 lcr = 0;
    BOOL bRet = FALSE;

    DEBUGMSG (ZONE_FUNCTION,
              (TEXT("+SL_SetByteSize 0x%X, x%X\r\n"), pHead, ByteSize));

    bRet = TRUE;

    EnterCriticalSection(&(pSer16550->RegCritSec));
    try
    {
        lcr = INB(pSerAMBA, pUART_LCR_H);
        lcr &= AMBA_UART_BSIZE_MASK;
        switch ( ByteSize ) {
        case 5:
            lcr |= AMBA_UARTLCR_H_WLEN_5;
            break;
        case 6:
            lcr |= AMBA_UARTLCR_H_WLEN_6;
            break;
        case 7:
            lcr |= AMBA_UARTLCR_H_WLEN_7;
            break;
        case 8:
            lcr |= AMBA_UARTLCR_H_WLEN_8;
            break;
        default:
            bRet = FALSE;
            break;
        }
        if (bRet) {
            OUTB(pSerAMBA, pUART_LCR_H, lcr);
        }
    }
    except (GetExceptionCode() == EXCEPTION_ACCESS_VIOLATION ?
            EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH) {
        bRet = FALSE;
    }
    LeaveCriticalSection(&(pSer16550->RegCritSec));

    DEBUGMSG (ZONE_FUNCTION,
              (TEXT("-SL_SetByteSize 0x%X\r\n"), pHead));

    return(bRet);
}
//
// @doc OEM
// @func BOOL | SL_SetParity |
//  This routine sets the parity of the device.
//
// @rdesc None.
//
BOOL
SL_SetParity(
            PVOID   pHead,    // @parm     PVOID returned by HWInit
            ULONG   Parity    // @parm     ULONG parity field from DCB.
            )
{
    PSER16550_INFO  pSer16550 = &(((PSER_INFO)pHead)->ser16550);
    PAMBA_UART_INFO pSerAMBA  = &(((PSER_INFO)pHead)->serAMBA);
    UINT8 lcr = 0;
    BOOL bRet = FALSE;

    DEBUGMSG (ZONE_FUNCTION,
              (TEXT("+SL_SetParity 0x%X, x%X\r\n"), pHead, Parity));

    bRet = TRUE;

    EnterCriticalSection(&(pSer16550->RegCritSec));
    try {
        lcr = INB(pSerAMBA, pUART_LCR_H);
        lcr &= AMBA_UART_PARITY_MASK;
        switch ( Parity ) {
        case ODDPARITY:
            lcr |= (AMBA_UARTLCR_H_PEN);
            break;

        case EVENPARITY:
            lcr |= (AMBA_UARTLCR_H_PEN | AMBA_UARTLCR_H_EPS);
            break;

        case MARKPARITY:
            DEBUGMSG(ZONE_WARN, (TEXT("SL_SetParity: MARKPARITY not supported.\r\n")));
            break;

        case SPACEPARITY:
            DEBUGMSG(ZONE_WARN, (TEXT("SL_SetParity: SPACEPARITY not supported.\r\n")));
            break;

        case NOPARITY:
            break;
        default:
            bRet = FALSE;
            break;
        }
        if (bRet)
        {
            OUTB(pSerAMBA, pUART_LCR_H, lcr);
        }
    }
    except (GetExceptionCode() == EXCEPTION_ACCESS_VIOLATION ?
            EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH) {
        bRet = FALSE;
    }
    LeaveCriticalSection(&(pSer16550->RegCritSec));

    DEBUGMSG (ZONE_FUNCTION,
              (TEXT("-SL_SetParity 0x%X\r\n"), pHead));

    return(bRet);
}
//
// @doc OEM
// @func VOID | SL_SetStopBits |
//  This routine sets the Stop Bits for the device.
//
// @rdesc None.
//
BOOL
SL_SetStopBits(
              PVOID   pHead,      // @parm     PVOID returned by HWInit
              ULONG   StopBits  // @parm     ULONG StopBits field from DCB.
              )
{
    PSER16550_INFO  pSer16550 = &(((PSER_INFO)pHead)->ser16550);
    PAMBA_UART_INFO pSerAMBA  = &(((PSER_INFO)pHead)->serAMBA);
    UINT8 lcr = 0;
    BOOL bRet = FALSE;

    DEBUGMSG (ZONE_FUNCTION,
              (TEXT("+SL_SetStopBits 0x%X, x%X\r\n"), pHead, StopBits));

    bRet = TRUE;

    EnterCriticalSection(&(pSer16550->RegCritSec));
    lcr = INB(pSerAMBA, pUART_LCR_H);
    lcr &= AMBA_UART_SBIT_MASK;

    try {
        // Note that 1.5 stop bits only works if the word size
        // is 5 bits.  Any other xmit word size will cause the
        // 1.5 stop bit setting to generate 2 stop bits.
        switch ( StopBits ) {
        case ONESTOPBIT :
            break;
        case ONE5STOPBITS :
            DEBUGMSG(ZONE_WARN, (TEXT("SL_SetStopBits: ONE5STOPBITS not supported.\r\n")));
            break;
        case TWOSTOPBITS :
            lcr |= AMBA_UARTLCR_H_STP2;
            break;
        default:
            bRet = FALSE;
            break;
        }

        if (bRet)
        {
            OUTB(pSerAMBA, pUART_LCR_H, lcr);
        }
    }
    except (GetExceptionCode() == EXCEPTION_ACCESS_VIOLATION ?
            EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH) {
        bRet = FALSE;
    }

    LeaveCriticalSection(&(pSer16550->RegCritSec));

    DEBUGMSG (ZONE_FUNCTION,
              (TEXT("-SL_SetStopBits 0x%X\r\n"), pHead));

    return(bRet);
}

//
// @doc OEM
// @func ULONG | SL_GetRxBufferSize | This function returns
// the size of the hardware buffer passed to the interrupt
// initialize function.  It would be used only for devices
// which share a buffer between the MDD/PDD and an ISR.
//
// 
// @rdesc This routine always returns 0 for 16550 UARTS.
// 
ULONG
SL_GetRxBufferSize(
                  PVOID pHead
                  )
{
    return(0);
}

//
// @doc OEM
// @func PVOID | SC_GetRxStart | This routine returns the start of the hardware
// receive buffer.  See SL_GetRxBufferSize.
// 
// @rdesc The return value is a pointer to the start of the device receive buffer.
// 
PVOID
SL_GetRxStart(
             PVOID   pHead // @parm PVOID returned by SC_init.
             )
{
    return(NULL);
}

//
// @doc OEM
// @func ULONG | SL_GetGetInterruptType | This function is called
//   by the MDD whenever an interrupt occurs.  The return code
//   is then checked by the MDD to determine which of the four
//   interrupt handling routines are to be called.
// 
// @rdesc This routine returns a bitmask indicating which interrupts
//   are currently pending.
// 
INTERRUPT_TYPE
SL_GetInterruptType(
                   PVOID pHead      // Pointer to hardware head
                   )
{
    PSER16550_INFO  pSer16550 = &(((PSER_INFO)pHead)->ser16550);
    PAMBA_UART_INFO pSerAMBA  = &(((PSER_INFO)pHead)->serAMBA);
    INTERRUPT_TYPE interrupts;

    DEBUGMSG (0,
              (TEXT("+SL_GetInterruptType 0x%X\r\n"), pHead));
    try {
        pSerAMBA->IIR = INB(pSerAMBA, pUART_IIR);
    }
    except (GetExceptionCode() == EXCEPTION_ACCESS_VIOLATION ?
            EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH) {
        pSerAMBA->IIR = 0; // simulate no interrupt
    }

    if ( !pSerAMBA->IIR ) {
        // No interrupts pending, vector is useless
        interrupts = INTR_NONE;
        DEBUGMSG(ZONE_WARN, (TEXT("SL_GetInterruptType: No Interrupt...\r\n")));
    } else {
        // The interrupt value is valid
// NOTE: Receive errors (e.g., Line Errors) don't generate an interrupt
// On the Integrator.  We need to check for errors at read time.
        pSerAMBA->IIR &= AMBA_UARTIIR_MASK;
        if (pSerAMBA->IIR & AMBA_UARTIIR_RIS)
            interrupts = INTR_RX;
        else if (pSerAMBA->IIR & AMBA_UARTIIR_TIS)
            interrupts = INTR_TX;
        else if (pSerAMBA->IIR & AMBA_UARTIIR_MIS)
            interrupts = INTR_MODEM;
        else if (pSerAMBA->IIR & AMBA_UARTIIR_RTIS)	// Receive Timeout
            interrupts = INTR_RX;
        else
            interrupts = INTR_NONE;
    }

    if (pSer16550->AddTXIntr) {
        interrupts |= INTR_TX;
        pSer16550->AddTXIntr = FALSE;
    }

    DEBUGMSG (ZONE_THREAD,
              (TEXT("-SL_GetInterruptType 0x%X, 0x%X\r\n"),
               pHead, interrupts));

    return(interrupts);
}


// @doc OEM
// @func ULONG | SL_RxIntr | This routine gets several characters from the hardware
//   receive buffer and puts them in a buffer provided via the second argument.
//   It returns the number of bytes lost to overrun.
// 
// @rdesc The return value indicates the number of overruns detected.
//   The actual number of dropped characters may be higher.
//
ULONG
SL_RxIntr(
         PVOID pHead,                // @parm Pointer to hardware head
         PUCHAR pRxBuffer,           // @parm Pointer to receive buffer
         ULONG *pBufflen             // @parm In = max bytes to read, out = bytes read
         )
{
    PSER16550_INFO  pSer16550 = &(((PSER_INFO)pHead)->ser16550);
    PAMBA_UART_INFO pSerAMBA  = &(((PSER_INFO)pHead)->serAMBA);
    ULONG        RetVal    = 0;
    ULONG        TargetRoom    = *pBufflen;
    BOOL        fRXFlag = FALSE;
    BOOL        fReplaceparityErrors = FALSE;
    BOOL        fNull;
    UCHAR       cEvtChar, cRXChar;

    DEBUGMSG (0, (TEXT("+GetBytes - len %d.\r\n"),
                  *pBufflen));
    *pBufflen = 0;

    // LAM - I have local copies of some DCB elements since I don't
    // want to keep dereferencing inside my read loop and there are too
    // many of them to trust the compiler.
    cEvtChar = pSer16550->dcb.EvtChar;
    fNull = pSer16550->dcb.fNull;
    if ( pSer16550->dcb.fErrorChar && pSer16550->dcb.fParity )
        fReplaceparityErrors = TRUE;

    try
    {
        while ( TargetRoom )
        {

            // See if there is another byte to be read
            //
            if (!(INB(pSerAMBA, pUART_FR) & AMBA_UARTFR_RXFE))
            {

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品天美传媒| 国产欧美日韩久久| 粉嫩蜜臀av国产精品网站| 亚洲激情校园春色| 国产亚洲一区二区三区在线观看 | a级精品国产片在线观看| 亚洲成人一区在线| 国产精品久久久久影院色老大 | 1区2区3区欧美| 久久一二三国产| 欧美亚洲国产一卡| www.亚洲精品| 国产精品亚洲专一区二区三区| 亚洲国产欧美在线| 国产精品久久久久影院亚瑟| 精品sm捆绑视频| 欧美精品 日韩| 欧美亚洲尤物久久| 91麻豆高清视频| 91丨九色丨蝌蚪丨老版| 国产精品综合av一区二区国产馆| 丝袜亚洲另类欧美| 亚洲国产cao| 亚洲成人福利片| 亚洲制服欧美中文字幕中文字幕| 国产精品高潮呻吟| 中文字幕第一区第二区| 精品不卡在线视频| 精品国产不卡一区二区三区| 3d动漫精品啪啪1区2区免费| 欧美色图天堂网| 在线视频欧美精品| 色噜噜狠狠成人网p站| 波多野结衣中文一区| 床上的激情91.| 国产91色综合久久免费分享| 国产伦精品一区二区三区免费迷 | 欧美成人艳星乳罩| 日韩欧美一二三四区| 日韩欧美国产麻豆| 欧美成人国产一区二区| 欧美乱熟臀69xxxxxx| 欧美精品一二三| 欧美一区二区视频在线观看| 欧美日产在线观看| 欧美一区二区三区在线观看视频| 7777精品久久久大香线蕉| 91精品国产全国免费观看| 制服丝袜中文字幕亚洲| 日韩精品一区在线| 亚洲精品一区二区三区福利| 精品粉嫩超白一线天av| 欧美激情综合在线| 中文字幕日韩精品一区 | 玉足女爽爽91| 亚洲观看高清完整版在线观看 | 亚洲男人天堂av| 亚洲精品伦理在线| 日韩激情av在线| 国产麻豆91精品| 色系网站成人免费| 欧美日韩国产色站一区二区三区| 欧美一区二区三区在线电影| 欧美精品一区男女天堂| 国产蜜臀97一区二区三区| 亚洲男帅同性gay1069| 日日摸夜夜添夜夜添精品视频 | 久久久不卡影院| 亚洲欧美在线视频观看| 亚洲午夜精品一区二区三区他趣| 日本va欧美va欧美va精品| 国产精品一级在线| 91香蕉视频污在线| 91精品国产一区二区三区香蕉| 欧美精品一区二区三区久久久| 青青草国产精品97视觉盛宴 | 国产电影一区二区三区| 91麻豆.com| 日韩精品一区二区三区蜜臀| 中文字幕av一区二区三区免费看 | 高清国产午夜精品久久久久久| 91香蕉视频污在线| 欧美va亚洲va在线观看蝴蝶网| 国产精品电影一区二区| 丝袜美腿亚洲一区| 成人国产一区二区三区精品| 在线91免费看| 国产精品久久久久久亚洲毛片 | 亚洲综合一区二区三区| 石原莉奈在线亚洲三区| 大美女一区二区三区| 欧美日韩的一区二区| 国产欧美精品一区| 日韩二区在线观看| 色综合一区二区三区| 久久香蕉国产线看观看99| 亚洲大片精品永久免费| 成人黄色777网| 精品国一区二区三区| 亚洲18色成人| 99re亚洲国产精品| 久久影院电视剧免费观看| 午夜久久久影院| 一本色道亚洲精品aⅴ| 久久看人人爽人人| 日韩成人一区二区三区在线观看| av在线不卡观看免费观看| 日韩女优av电影在线观看| 一区二区激情视频| 99久久精品国产导航| 国产喷白浆一区二区三区| 精品一区二区在线看| 欧美三级中文字幕| 亚洲男女一区二区三区| 成人在线综合网| 久久婷婷国产综合国色天香| 日韩电影在线免费| 欧美日韩成人在线一区| 亚洲免费色视频| 成人av网站大全| 国产网站一区二区| 国产一区不卡视频| 久久先锋影音av鲁色资源| 免费看精品久久片| 在线播放中文字幕一区| 香蕉久久夜色精品国产使用方法| 一本大道久久精品懂色aⅴ| 中文字幕一区二区三区视频| 国产成人免费xxxxxxxx| 国产亚洲精久久久久久| 国产精一区二区三区| 久久久青草青青国产亚洲免观| 免费成人在线观看| 91精品国产手机| 久久国产福利国产秒拍| 日韩欧美一区在线观看| 麻豆精品蜜桃视频网站| 欧美一二三四在线| 日韩成人精品在线观看| 欧美成人福利视频| 国产一区二三区好的| 久久久久久久久久久久久夜| 国产呦萝稀缺另类资源| 欧美激情艳妇裸体舞| 成人v精品蜜桃久久一区| 中文字幕一区二区三| 成人av电影在线| 亚洲女人的天堂| 欧美喷潮久久久xxxxx| 日韩成人午夜电影| 久久久99精品久久| a4yy欧美一区二区三区| 亚洲韩国精品一区| 7777精品伊人久久久大香线蕉的 | 26uuuu精品一区二区| 国产精品一区久久久久| 欧美国产激情二区三区| 成人av在线网站| 一区二区三区在线免费视频| 在线精品观看国产| 麻豆国产精品视频| 欧美国产成人精品| 91麻豆6部合集magnet| 日韩电影在线免费看| 久久免费看少妇高潮| 一本到不卡精品视频在线观看| 婷婷激情综合网| 国产拍欧美日韩视频二区| 91成人免费在线| 久久国产精品99精品国产| 中文字幕一区二区三区视频 | 亚洲免费视频成人| 日韩美女在线视频| 不卡av电影在线播放| 天堂精品中文字幕在线| 欧美激情综合网| 欧美视频在线不卡| 国产精品白丝jk白祙喷水网站| 亚洲免费资源在线播放| 91 com成人网| 成人99免费视频| 日韩avvvv在线播放| 国产精品污网站| 欧美一区二区三区公司| 成人免费黄色大片| 日本亚洲一区二区| 成人免费一区二区三区在线观看| 91.com视频| 91视频xxxx| 国产一区二区三区在线观看精品| 亚洲图片欧美综合| 国产精品嫩草久久久久| 日韩一级高清毛片| 91久久一区二区| 国产91综合一区在线观看| 日韩高清不卡在线| 玉米视频成人免费看| 久久久精品人体av艺术| 欧美精品久久99| 在线观看91视频|