📄 bul16550.h
字号:
//
// 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 __BUL16550_H_
#define __BUL16550_H_
#include <bulverde_uart.h>
#define BUL_SERIAL_FIFO_DEPTH 64
// For Bulverde only
// Extended EIR
//
#define BUL_SERIAL_IER_RTOIE 0x10
#define BUL_SERIAL_IER_NRZE 0x20
#define BUL_SERIAL_IER_UUE 0x40
#define BUL_SERIAL_IER_DMAE 0x80
// Bulverde 16550 Register Extra Bit.
//Additonal Bulvderde bits
#define SERIAL_FCR_TX_INTR_LEVEL ((UCHAR)0x08)
#define SERIAL_FCR_TRAILING_BYTES ((UCHAR)0x10)
#define SERIAL_FCR_PERIPHERAL_BUS ((UCHAR)0x20)
//For Bulverde only:
#define BUL_SLOW_IR_SELECT_REGISTER 0x08
//The following macros are used in IR mode only
//To enable Transmitter SIR
#define INFRARED_ISR_TRANSMIT_SIR_ENABLE (0x01)
//To enable Receiver SIR
#define INFRARED_ISR_RECEIVE_SIR_ENABLE (0x02)
//To select Transmit Pulse Width
//If 1, the transmit pulse width is 1.6us.
//If 0, it is 3/16 of a bit time width.
#define INFRARED_ISR_XMODE (0x04)
//Transmit Data Polarity:
//If 1, negative pulse is generated for a zero data bit.
//If 0, a positive pulse is generated for a zero data bit.
#define INFRARED_ISR_TX_DATA_POLARITY (0x08)
//Receive Data Polarity:
//If 1, a negative pulse is taken as a zero data bit.
//If 0, a positive pulse is taken as a zero data bit.
#define INFRARED_ISR_RX_DATA_POLARITY (0x10)
#include "pdd16550.h"
class CBulReg16550: public CReg16550 {
public:
CBulReg16550(PBULVERDE_UART_REG pRegAddr);
virtual BOOL Init() { return (m_pRegAddr!=NULL); } ;
// We do not virtual Read & Write data because of Performance Concern.
virtual void Write_DATA(UINT8 uData) { WRITE_REGISTER_ULONG((PULONG) &(m_pRegAddr->thr_rbr_dll), uData); };
virtual UINT8 Read_Data() { return (UCHAR)READ_REGISTER_ULONG((PULONG)&(m_pRegAddr->thr_rbr_dll)); } ;
virtual void Write_IER(UINT8 uData) { WRITE_REGISTER_ULONG((PULONG)&(m_pRegAddr->ier_dlh), uData); };
virtual UINT8 Read_IER() { return (UCHAR)READ_REGISTER_ULONG((PULONG)&(m_pRegAddr->ier_dlh)); };
virtual void Write_FCR(UINT8 uData) { WRITE_REGISTER_ULONG( (PULONG)&(m_pRegAddr->iir_fcr), uData);m_FCR = uData; };
virtual UINT8 Read_FCR() { return m_FCR; };
virtual UINT8 Read_IIR() { return (UCHAR)READ_REGISTER_ULONG( (PULONG)&(m_pRegAddr->iir_fcr)) ;};
virtual void Write_LCR(UINT8 uData) { WRITE_REGISTER_ULONG( (PULONG)&(m_pRegAddr->lcr), uData);};
virtual UINT8 Read_LCR() { return (UCHAR)READ_REGISTER_ULONG( (PULONG)&(m_pRegAddr->lcr));};
virtual void Write_MCR(UINT8 uData) { WRITE_REGISTER_ULONG( (PULONG)&(m_pRegAddr->mcr), uData);};
virtual UINT8 Read_MCR() { return (UCHAR) READ_REGISTER_ULONG( (PULONG)&(m_pRegAddr->mcr) );};
virtual void Write_LSR(UINT8 uData) { WRITE_REGISTER_ULONG( (PULONG)&(m_pRegAddr->lsr), uData);};
virtual UINT8 Read_LSR() { return (UCHAR) READ_REGISTER_ULONG( (PULONG)&(m_pRegAddr->lsr) );};
virtual void Write_MSR(UINT8 uData) { WRITE_REGISTER_ULONG( (PULONG)&(m_pRegAddr->msr), uData) ; };
virtual UINT8 Read_MSR() { return (UCHAR) READ_REGISTER_ULONG( (PULONG)&(m_pRegAddr->msr)); };
virtual void Write_SCR(UINT8 uData) { WRITE_REGISTER_ULONG( (PULONG)&(m_pRegAddr->scr), uData );};
virtual UINT8 Read_SCR() { return (UCHAR) READ_REGISTER_ULONG( (PULONG)&(m_pRegAddr->scr)); };
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->irdasel), uData);};
virtual UINT8 Read_SIR() { return (UCHAR) READ_REGISTER_ULONG( (PULONG)&(m_pRegAddr->irdasel)); };
// Here is specific for the Bulverde
virtual UINT8 Read_FIOR() { return (UCHAR) READ_REGISTER_ULONG( (PULONG)&(m_pRegAddr->fior)); };
virtual UINT8 Read_ABR() { return (UCHAR) READ_REGISTER_ULONG( (PULONG)&(m_pRegAddr->abr));};
virtual void Write_ABR(UINT8 uData) { WRITE_REGISTER_ULONG( (PULONG)&(m_pRegAddr->abr),uData);};
private:
PBULVERDE_UART_REG m_pRegAddr;
BYTE m_SIRBackup;
};
#define PC_REG_SERIALIRCONNECTED_VAL_NAME TEXT("IRConnected")
#define PC_REG_SERIALIRCONNECTED_VAL_LEN sizeof(DWORD)
class CBulPdd16550: public CPdd16550 {
public:
CBulPdd16550 (LPTSTR lpActivePath, PVOID pMdd, PHWOBJ pHwObj);
virtual ~CBulPdd16550();
virtual BOOL Init();
virtual BOOL Open();
virtual BOOL Close();
virtual BOOL MapHardware();
virtual BOOL CreateHardwareAccess();
CBulReg16550 *GetRegister() { return (CBulReg16550 *)m_pReg16550; };
protected:
volatile PBULVERDE_UART_REG m_pBaseAddress;
volatile PBULVERDE_GPIO_REG m_pGPIOReg;
volatile PBULVERDE_CLKMGR_REG 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 + -