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

📄 debug.c

📁 WinCE 3.0 BSP, 包含Inter SA1110, Intel_815E, Advantech_PCM9574 等
💻 C
字号:
/*++
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.
Copyright (c) 1995-2000  Microsoft Corporation

Module Name: debug.c

Abstract: Boot loader serial port init, read, and write functions.

Functions:

Notes: 

--*/

#include <windows.h>
#include <nkintr.h>
#include <pc.h>
#include <wdm.h>
#include "bldr.h"


#define LS_TSR_EMPTY        0x40
#define LS_THR_EMPTY        0x20
#define LS_RX_BREAK         0x10
#define LS_RX_FRAMING_ERR   0x08
#define LS_RX_PARITY_ERR    0x04
#define LS_RX_OVERRUN       0x02
#define LS_RX_DATA_READY    0x01
#define LS_RX_ERRORS        ( LS_RX_FRAMING_ERR | LS_RX_PARITY_ERR | LS_RX_OVERRUN )

#define IoPortBase          ( (PUCHAR) COM1_BASE )


void OEMInitDebugSerial(void)
{
    WRITE_PORT_UCHAR(IoPortBase+comLineControl,  0x80); // Access Baud Divisor
    WRITE_PORT_UCHAR(IoPortBase+comDivisorLow,   0x03); // 38400
    WRITE_PORT_UCHAR(IoPortBase+comDivisorHigh,  0x00); //
    WRITE_PORT_UCHAR(IoPortBase+comFIFOControl,  0x01); // Enable FIFO
    WRITE_PORT_UCHAR(IoPortBase+comLineControl,  0x03); // 8 bit, no parity
    WRITE_PORT_UCHAR(IoPortBase+comIntEnable,    0x00); // Polled, no ints
    WRITE_PORT_UCHAR(IoPortBase+comModemControl, 0x03); // Assert DTR, RTS
}

void OEMWriteDebugString(PUSHORT str2)
{
    PUCHAR str = (PUCHAR)str2;

    while(*str)
    {
        while(!(READ_PORT_UCHAR(IoPortBase+comLineStatus) & LS_THR_EMPTY))
        {
            ;
        }
        WRITE_PORT_UCHAR(IoPortBase+comTxBuffer, (UCHAR)*str++);
    }
}

void OEMWriteDebugByte(BYTE ucChar)
{
    while(!(READ_PORT_UCHAR(IoPortBase+comLineStatus) & LS_THR_EMPTY))
    {
        ;
    }
    WRITE_PORT_UCHAR(IoPortBase+comTxBuffer, ucChar);
}

int OEMReadDebugByte(void)
{
    UCHAR   ucStatus;
    UCHAR   ucChar;

    ucStatus = READ_PORT_UCHAR(IoPortBase+comLineStatus);

    if (ucStatus & LS_RX_DATA_READY)
    {
        ucChar = READ_PORT_UCHAR(IoPortBase+comRxBuffer);

        if (ucStatus & LS_RX_ERRORS)
        {
            return(OEM_DEBUG_COM_ERROR);
        }
        else
        {
            return(ucChar);
        }
    }
    return(OEM_DEBUG_READ_NODATA);
}

int OEMReadDebugString(PUCHAR pBuff, ULONG nLen)
{
    int nChar=0;
    ULONG nCount=0;

    do
    {
        while((nChar = OEMReadDebugByte()) == OEM_DEBUG_READ_NODATA)
        {
            ;
        }
        if (nChar == OEM_DEBUG_COM_ERROR)
            return(nChar);

        if (nChar == BACKSPACE && nCount)
        {
            OEMWriteDebugByte((UCHAR)BACKSPACE);
            OEMWriteDebugByte((UCHAR)' ');
            OEMWriteDebugByte((UCHAR)BACKSPACE);
            --nCount;
        }
        else
        {
            *(pBuff + nCount) = (UCHAR)nChar;
            ++nCount;
            OEMWriteDebugByte((UCHAR)nChar);
        }
    }
    while(nCount < (nLen - 1) && (UCHAR)nChar != '\n' && (UCHAR)nChar != '\r');

    *(pBuff + nCount) = '\0';

    return(0);
}

void OEMClearDebugCommError(void)
{
    // Do nothing.
}

⌨️ 快捷键说明

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