📄 xsc16550.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 + -