您的位置:首页 > 其它

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

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的详细描述见表:

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寄存器。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  wince windows c