mirror of
https://github.com/arduino/Arduino.git
synced 2025-03-04 01:29:18 +01:00
78 lines
2.4 KiB
C++
78 lines
2.4 KiB
C++
/*
|
|
Copyright (c) 2011 Arduino. All right reserved.
|
|
|
|
This library is free software; you can redistribute it and/or
|
|
modify it under the terms of the GNU Lesser General Public
|
|
License as published by the Free Software Foundation; either
|
|
version 2.1 of the License, or (at your option) any later version.
|
|
|
|
This library is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
See the GNU Lesser General Public License for more details.
|
|
|
|
You should have received a copy of the GNU Lesser General Public
|
|
License along with this library; if not, write to the Free Software
|
|
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
*/
|
|
|
|
#ifndef _UART_CLASS_
|
|
#define _UART_CLASS_
|
|
|
|
#include "HardwareSerial.h"
|
|
#include "RingBuffer.h"
|
|
|
|
// Includes Atmel CMSIS
|
|
#include <chip.h>
|
|
|
|
#define SERIAL_8N1 UARTClass::Mode_8N1
|
|
#define SERIAL_8E1 UARTClass::Mode_8E1
|
|
#define SERIAL_8O1 UARTClass::Mode_8O1
|
|
#define SERIAL_8M1 UARTClass::Mode_8M1
|
|
#define SERIAL_8S1 UARTClass::Mode_8S1
|
|
|
|
|
|
class UARTClass : public HardwareSerial
|
|
{
|
|
public:
|
|
enum UARTModes {
|
|
Mode_8N1 = US_MR_CHRL_8_BIT | US_MR_NBSTOP_1_BIT | UART_MR_PAR_NO,
|
|
Mode_8E1 = US_MR_CHRL_8_BIT | US_MR_NBSTOP_1_BIT | UART_MR_PAR_EVEN,
|
|
Mode_8O1 = US_MR_CHRL_8_BIT | US_MR_NBSTOP_1_BIT | UART_MR_PAR_ODD,
|
|
Mode_8M1 = US_MR_CHRL_8_BIT | US_MR_NBSTOP_1_BIT | UART_MR_PAR_MARK,
|
|
Mode_8S1 = US_MR_CHRL_8_BIT | US_MR_NBSTOP_1_BIT | UART_MR_PAR_SPACE,
|
|
};
|
|
UARTClass(Uart* pUart, IRQn_Type dwIrq, uint32_t dwId, RingBuffer* pRx_buffer, RingBuffer* pTx_buffer);
|
|
|
|
void begin(const uint32_t dwBaudRate);
|
|
void begin(const uint32_t dwBaudRate, const UARTModes config);
|
|
void end(void);
|
|
int available(void);
|
|
int availableForWrite(void);
|
|
int peek(void);
|
|
int read(void);
|
|
void flush(void);
|
|
size_t write(const uint8_t c);
|
|
using Print::write; // pull in write(str) and write(buf, size) from Print
|
|
|
|
void setInterruptPriority(uint32_t priority);
|
|
uint32_t getInterruptPriority();
|
|
|
|
void IrqHandler(void);
|
|
|
|
operator bool() { return true; }; // UART always active
|
|
|
|
protected:
|
|
void init(const uint32_t dwBaudRate, const uint32_t config);
|
|
|
|
RingBuffer *_rx_buffer;
|
|
RingBuffer *_tx_buffer;
|
|
|
|
Uart* _pUart;
|
|
IRQn_Type _dwIrq;
|
|
uint32_t _dwId;
|
|
|
|
};
|
|
|
|
#endif // _UART_CLASS_
|