“Cores:HardwareSerial.h”的版本间的差异
来自YFRobotwiki
(以“<font color="quartz" size ="+2"> '''HardwareSerial.h''' </font> <pre style="color:royalblue"> /* HardwareSerial.h - Hardware serial library for Wiring Copyright...”为内容创建页面) |
(没有差异)
|
2015年7月10日 (五) 19:25的最后版本
HardwareSerial.h
/* HardwareSerial.h - Hardware serial library for Wiring Copyright (c) 2006 Nicholas Zambetti. 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 Modified 28 September 2010 by Mark Sproul Modified 14 August 2012 by Alarus Modified 3 December 2013 by Matthijs Kooijman */ #ifndef HardwareSerial_h #define HardwareSerial_h #include <inttypes.h> #include "Stream.h" // Define constants and variables for buffering incoming serial data. We're // using a ring buffer (I think), in which head is the index of the location // to which to write the next incoming character and tail is the index of the // location from which to read. // NOTE: a "power of 2" buffer size is reccomended to dramatically // optimize all the modulo operations for ring buffers. #if !(defined(SERIAL_TX_BUFFER_SIZE) && defined(SERIAL_RX_BUFFER_SIZE)) #if (RAMEND < 1000) #define SERIAL_TX_BUFFER_SIZE 16 #define SERIAL_RX_BUFFER_SIZE 16 #else #define SERIAL_TX_BUFFER_SIZE 64 #define SERIAL_RX_BUFFER_SIZE 64 #endif #endif #if (SERIAL_TX_BUFFER_SIZE>256) typedef uint16_t tx_buffer_index_t; #else typedef uint8_t tx_buffer_index_t; #endif #if (SERIAL_RX_BUFFER_SIZE>256) typedef uint16_t rx_buffer_index_t; #else typedef uint8_t rx_buffer_index_t; #endif // Define config for Serial.begin(baud, config); #define SERIAL_5N1 0x00 #define SERIAL_6N1 0x02 #define SERIAL_7N1 0x04 #define SERIAL_8N1 0x06 #define SERIAL_5N2 0x08 #define SERIAL_6N2 0x0A #define SERIAL_7N2 0x0C #define SERIAL_8N2 0x0E #define SERIAL_5E1 0x20 #define SERIAL_6E1 0x22 #define SERIAL_7E1 0x24 #define SERIAL_8E1 0x26 #define SERIAL_5E2 0x28 #define SERIAL_6E2 0x2A #define SERIAL_7E2 0x2C #define SERIAL_8E2 0x2E #define SERIAL_5O1 0x30 #define SERIAL_6O1 0x32 #define SERIAL_7O1 0x34 #define SERIAL_8O1 0x36 #define SERIAL_5O2 0x38 #define SERIAL_6O2 0x3A #define SERIAL_7O2 0x3C #define SERIAL_8O2 0x3E class HardwareSerial : public Stream { protected: volatile uint8_t * const _ubrrh; volatile uint8_t * const _ubrrl; volatile uint8_t * const _ucsra; volatile uint8_t * const _ucsrb; volatile uint8_t * const _ucsrc; volatile uint8_t * const _udr; // Has any byte been written to the UART since begin() bool _written; volatile rx_buffer_index_t _rx_buffer_head; volatile rx_buffer_index_t _rx_buffer_tail; volatile tx_buffer_index_t _tx_buffer_head; volatile tx_buffer_index_t _tx_buffer_tail; // Don't put any members after these buffers, since only the first // 32 bytes of this struct can be accessed quickly using the ldd // instruction. unsigned char _rx_buffer[SERIAL_RX_BUFFER_SIZE]; unsigned char _tx_buffer[SERIAL_TX_BUFFER_SIZE]; public: inline HardwareSerial( volatile uint8_t *ubrrh, volatile uint8_t *ubrrl, volatile uint8_t *ucsra, volatile uint8_t *ucsrb, volatile uint8_t *ucsrc, volatile uint8_t *udr); void begin(unsigned long baud) { begin(baud, SERIAL_8N1); } void begin(unsigned long, uint8_t); void end(); virtual int available(void); virtual int peek(void); virtual int read(void); int availableForWrite(void); virtual void flush(void); virtual size_t write(uint8_t); inline size_t write(unsigned long n) { return write((uint8_t)n); } inline size_t write(long n) { return write((uint8_t)n); } inline size_t write(unsigned int n) { return write((uint8_t)n); } inline size_t write(int n) { return write((uint8_t)n); } using Print::write; // pull in write(str) and write(buf, size) from Print operator bool() { return true; } // Interrupt handlers - Not intended to be called externally inline void _rx_complete_irq(void); void _tx_udr_empty_irq(void); }; #if defined(UBRRH) || defined(UBRR0H) extern HardwareSerial Serial; #define HAVE_HWSERIAL0 #endif #if defined(UBRR1H) extern HardwareSerial Serial1; #define HAVE_HWSERIAL1 #endif #if defined(UBRR2H) extern HardwareSerial Serial2; #define HAVE_HWSERIAL2 #endif #if defined(UBRR3H) extern HardwareSerial Serial3; #define HAVE_HWSERIAL3 #endif extern void serialEventRun(void) __attribute__((weak)); #endif
更多建议和问题欢迎反馈至 YFRobot论坛