来源于Windows CE工程实践完全解析
CPdd2416Uart类有一个CReg2416Uart指针类型的数据成员m_pReg2416Uart。CReg2416Uart是一个类,它的抽象意义是S3C2416的UART端口控制器SFR寄存器集以及对它们的读写操作方法。在串口驱动的程序PDD层中,所有对UART端口内部寄存器的读写访问都是通过这个m_pReg2416Uart数据成员实现的,但是它们不会直接读写m_pReg2416Uart成员所指向的寄存器,而是通过CReg2416Uart类的成员函数。CReg2416Uart类的头文件定义如下(C:\WINCE500\PLATFORM\SMDK2416\Src\Drivers\Serial\pdds3c2416_ser.h):
class CReg2416Uart {
public:
CReg2416Uart(PULONG pRegAddr);
virtual ~CReg2416Uart() { ; };
virtual BOOL Init() ;
// We do not virtual Read & Write data because of Performance Concern.
void Write_ULCON(ULONG uData) { WRITE_REGISTER_ULONG( m_pReg, (uData)); };
ULONG Read_ULCON() { return (READ_REGISTER_ULONG(m_pReg)); } ;
void Write_UCON (ULONG uData) { WRITE_REGISTER_ULONG(m_pReg+1 , uData); };
ULONG Read_UCON() { return READ_REGISTER_ULONG(m_pReg+1 ); };
void Write_UFCON(ULONG uData) { WRITE_REGISTER_ULONG( m_pReg+2, uData);};
ULONG Read_UFCON() { return READ_REGISTER_ULONG(m_pReg + 2); };
void Write_UMCON(ULONG uData) { WRITE_REGISTER_ULONG(m_pReg + 3, uData);};
ULONG Read_UMCON() { return READ_REGISTER_ULONG(m_pReg + 3);};
ULONG Read_UTRSTAT() { return READ_REGISTER_ULONG(m_pReg + 4);};
ULONG Read_UERSTAT() { return READ_REGISTER_ULONG(m_pReg + 5);};
ULONG Read_UFSTAT() { return READ_REGISTER_ULONG(m_pReg + 6);};
ULONG Read_UMSTAT() { return READ_REGISTER_ULONG(m_pReg + 7);};
void Write_UTXH (UINT8 uData) { WRITE_REGISTER_ULONG( (m_pReg + 8), uData) ; };
UINT8 Read_URXH() { return (UINT8) READ_REGISTER_ULONG(m_pReg + 9); };
void Write_UBRDIV(ULONG uData) { WRITE_REGISTER_ULONG( m_pReg + 10, uData );};
ULONG Read_UBRDIV() { return READ_REGISTER_ULONG(m_pReg + 10); };
void Write_UDIVSLOT(ULONG uData) { WRITE_REGISTER_ULONG( (m_pReg + 11), uData) ; };
ULONG Read_UDIVSLOT() { return READ_REGISTER_ULONG(m_pReg + 11); };
virtual BOOL Write_BaudRate(ULONG uData);
PULONG GetRegisterVirtualAddr() { return m_pReg; };
virtual void Backup();
virtual void Restore();
#ifdef DEBUG
virtual void DumpRegister();
#endif
protected:
volatile PULONG const m_pReg;
BOOL m_fIsBackedUp;
private:
ULONG m_ULCONBackup;
ULONG m_UCONBackup;
ULONG m_UFCONBackup;
ULONG m_UMCOMBackup;
ULONG m_UBRDIVBackup;
ULONG m_UDIVSLOTBackup;
ULONG m_BaudRate;
ULONG m_s3c2416_pclk;
};
Read_ULCON和Write_ULCON两个成员函数用于读写S3C2416芯片的UART端口的线路控制寄存器ULCON。线路控制寄存器在寄存器块中的便宜地址为0,3个线路控制寄存器ULCON0、ULCON1、ULCON2(片内系统物理地址分别是0x50000000、0x50004000和0x50008000)分别为ULCON0、ULCON1、ULCON2(片内系统物理地址分别是0X50000000、0X50004000和0X50008000)分别为UART0、UART1和UART2这三个串口端口服务。线路控制寄存器用于控制串口的接受发送数据帧的比特构成,包括:数据位数、停止位数、是否启用校验位和校验的方式以及是否使用红外收发模式。对线路控制寄存器ULCON的详细描述见表:
ULCON的位 |
取值 |
描述 |
ULCON[1:0] |
00 |
没帧有5个数据位 |
01 |
没帧有6个数据位 |
|
10 |
没帧有7个数据位 |
|
11 |
没帧有8个数据位 |
|
ULCON[2] |
0 |
没帧有1个停止位 |
1 |
没帧有2个停止位 |
|
ULCON[5:3] |
0XX |
无校验 |
100 |
奇校验 |
|
101 |
偶校验 |
|
110 |
校验位全为1 |
|
110 |
校验位全为0 |
|
ULCON[6] |
0 |
普通模式收发 |
1 |
红外模式收发 |
|
ULCON[31:7] |
X |
保留未使用 |
Read_UCON和Write_UCON成员函数用于读写串口控制寄存器UCON。
Read_UFCON和Write_UFCON成员函数用于读写串口的FIFO控制寄存器UFCON。
成员函数Read_UMCON和Write_UMCON用于读写串口的MODEM控制器UMCON。
Read_UTRSTAT成员函数的功能是读取串口的收发状态寄存器UTRSTAT。
Read_UERSTAT成员函数用于读取串口的错误状态寄存器UERSTAT。
Read_UFSTAT成员函数用于读取串口的FIFO状态寄存器UFSTAT。
Read_UMSTAT成员函数用于读取串口的MODEM状态寄存器UMSTAT。
Read_URXH和Write_UTXH成员函数的功能分别是读取串口的接收数据端口寄存器URXH和写入串口的发送数据端口寄存器UTXH。
Read_UBRDIV和Read_UBRDIV成员函数的功能是读写串口的UBRDIV寄存器。