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

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

?? kitlser.c

?? 6410BSP3
?? C
字號:
//
// Copyright (c) Microsoft Corporation.  All rights reserved.
//
//
// Use of this source code is subject to the terms of the Microsoft end-user
// license agreement (EULA) under which you licensed this SOFTWARE PRODUCT.
// If you did not accept the terms of the EULA, you are not authorized to use
// this source code. For a copy of the EULA, please see the LICENSE.RTF on your
// install media.
//
/*++
THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
PARTICULAR PURPOSE.

Module Name:
    kitlser.c

Abstract:

    Platform specific code for serial KITL services.

Functions:


Notes:

--*/

#include <windows.h>
#include <bsp.h>
#include <kitl_cfg.h>

static DWORD KitlIoPortBase;
static volatile S3C6410_UART_REG *g_pUARTReg = NULL;
static volatile S3C6410_GPIO_REG *g_pGPIOReg = NULL;
static volatile S3C6410_SYSCON_REG *g_pSysConReg = NULL;

static const UINT32 aSlotTable[16] =
{
    0x0000, 0x0080, 0x0808, 0x0888,
    0x2222, 0x4924, 0x4a52, 0x54aa,
    0x5555, 0xd555, 0xd5d5, 0xddd5,
    0xdddd, 0xdfdd, 0xdfdf, 0xffdf
};

/* S3C6410UART_Init
 *
 *  Called by PQOAL KITL framework to initialize the serial port
 *
 *  Return Value:
 */
