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

📄 xsc16550.h

📁 老外的一个开源项目
💻 H
字号:
// Copyright (c) David Vescovi.  All rights reserved.
// Part of Project DrumStix
// Windows Embedded Developers Interest Group (WE-DIG) community project.
// http://www.we-dig.org
// 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:  

Abstract:

    Platform dependent Serial definitions for XSCALE 16550 controller.

Notes: 
--*/
#ifndef __XSC16550_H_
#define __XSC16550_H_

#include "pdd16550.h"

class CXSCReg16550: public CReg16550 {
public:
    CXSCReg16550(PUART_REG_T pRegAddr);
    virtual BOOL    Init() { return (m_pReg!=NULL); } ;
    // We do not virtual Read & Write data because of Performance Concern.
    virtual void    Write_DATA(UINT8 uData) { WRITE_REGISTER_ULONG( (PULONG)m_pData, uData); };
    virtual UINT8   Read_Data() { return (UCHAR)READ_REGISTER_ULONG((PULONG)m_pData); } ;
    virtual void    Write_IER(UINT8 uData) { WRITE_REGISTER_ULONG((PULONG)m_pIER, uData); };
    virtual UINT8   Read_IER() { return (UCHAR)READ_REGISTER_ULONG((PULONG)m_pIER); };
    virtual void    Write_FCR(UINT8 uData) { WRITE_REGISTER_ULONG( (PULONG)m_pIIR_FCR, uData);m_FCR = uData; };
    virtual UINT8   Read_FCR() { return m_FCR; };
    virtual UINT8   Read_IIR() { return (UCHAR)READ_REGISTER_ULONG( (PULONG)m_pIIR_FCR) ;};
    virtual void    Write_LCR(UINT8 uData) { WRITE_REGISTER_ULONG( (PULONG)m_pLCR, uData);};
    virtual UINT8   Read_LCR() { return (UCHAR)READ_REGISTER_ULONG( (PULONG)m_pLCR);};
    virtual void    Write_MCR(UINT8 uData) { WRITE_REGISTER_ULONG( (PULONG)m_pMCR, uData);};
    virtual UINT8   Read_MCR() { return (UCHAR) READ_REGISTER_ULONG( (PULONG)m_pMCR );};
    virtual void    Write_LSR(UINT8 uData) { WRITE_REGISTER_ULONG( (PULONG)m_pLSR, uData);};
    virtual UINT8   Read_LSR() { return (UCHAR) READ_REGISTER_ULONG( (PULONG)m_pLSR );};
    virtual void    Write_MSR(UINT8 uData) { WRITE_REGISTER_ULONG( (PULONG)m_pMSR, uData) ; };
    virtual UINT8   Read_MSR() { return (UCHAR) READ_REGISTER_ULONG( (PULONG)m_pMSR); };
    virtual void    Write_SCR(UINT8 uData) { WRITE_REGISTER_ULONG( (PULONG)m_pSRC, uData );};
    virtual UINT8   Read_SCR() { return (UCHAR) READ_REGISTER_ULONG( (PULONG)m_pSRC); };

    virtual void    Backup();
    virtual void    Restore();
// Here is specific for the XSCALE IR
    virtual void    Write_SIR(UINT8 uData) { WRITE_REGISTER_ULONG( (PULONG)&(m_pRegAddr->ISR), uData);};
    virtual UINT8   Read_SIR() { return (UCHAR) READ_REGISTER_ULONG( (PULONG)&(m_pRegAddr->ISR)); };
private:
    PUART_REG_T m_pRegAddr;
    BYTE    m_SIRBackup;

};

#define PC_REG_SERIALIRCONNECTED_VAL_NAME TEXT("IRConnected")
#define PC_REG_SERIALIRCONNECTED_VAL_LEN  sizeof(DWORD)
class CXSCPdd16550: public CPdd16550 {
public:
    CXSCPdd16550 (LPTSTR lpActivePath, PVOID pMdd, PHWOBJ pHwObj);
    virtual ~CXSCPdd16550();
    virtual BOOL Init();
    virtual BOOL Open();
    virtual BOOL Close();
    virtual BOOL MapHardware();
    virtual BOOL CreateHardwareAccess();
    CXSCReg16550 *GetRegister() { return (CXSCReg16550 *)m_pReg16550; };
protected:
    volatile PUART_REG_T  m_pBaseAddress;
    volatile PGPIO_REG_T  m_pGPIOReg;
    volatile PCLK_REG_T   m_pDCCLKReg;
// Power Callback.
    virtual void    SerialRegisterBackup() ;
// Received.
public:
    virtual DWORD   GetWaterMark();
    virtual BYTE    GetWaterMarkBit();
// Xmit
public:
    virtual BOOL    EnableXmitInterrupt(BOOL fEnable);
    virtual void    XmitInterruptHandler(PUCHAR pTxBuffer, ULONG *pBuffLen);
    virtual void    XmitComChar(UCHAR ComChar);
    virtual DWORD   GetCanWriteByte();
// IR 
    virtual BOOL    InitIR(BOOL bSet);
    virtual void    SetOutputMode(BOOL UseIR, BOOL Use9Pin);
// Configuration 
    virtual BOOL    GetDivisorOfRate(ULONG BaudRate,PULONG pulDivisor);
    virtual BOOL    SetDCB(LPDCB lpDCB);
protected:
    BOOL Enable_IR_Rx_Tx(BOOL Rxenable, BOOL Txenable);
    BOOL m_fIRConnected;
};

#endif

⌨️ 快捷键说明

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