117 lines
2.4 KiB
C++
117 lines
2.4 KiB
C++
/*
|
|
* File: UFSerialUart.h
|
|
* Author: danielv
|
|
* Note: this class only works with the 950 UARTs
|
|
*
|
|
* Created on March 5, 2009, 9:30 AM
|
|
*/
|
|
|
|
#ifndef __UFSERIALUART_H__
|
|
#define __UFSERIALUART_H__
|
|
|
|
#include <sys/io.h>
|
|
|
|
|
|
//
|
|
// UART registers
|
|
// Note: don't use outside this the UFSerialUART class
|
|
//
|
|
#define THR (this->UARTPortAddress) // Write
|
|
#define RHR (this->UARTPortAddress) // Read
|
|
|
|
#define IER (this->UARTPortAddress + 1)
|
|
|
|
#define ISR (this->UARTPortAddress + 2) // Read
|
|
#define FCR (this->UARTPortAddress + 2) // Write
|
|
|
|
#define LCR (this->UARTPortAddress + 3)
|
|
#define MCR (this->UARTPortAddress + 4)
|
|
#define LSR (this->UARTPortAddress + 5)
|
|
#define MSR (this->UARTPortAddress + 6)
|
|
#define SPR (this->UARTPortAddress + 7)
|
|
|
|
#define DLL (this->UARTPortAddress) // DLAB = 1 (LCR[7])
|
|
#define DLM (this->UARTPortAddress + 1) // DLAB = 1
|
|
|
|
#define EFR (this->UARTPortAddress + 2)
|
|
#define ICR (this->UARTPortAddress + 5)
|
|
|
|
|
|
class UFSerialUART
|
|
{
|
|
private:
|
|
unsigned int UARTPortAddress;
|
|
bool NineBitMode;
|
|
bool KernelPermission;
|
|
|
|
private:
|
|
|
|
// DLAB Set/Clear
|
|
inline void SetDLAB();
|
|
inline void ClearDLAB();
|
|
|
|
public:
|
|
|
|
// Default constructor/destructor
|
|
UFSerialUART(unsigned int address);
|
|
virtual ~UFSerialUART();
|
|
|
|
// Get UART initialisation status
|
|
bool IsUARTInitialised();
|
|
|
|
// Set/Get UART port address
|
|
void SetUARTPortAddress(unsigned int address);
|
|
unsigned int GetUARTPortAddress();
|
|
|
|
// Clear FIFOs
|
|
void ClearTxFifo();
|
|
void ClearRxFifo();
|
|
|
|
// Set Frequency Divider
|
|
void SetFrequencyDivider(unsigned short newDivider);
|
|
|
|
// Set Parity
|
|
void DisableParity();
|
|
void SetLowParity();
|
|
void SetHighParity();
|
|
void SetEvenParity();
|
|
void SetOddParity();
|
|
|
|
// Set Data Length
|
|
void SetFiveBitsLength();
|
|
void SetSixBitsLength();
|
|
void SetSevenBitsLength();
|
|
void SetEightBitsLength();
|
|
|
|
// Enable/disable usage of FIFOs
|
|
void EnableFifos();
|
|
void DisableFifos();
|
|
|
|
// Select number of stop bits
|
|
void SelectOneStopBit();
|
|
void SelectTwoStopBits();
|
|
|
|
// Select operation mode
|
|
void Select950Mode();
|
|
|
|
// Enable/Disable 9-bit mode
|
|
void Enable9BitMode();
|
|
void Disable9BitMode();
|
|
|
|
// Configure LCR: 8-bits, 1 stop bit, keep the rest of the byte
|
|
// TODO: delete this method, it is not needed anymore
|
|
void ConfigureLCR();
|
|
|
|
// Check if there is data waiting to be read
|
|
bool IsDataAvailable();
|
|
|
|
// Send/receive value
|
|
bool SendValue(unsigned short value);
|
|
bool ReadValue(unsigned short &value);
|
|
|
|
};
|
|
|
|
|
|
#endif /* __UFSERIALUART_H__ */
|
|
|