BOOL S3C6410UART_Init (KITL_SERIAL_INFO *pSerInfo)
{
    UINT32 DivSlot;
    float Div;

    KITLOutputDebugString ("[KITL] ++S3C6410UART_Init()\r\n");

    KITLOutputDebugString ("[KITL]    pAddress = 0x%x\n", pSerInfo->pAddress);
    KITLOutputDebugString ("[KITL]    BaudRate = 0x%x\n", pSerInfo->baudRate);
    KITLOutputDebugString ("[KITL]    DataBits = 0x%x\n", pSerInfo->dataBits);
    KITLOutputDebugString ("[KITL]    StopBits = 0x%x\n", pSerInfo->stopBits);
    KITLOutputDebugString ("[KITL]    Parity   = 0x%x\n", pSerInfo->parity);

    KitlIoPortBase = (DWORD)pSerInfo->pAddress;

    if (KitlIoPortBase == 0)
    {
        KITLOutputDebugString ("[KITL:ERR] KitlIoPortBase is NULL\r\n");
        return FALSE;
    }

    g_pUARTReg = (S3C6410_UART_REG *)OALPAtoVA(KitlIoPortBase, FALSE);
    g_pGPIOReg = (S3C6410_GPIO_REG *)OALPAtoVA(S3C6410_BASE_REG_PA_GPIO, FALSE);
    g_pSysConReg = (S3C6410_SYSCON_REG *)OALPAtoVA(S3C6410_BASE_REG_PA_SYSCON, FALSE);

    if (KitlIoPortBase == S3C6410_BASE_REG_PA_UART0)
    {
        // UART0 Clock Enable
        g_pSysConReg->PCLK_GATE |= (1<<1);        // UART0
        g_pSysConReg->SCLK_GATE |= (1<<5);        // UART0~3
        // UART0 Port Initialize (RXD0 : GPA0, TXD0: GPA1)
        g_pGPIOReg->GPACON = (g_pGPIOReg->GPACON & ~(0xff<<0)) | (0x22<<0);        // GPA0->RXD0, GPA1->TXD0
        g_pGPIOReg->GPAPUD = (g_pGPIOReg->GPAPUD & ~(0xf<<0)) | (0x1<<0);            // RXD0: Pull-down, TXD0: pull up/down disable
    }
    else if (KitlIoPortBase == S3C6410_BASE_REG_PA_UART1)
    {
        // UART1 Clock Enable
        g_pSysConReg->PCLK_GATE |= (1<<2);        // UART1
        g_pSysConReg->SCLK_GATE |= (1<<5);        // UART0~3
        // UART1 Port Initialize (RXD1 : GPA4, TXD1: GPA5)
        g_pGPIOReg->GPACON = (g_pGPIOReg->GPACON & ~(0xff<<16)) | (0x22<<16);    // GPA4->RXD1, GPA5->TXD1
        g_pGPIOReg->GPAPUD = (g_pGPIOReg->GPAPUD & ~(0xf<<8)) | (0x1<<8);            // RXD1: Pull-down, TXD1: pull up/down disable
    }
    else if (KitlIoPortBase == S3C6410_BASE_REG_PA_UART2)
    {
        // UART2 Clock Enable
        g_pSysConReg->PCLK_GATE |= (1<<3);        // UART2
        g_pSysConReg->SCLK_GATE |= (1<<5);        // UART0~3
        // UART2 Port Initialize (RXD2 : GPB0, TXD2: GPB1)
        g_pGPIOReg->GPBCON = (g_pGPIOReg->GPBCON & ~(0xff<<0)) | (0x22<<0);        // GPB0->RXD2, GPB1->TXD2
        g_pGPIOReg->GPBPUD = (g_pGPIOReg->GPBPUD & ~(0xf<<0)) | (0x1<<0);            // RXD2: Pull-down, TXD2: pull up/down disable
    }
    else if (KitlIoPortBase == S3C6410_BASE_REG_PA_UART3)
    {
        // UART3 Clock Enable
        g_pSysConReg->PCLK_GATE |= (1<<4);        // UART3
        g_pSysConReg->SCLK_GATE |= (1<<5);        // UART0~3
        // UART3 Port Initialize (RXD3 : GPB2, TXD3: GPB3)
        g_pGPIOReg->GPBCON = (g_pGPIOReg->GPBCON & ~(0xff<<8)) | (0x22<<8);        // GPB2->RXD3, GPB3->TXD3
        g_pGPIOReg->GPBPUD = (g_pGPIOReg->GPBPUD & ~(0xf<<4)) | (0x1<<4);            // RXD3: Pull-down, TXD3: pull up/down disable
    }

    // Initialize UART
    //
    g_pUARTReg->ULCON = (0<<6)|(0<<3)|(0<<2)|(3<<0);                    // Normal Mode, No Parity, 1 Stop Bit, 8 Bit Data
    g_pUARTReg->UCON = (0<<10)|(1<<9)|(1<<8)|(0<<7)|(0<<6)|(0<<5)|(0<<4)|(1<<2)|(1<<0);    // PCLK divide, Polling Mode
    g_pUARTReg->UFCON = (0<<6)|(0<<4)|(0<<2)|(0<<1)|(0<<0);            // Disable FIFO
    g_pUARTReg->UMCON = (0<<5)|(0<<4)|(0<<0);                        // Disable Auto Flow Control

    Div = (float)((float)S3C6410_PCLK/(16.0*(float)CBR_115200)) - 1;
    DivSlot = (UINT32)((Div-(int)Div)*16);

    g_pUARTReg->UBRDIV = (UINT32)Div;
    g_pUARTReg->UDIVSLOT = aSlotTable[DivSlot];

    pSerInfo->bestSize = 1;        // read it one by one

    KITLOutputDebugString ("[KITL] --S3C6410UART_Init()\r\n");

    return TRUE;
}

/* S3C6410UART_WriteData
 *
 *  Block until the byte is sent
 *
 *  Return Value: TRUE on success, FALSE otherwise
 */
UINT16 S3C6410UART_WriteData (UINT8 *pch, UINT16 length)
{
    if (!KitlIoPortBase)
    {
        length = 0;
    }
    else
    {
        DEBUGCHK (length == 1);

        // Wait for transmit buffer to be empty
        while ((g_pUARTReg->UTRSTAT & 0x02) == 0);

        // Send character
        g_pUARTReg->UTXH = *pch;
    }

    return length;
}


/* S3C6410UART_ReadData
 *
 *  Called from PQOAL KITL to read a byte from serial port
 *
 *  Return Value: TRUE on success, FALSE otherwise
 */
