四极管:串口驱动的具体开发(二)
2012-03-02 08:48
169 查看
来源于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的详细描述见表:
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寄存器。
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_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寄存器。
相关文章推荐
- 四极管:串口驱动的具体开发(三)
- 四极管:串口驱动的具体开发(一)
- 四极管:串口驱动的具体开发(四)
- linux UART串口驱动开发文档
- Linux驱动开发之 四 (那些必须要了解的硬件知识 之 串口)
- S5PV210开发 -- 串口驱动开发
- windows驱动开发之过滤串口
- 【工业串口和网络软件通讯平台(SuperIO)教程】七.二次开发服务驱动
- linux UART串口驱动开发文档
- 串口驱动开发
- 【工业串口和网络软件通讯平台(SuperIO)教程】七.二次开发服务驱动
- 具体解释linux下的串口通讯开发
- 【工业串口和网络软件通讯平台(SuperIO)教程】四.开发设备驱动
- ZYNQ QNX开发——PL串口设备驱动遇到的问题
- NRF52832开发:普通串口驱动
- 【工业串口和网络软件通讯平台(SuperIO)教程】四.开发设备驱动
- linux UART串口驱动开发文档
- AT91SAM9263 WINCE 6.0 R2驱动开发-扩展4个串口芯片SC16C554驱动
- 《连载 | 物联网框架ServerSuperIO教程》-4.如开发一套设备驱动,同时支持串口和网络通讯。附:将来支持Windows 10 IOT
- RTX实时操作系统下对串口的驱动开发