You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

пре 11 година
пре 11 година
пре 11 година
пре 11 година
пре 11 година
пре 11 година
пре 11 година
пре 11 година
пре 11 година
пре 11 година
пре 11 година
пре 11 година
пре 11 година
пре 11 година
пре 11 година
пре 11 година
пре 11 година
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225
  1. /* Teensyduino Core Library
  2. * http://www.pjrc.com/teensy/
  3. * Copyright (c) 2013 PJRC.COM, LLC.
  4. *
  5. * Permission is hereby granted, free of charge, to any person obtaining
  6. * a copy of this software and associated documentation files (the
  7. * "Software"), to deal in the Software without restriction, including
  8. * without limitation the rights to use, copy, modify, merge, publish,
  9. * distribute, sublicense, and/or sell copies of the Software, and to
  10. * permit persons to whom the Software is furnished to do so, subject to
  11. * the following conditions:
  12. *
  13. * 1. The above copyright notice and this permission notice shall be
  14. * included in all copies or substantial portions of the Software.
  15. *
  16. * 2. If the Software is incorporated into a build system that allows
  17. * selection among a list of target devices, then similar target
  18. * devices manufactured by PJRC.COM must be included in the list of
  19. * target devices and selectable in the same manner.
  20. *
  21. * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
  22. * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  23. * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
  24. * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
  25. * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
  26. * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
  27. * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  28. * SOFTWARE.
  29. */
  30. #ifndef HardwareSerial_h
  31. #define HardwareSerial_h
  32. #include "mk20dx128.h"
  33. #include <inttypes.h>
  34. // uncomment to enable 9 bit formats
  35. //#define SERIAL_9BIT_SUPPORT
  36. #define SERIAL_7E1 0x02
  37. #define SERIAL_7O1 0x03
  38. #define SERIAL_8N1 0x00
  39. #define SERIAL_8N2 0x04
  40. #define SERIAL_8E1 0x06
  41. #define SERIAL_8O1 0x07
  42. #define SERIAL_7E1_RXINV 0x12
  43. #define SERIAL_7O1_RXINV 0x13
  44. #define SERIAL_8N1_RXINV 0x10
  45. #define SERIAL_8N2_RXINV 0x14
  46. #define SERIAL_8E1_RXINV 0x16
  47. #define SERIAL_8O1_RXINV 0x17
  48. #define SERIAL_7E1_TXINV 0x22
  49. #define SERIAL_7O1_TXINV 0x23
  50. #define SERIAL_8N1_TXINV 0x20
  51. #define SERIAL_8N2_TXINV 0x24
  52. #define SERIAL_8E1_TXINV 0x26
  53. #define SERIAL_8O1_TXINV 0x27
  54. #define SERIAL_7E1_RXINV_TXINV 0x32
  55. #define SERIAL_7O1_RXINV_TXINV 0x33
  56. #define SERIAL_8N1_RXINV_TXINV 0x30
  57. #define SERIAL_8N2_RXINV_TXINV 0x34
  58. #define SERIAL_8E1_RXINV_TXINV 0x36
  59. #define SERIAL_8O1_RXINV_TXINV 0x37
  60. #ifdef SERIAL_9BIT_SUPPORT
  61. #define SERIAL_9N1 0x84
  62. #define SERIAL_9E1 0x8E
  63. #define SERIAL_9O1 0x8F
  64. #define SERIAL_9N1_RXINV 0x94
  65. #define SERIAL_9E1_RXINV 0x9E
  66. #define SERIAL_9O1_RXINV 0x9F
  67. #define SERIAL_9N1_TXINV 0xA4
  68. #define SERIAL_9E1_TXINV 0xAE
  69. #define SERIAL_9O1_TXINV 0xAF
  70. #define SERIAL_9N1_RXINV_TXINV 0xB4
  71. #define SERIAL_9E1_RXINV_TXINV 0xBE
  72. #define SERIAL_9O1_RXINV_TXINV 0xBF
  73. #endif
  74. // bit0: parity, 0=even, 1=odd
  75. // bit1: parity, 0=disable, 1=enable
  76. // bit2: mode, 1=9bit, 0=8bit
  77. // bit3: mode10: 1=10bit, 0=8bit
  78. // bit4: rxinv, 0=normal, 1=inverted
  79. // bit5: txinv, 0=normal, 1=inverted
  80. // bit6: unused
  81. // bit7: actual data goes into 9th bit
  82. #define BAUD2DIV(baud) (((F_CPU * 2) + ((baud) >> 1)) / (baud))
  83. #define BAUD2DIV3(baud) (((F_BUS * 2) + ((baud) >> 1)) / (baud))
  84. // C language implementation
  85. //
  86. #ifdef __cplusplus
  87. extern "C" {
  88. #endif
  89. void serial_begin(uint32_t divisor);
  90. void serial_format(uint32_t format);
  91. void serial_end(void);
  92. void serial_putchar(uint32_t c);
  93. void serial_write(const void *buf, unsigned int count);
  94. void serial_flush(void);
  95. int serial_available(void);
  96. int serial_getchar(void);
  97. int serial_peek(void);
  98. void serial_clear(void);
  99. void serial_print(const char *p);
  100. void serial_phex(uint32_t n);
  101. void serial_phex16(uint32_t n);
  102. void serial_phex32(uint32_t n);
  103. void serial2_begin(uint32_t divisor);
  104. void serial2_format(uint32_t format);
  105. void serial2_end(void);
  106. void serial2_putchar(uint32_t c);
  107. void serial2_write(const void *buf, unsigned int count);
  108. void serial2_flush(void);
  109. int serial2_available(void);
  110. int serial2_getchar(void);
  111. int serial2_peek(void);
  112. void serial2_clear(void);
  113. void serial3_begin(uint32_t divisor);
  114. void serial3_format(uint32_t format);
  115. void serial3_end(void);
  116. void serial3_putchar(uint32_t c);
  117. void serial3_write(const void *buf, unsigned int count);
  118. void serial3_flush(void);
  119. int serial3_available(void);
  120. int serial3_getchar(void);
  121. int serial3_peek(void);
  122. void serial3_clear(void);
  123. #ifdef __cplusplus
  124. }
  125. #endif
  126. // C++ interface
  127. //
  128. #ifdef __cplusplus
  129. #include "Stream.h"
  130. class HardwareSerial : public Stream
  131. {
  132. public:
  133. virtual void begin(uint32_t baud) { serial_begin(BAUD2DIV(baud)); }
  134. virtual void begin(uint32_t baud, uint32_t format) {
  135. serial_begin(BAUD2DIV(baud));
  136. serial_format(format); }
  137. virtual void end(void) { serial_end(); }
  138. virtual int available(void) { return serial_available(); }
  139. virtual int peek(void) { return serial_peek(); }
  140. virtual int read(void) { return serial_getchar(); }
  141. virtual void flush(void) { serial_flush(); }
  142. virtual void clear(void) { serial_clear(); }
  143. virtual size_t write(uint8_t c) { serial_putchar(c); return 1; }
  144. size_t write(unsigned long n) { return write((uint8_t)n); }
  145. size_t write(long n) { return write((uint8_t)n); }
  146. size_t write(unsigned int n) { return write((uint8_t)n); }
  147. size_t write(int n) { return write((uint8_t)n); }
  148. virtual size_t write(const uint8_t *buffer, size_t size)
  149. { serial_write(buffer, size); return size; }
  150. size_t write(const char *str) { size_t len = strlen(str);
  151. serial_write((const uint8_t *)str, len);
  152. return len; }
  153. size_t write9bit(uint32_t c) { serial_putchar(c); return 1; }
  154. };
  155. extern HardwareSerial Serial1;
  156. class HardwareSerial2 : public HardwareSerial
  157. {
  158. public:
  159. virtual void begin(uint32_t baud) { serial2_begin(BAUD2DIV(baud)); }
  160. virtual void begin(uint32_t baud, uint32_t format) {
  161. serial2_begin(BAUD2DIV(baud));
  162. serial2_format(format); }
  163. virtual void end(void) { serial2_end(); }
  164. virtual int available(void) { return serial2_available(); }
  165. virtual int peek(void) { return serial2_peek(); }
  166. virtual int read(void) { return serial2_getchar(); }
  167. virtual void flush(void) { serial2_flush(); }
  168. virtual void clear(void) { serial2_clear(); }
  169. virtual size_t write(uint8_t c) { serial2_putchar(c); return 1; }
  170. size_t write(unsigned long n) { return write((uint8_t)n); }
  171. size_t write(long n) { return write((uint8_t)n); }
  172. size_t write(unsigned int n) { return write((uint8_t)n); }
  173. size_t write(int n) { return write((uint8_t)n); }
  174. virtual size_t write(const uint8_t *buffer, size_t size)
  175. { serial2_write(buffer, size); return size; }
  176. size_t write(const char *str) { size_t len = strlen(str);
  177. serial2_write((const uint8_t *)str, len);
  178. return len; }
  179. size_t write9bit(uint32_t c) { serial2_putchar(c); return 1; }
  180. };
  181. extern HardwareSerial2 Serial2;
  182. class HardwareSerial3 : public HardwareSerial
  183. {
  184. public:
  185. virtual void begin(uint32_t baud) { serial3_begin(BAUD2DIV3(baud)); }
  186. virtual void begin(uint32_t baud, uint32_t format) {
  187. serial3_begin(BAUD2DIV3(baud));
  188. serial3_format(format); }
  189. virtual void end(void) { serial3_end(); }
  190. virtual int available(void) { return serial3_available(); }
  191. virtual int peek(void) { return serial3_peek(); }
  192. virtual int read(void) { return serial3_getchar(); }
  193. virtual void flush(void) { serial3_flush(); }
  194. virtual void clear(void) { serial3_clear(); }
  195. virtual size_t write(uint8_t c) { serial3_putchar(c); return 1; }
  196. size_t write(unsigned long n) { return write((uint8_t)n); }
  197. size_t write(long n) { return write((uint8_t)n); }
  198. size_t write(unsigned int n) { return write((uint8_t)n); }
  199. size_t write(int n) { return write((uint8_t)n); }
  200. virtual size_t write(const uint8_t *buffer, size_t size)
  201. { serial3_write(buffer, size); return size; }
  202. size_t write(const char *str) { size_t len = strlen(str);
  203. serial3_write((const uint8_t *)str, len);
  204. return len; }
  205. size_t write9bit(uint32_t c) { serial3_putchar(c); return 1; }
  206. };
  207. extern HardwareSerial3 Serial3;
  208. #endif
  209. #endif