UINT16 S3C6410UART_ReadData (UINT8 *pch, UINT16 length)
{
    UCHAR uStatus;
    UINT16 count = 0;

    if (KitlIoPortBase)
    {
        uStatus = g_pUARTReg->UTRSTAT;
        if ((uStatus & 0x01) != 0)
        {
            *pch = (UINT8) g_pUARTReg->URXH;
            count = 1;
        }
    }

    return count;
}

VOID S3C6410UART_EnableInt (void)
{
    // polling, no interrupt
}

VOID S3C6410UART_DisableInt (void)
{
    // polling, no interrupt
}

void S3C6410UART_PowerOff(void)
{
    KITLOutputDebugString ("[KITL] S3C6410UART_PowerOff()\r\n");

    return;
}

void S3C6410UART_PowerOn(void)
{
    UINT32 DivSlot;
    float Div;

    OEMInitDebugSerial();    // for What ???

    KITLOutputDebugString ("[KITL] S3C6410UART_PowerOn()\r\n");

    if (KitlIoPortBase == S3C6410_BASE_REG_PA_UART0)
    {
        // UART0 Clock Enable
        g_pSysConReg->PCLK_GATE |= (1<<1);        // UART0
        g_pSysConReg->SCLK_GATE |= (1<<5);        // UART0~3
        // UART0 Port Initialize (RXD0 : GPA0, TXD0: GPA1)
        g_pGPIOReg->GPACON = (g_pGPIOReg->GPACON & ~(0xff<<0)) | (0x22<<0);        // GPA0->RXD0, GPA1->TXD0
        g_pGPIOReg->GPAPUD = (g_pGPIOReg->GPAPUD & ~(0xf<<0)) | (0x1<<0);            // RXD0: Pull-down, TXD0: pull up/down disable
    }
    else if (KitlIoPortBase == S3C6410_BASE_REG_PA_UART1)
    {
        // UART1 Clock Enable
        g_pSysConReg->PCLK_GATE |= (1<<2);        // UART1
        g_pSysConReg->SCLK_GATE |= (1<<5);        // UART0~3
        // UART1 Port Initialize (RXD1 : GPA4, TXD1: GPA5)
        g_pGPIOReg->GPACON = (g_pGPIOReg->GPACON & ~(0xff<<16)) | (0x22<<16);    // GPA4->RXD1, GPA5->TXD1
        g_pGPIOReg->GPAPUD = (g_pGPIOReg->GPAPUD & ~(0xf<<8)) | (0x1<<8);            // RXD1: Pull-down, TXD1: pull up/down disable
    }
    else if (KitlIoPortBase == S3C6410_BASE_REG_PA_UART2)
    {
        // UART2 Clock Enable
        g_pSysConReg->PCLK_GATE |= (1<<3);        // UART2
        g_pSysConReg->SCLK_GATE |= (1<<5);        // UART0~3
        // UART2 Port Initialize (RXD2 : GPB0, TXD2: GPB1)
        g_pGPIOReg->GPBCON = (g_pGPIOReg->GPBCON & ~(0xff<<0)) | (0x22<<0);        // GPB0->RXD2, GPB1->TXD2
        g_pGPIOReg->GPBPUD = (g_pGPIOReg->GPBPUD & ~(0xf<<0)) | (0x1<<0);            // RXD2: Pull-down, TXD2: pull up/down disable
    }
    else if (KitlIoPortBase == S3C6410_BASE_REG_PA_UART3)
    {
        // UART3 Clock Enable
        g_pSysConReg->PCLK_GATE |= (1<<4);        // UART3
        g_pSysConReg->SCLK_GATE |= (1<<5);        // UART0~3
        // UART3 Port Initialize (RXD3 : GPB2, TXD3: GPB3)
        g_pGPIOReg->GPBCON = (g_pGPIOReg->GPBCON & ~(0xff<<8)) | (0x22<<8);        // GPB2->RXD3, GPB3->TXD3
        g_pGPIOReg->GPBPUD = (g_pGPIOReg->GPBPUD & ~(0xf<<4)) | (0x1<<4);            // RXD3: Pull-down, TXD3: pull up/down disable
    }

    // Initialize UART
    //
    g_pUARTReg->ULCON = (0<<6)|(0<<3)|(0<<2)|(3<<0);                    // Normal Mode, No Parity, 1 Stop Bit, 8 Bit Data
    g_pUARTReg->UCON = (0<<10)|(1<<9)|(1<<8)|(0<<7)|(0<<6)|(0<<5)|(0<<4)|(1<<2)|(1<<0);    // PCLK divide, Polling Mode
    g_pUARTReg->UFCON = (0<<6)|(0<<4)|(0<<2)|(0<<1)|(0<<0);            // Disable FIFO
    g_pUARTReg->UMCON = (0<<5)|(0<<4)|(0<<0);                        // Disable Auto Flow Control

    Div = (float)((float)S3C6410_PCLK/(16.0*(float)CBR_115200)) - 1;
    DivSlot = (UINT32)((Div-(int)Div)*16);

    g_pUARTReg->UBRDIV = (UINT32)Div;
    g_pUARTReg->UDIVSLOT = aSlotTable[DivSlot];
}

