四极管:串口驱动的具体开发(二)

来源:互联网 发布:感康和泰诺 知乎 编辑:程序博客网 时间:2024/06/06 00:58

来源于Windows CE工程实践完全解析

CPdd2416Uart类有一个CReg2416Uart指针类型的数据成员m_pReg2416UartCReg2416Uart是一个类,它的抽象意义是S3C2416UART端口控制器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_ULCONWrite_ULCON两个成员函数用于读写S3C2416芯片的UART端口的线路控制寄存器ULCON。线路控制寄存器在寄存器块中的便宜地址为0,3个线路控制寄存器ULCON0ULCON1ULCON2(片内系统物理地址分别是0x500000000x500040000x50008000)分别为ULCON0ULCON1ULCON2(片内系统物理地址分别是0X500000000X500040000X50008000)分别为UART0UART1UART2这三个串口端口服务。线路控制寄存器用于控制串口的接受发送数据帧的比特构成,包括:数据位数、停止位数、是否启用校验位和校验的方式以及是否使用红外收发模式。对线路控制寄存器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_UCONWrite_UCON成员函数用于读写串口控制寄存器UCON

Read_UFCONWrite_UFCON成员函数用于读写串口的FIFO控制寄存器UFCON

成员函数Read_UMCONWrite_UMCON用于读写串口的MODEM控制器UMCON

Read_UTRSTAT成员函数的功能是读取串口的收发状态寄存器UTRSTAT

Read_UERSTAT成员函数用于读取串口的错误状态寄存器UERSTAT

Read_UFSTAT成员函数用于读取串口的FIFO状态寄存器UFSTAT

Read_UMSTAT成员函数用于读取串口的MODEM状态寄存器UMSTAT

Read_URXHWrite_UTXH成员函数的功能分别是读取串口的接收数据端口寄存器URXH和写入串口的发送数据端口寄存器UTXH

Read_UBRDIVRead_UBRDIV成员函数的功能是读写串口的UBRDIV寄存器。


原创粉丝点击