Files
beaglefw/uart.hh

52 lines
970 B
C++

#ifndef _UART_HH_
#define _UART_HH_
#include <cstdint>
#include <memory>
class OMAP35x_prcm;
class ICharacterDevice {
public:
virtual void write(char const* data, int const& len) = 0;
virtual int read(char *buf, int const& len) = 0;
};
class UART_impl;
class UART : public ICharacterDevice {
public:
UART(uintptr_t base, int irq, OMAP35x_prcm& prcm);
~UART();
virtual void write(char const* data, int const& len);
virtual int read(char *buf, int const& len);
private:
std::unique_ptr<UART_impl> impl_;
};
class EarlyUART : public ICharacterDevice {
public:
EarlyUART() {}
~EarlyUART() {}
virtual void write(char const* data, int const& len);
virtual int read(char *buf, int const& len);
private:
void _wait_txnotfull();
void _wait_rxnotempty();
void sendb(char b);
char recvb();
uint8_t volatile& r_data();
uint8_t volatile& r_lsr();
uint8_t volatile& r_ssr();
static const uintptr_t base_ = 0xfffff000;
};
#endif