// KITL Serial Driver function pointer
OAL_KITL_SERIAL_DRIVER DrvSerial =
{
    S3C6410UART_Init,            // pfnInit
    NULL,                        // pfnDeinit
    S3C6410UART_WriteData,        // pfnSend
    NULL,                        // pfnSendComplete
    S3C6410UART_ReadData,        // pfnRecv
    S3C6410UART_EnableInt,        // pfnEnableInts
    S3C6410UART_DisableInt,    // pfnDisableInts
    S3C6410UART_PowerOff,        // pfnPowerOff
    S3C6410UART_PowerOn,        // pfnPowerOn
    NULL,                        // pfnFlowControl
};

const OAL_KITL_SERIAL_DRIVER *GetKitlSerialDriver (void)
{
    return &DrvSerial;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
51久久夜色精品国产麻豆| 波多野结衣亚洲| 51精品秘密在线观看| 五月天欧美精品| 欧美二区在线观看| 麻豆国产欧美日韩综合精品二区| 91.com视频| 国产美女视频91| 国产精品系列在线| 91黄色免费看| 日韩国产欧美在线播放| 精品欧美一区二区在线观看| 久久国产精品区| 欧美韩国日本一区| 色综合欧美在线| 五月天丁香久久| 久久久一区二区三区捆绑**| 国产成人在线视频播放| 亚洲精品自拍动漫在线| 欧美老年两性高潮| 国产精品一区二区男女羞羞无遮挡 | 欧美精品一区视频| 成人三级在线视频| 本田岬高潮一区二区三区| 亚洲你懂的在线视频| 在线免费观看视频一区| 尤物视频一区二区| 精品少妇一区二区三区在线播放| 国产精品亚洲一区二区三区妖精| 青青草91视频| 中文字幕免费在线观看视频一区| 日本乱人伦aⅴ精品| 韩国三级电影一区二区| 一区二区三区中文在线| 久久综合九色综合欧美就去吻| 精品免费国产二区三区| 99久久久久久| 久久99久久久欧美国产| 一区二区三区免费| 国产欧美综合在线| 6080日韩午夜伦伦午夜伦| 99精品视频在线免费观看| 麻豆传媒一区二区三区| 一区二区三区美女视频| 国产婷婷色一区二区三区| 欧美日韩成人综合在线一区二区| 国产乱码精品一区二区三区忘忧草| 一卡二卡欧美日韩| 中文字幕第一区综合| 日韩一卡二卡三卡四卡| 欧洲人成人精品| 国产激情一区二区三区四区| 日本不卡一区二区三区高清视频| 亚洲精品国产高清久久伦理二区| 久久久久成人黄色影片| 欧美一级久久久| 欧美日韩综合在线| 91麻豆免费看| av动漫一区二区| 成人深夜视频在线观看| 国产精品99久久久久久有的能看| 美女免费视频一区二区| 午夜精品久久久久影视| 一区二区日韩电影| 亚洲精品高清在线| 亚洲婷婷综合久久一本伊一区| 欧美经典一区二区| 久久精品亚洲一区二区三区浴池| 5858s免费视频成人| 欧美伦理影视网| 欧美体内she精高潮| 色狠狠色狠狠综合| 色呦呦网站一区| 国产精品一区二区在线观看不卡| 精品一区二区三区免费| 国产在线一区观看| 国产专区欧美精品| 国产成人福利片| 高清久久久久久| 成人av在线资源网站| 精品国产欧美一区二区| 欧美videossexotv100| 欧美大尺度电影在线| 日韩一区二区在线观看视频播放| 欧美一区二区久久| 精品乱码亚洲一区二区不卡| 欧美精品一区二区蜜臀亚洲| 久久久精品日韩欧美| 中国色在线观看另类| 中文字幕字幕中文在线中不卡视频| 亚洲视频免费在线| 亚洲午夜电影在线| 日韩av一级片| 韩国精品久久久| 大桥未久av一区二区三区中文| 波多野结衣中文字幕一区二区三区| 不卡区在线中文字幕| 欧美在线观看你懂的| 538prom精品视频线放| 精品久久久三级丝袜| 国产欧美日韩视频一区二区 | 精品sm在线观看| 国产欧美视频在线观看| 亚洲精品视频在线| 日韩精品视频网| 国产乱子伦视频一区二区三区| 成人一级视频在线观看| 91搞黄在线观看| 日韩亚洲国产中文字幕欧美| 国产性天天综合网| 亚洲激情在线激情| 久久99这里只有精品| 97se亚洲国产综合自在线不卡| 欧美丝袜丝交足nylons| 亚洲精品一区二区精华| 亚洲精品乱码久久久久久久久| 免费亚洲电影在线| 99久久久国产精品| 日韩一区二区免费高清| 国产精品美女久久久久高潮| 亚洲成人av福利| 国产高清久久久| 欧美日韩一区 二区 三区 久久精品| 欧美va日韩va| 亚洲自拍另类综合| 国产精品123| 91麻豆精品国产综合久久久久久 | caoporn国产精品| 欧美不卡一区二区| 成人免费一区二区三区在线观看| 蜜臀av国产精品久久久久| 91亚洲国产成人精品一区二三| 日韩欧美一二三区| 一区二区三区日本| 成人影视亚洲图片在线| 91精品黄色片免费大全| 亚洲天堂av一区| 国产一区二区三区最好精华液| 欧美三级欧美一级| 亚洲欧洲一区二区三区| 狠狠色丁香久久婷婷综合丁香| 欧美日韩中字一区| 亚洲免费观看高清在线观看| 国产成人免费在线观看不卡| 日韩你懂的在线观看| 午夜精品视频在线观看| 91啪亚洲精品| 国产精品久久久久久久久搜平片 | 国产欧美综合在线| 蜜臀91精品一区二区三区 | 欧美另类一区二区三区| 亚洲色图都市小说| 国产成人av一区二区| 26uuu欧美| 久久精品国产免费| 91麻豆精品国产91久久久资源速度 | 日韩理论在线观看| 成人激情小说网站| 日本一区二区视频在线| 国产在线国偷精品免费看| 日韩亚洲欧美综合| 免费成人在线视频观看| 91 com成人网| 免费成人性网站| 欧美一级片在线| 麻豆freexxxx性91精品| 日韩欧美国产成人一区二区| 日韩av中文字幕一区二区三区| 欧美日本在线观看| 视频一区国产视频| 欧美肥妇free| 麻豆精品一区二区三区| 欧美大黄免费观看| 国产一区二区三区日韩 | www.亚洲在线| 国产精品美女久久福利网站| 成人午夜伦理影院| 中文字幕一区二区三区精华液| kk眼镜猥琐国模调教系列一区二区| 中文字幕在线不卡视频| 99精品视频在线观看免费| 亚洲精品一二三| 欧美日韩国产一区二区三区地区| 日日夜夜精品视频天天综合网| 91精品国产免费| 国产一区二区三区黄视频| 国产日韩欧美高清| eeuss鲁片一区二区三区| 亚洲品质自拍视频网站| 欧美日韩激情一区| 久久综合综合久久综合| 国产亚洲欧美色| 91在线云播放| 日日摸夜夜添夜夜添国产精品 | 国产成人无遮挡在线视频| 亚洲另类在线一区| 91精品国产综合久久久久久漫画 | 99热在这里有精品免费| 亚洲午夜久久久久久久久电影院| 欧美一区二区精美|