arduino_ci 0.1.3 → 0.1.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (295) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +77 -1
  3. data/cpp/arduino/Arduino.cpp +17 -7
  4. data/cpp/arduino/Arduino.h +151 -5
  5. data/cpp/arduino/ArduinoDefines.h +90 -0
  6. data/cpp/arduino/AvrMath.h +18 -28
  7. data/cpp/arduino/Godmode.cpp +62 -0
  8. data/cpp/arduino/Godmode.h +74 -0
  9. data/cpp/arduino/HardwareSerial.h +81 -0
  10. data/cpp/arduino/Print.h +67 -0
  11. data/cpp/arduino/Stream.h +210 -0
  12. data/cpp/arduino/WCharacter.h +96 -0
  13. data/cpp/arduino/WString.h +164 -0
  14. data/cpp/arduino/binary.h +518 -0
  15. data/cpp/arduino/include/README.md +3 -0
  16. data/cpp/arduino/include/common.h +333 -0
  17. data/cpp/arduino/include/fuse.h +274 -0
  18. data/cpp/arduino/include/io.h +643 -0
  19. data/cpp/arduino/include/io1200.h +274 -0
  20. data/cpp/arduino/include/io2313.h +385 -0
  21. data/cpp/arduino/include/io2323.h +210 -0
  22. data/cpp/arduino/include/io2333.h +461 -0
  23. data/cpp/arduino/include/io2343.h +214 -0
  24. data/cpp/arduino/include/io43u32x.h +440 -0
  25. data/cpp/arduino/include/io43u35x.h +432 -0
  26. data/cpp/arduino/include/io4414.h +500 -0
  27. data/cpp/arduino/include/io4433.h +489 -0
  28. data/cpp/arduino/include/io4434.h +588 -0
  29. data/cpp/arduino/include/io76c711.h +499 -0
  30. data/cpp/arduino/include/io8515.h +501 -0
  31. data/cpp/arduino/include/io8534.h +217 -0
  32. data/cpp/arduino/include/io8535.h +589 -0
  33. data/cpp/arduino/include/io86r401.h +309 -0
  34. data/cpp/arduino/include/io90pwm1.h +1157 -0
  35. data/cpp/arduino/include/io90pwm161.h +918 -0
  36. data/cpp/arduino/include/io90pwm216.h +1225 -0
  37. data/cpp/arduino/include/io90pwm2b.h +1466 -0
  38. data/cpp/arduino/include/io90pwm316.h +1272 -0
  39. data/cpp/arduino/include/io90pwm3b.h +1466 -0
  40. data/cpp/arduino/include/io90pwm81.h +1036 -0
  41. data/cpp/arduino/include/io90pwmx.h +1415 -0
  42. data/cpp/arduino/include/io90scr100.h +1719 -0
  43. data/cpp/arduino/include/ioa5272.h +803 -0
  44. data/cpp/arduino/include/ioa5505.h +803 -0
  45. data/cpp/arduino/include/ioa5702m322.h +2591 -0
  46. data/cpp/arduino/include/ioa5782.h +1843 -0
  47. data/cpp/arduino/include/ioa5790.h +907 -0
  48. data/cpp/arduino/include/ioa5790n.h +922 -0
  49. data/cpp/arduino/include/ioa5791.h +923 -0
  50. data/cpp/arduino/include/ioa5795.h +756 -0
  51. data/cpp/arduino/include/ioa5831.h +1949 -0
  52. data/cpp/arduino/include/ioa6285.h +740 -0
  53. data/cpp/arduino/include/ioa6286.h +740 -0
  54. data/cpp/arduino/include/ioa6289.h +847 -0
  55. data/cpp/arduino/include/ioa6612c.h +795 -0
  56. data/cpp/arduino/include/ioa6613c.h +795 -0
  57. data/cpp/arduino/include/ioa6614q.h +798 -0
  58. data/cpp/arduino/include/ioa6616c.h +865 -0
  59. data/cpp/arduino/include/ioa6617c.h +865 -0
  60. data/cpp/arduino/include/ioa664251.h +857 -0
  61. data/cpp/arduino/include/ioa8210.h +1843 -0
  62. data/cpp/arduino/include/ioa8510.h +1949 -0
  63. data/cpp/arduino/include/ioat94k.h +565 -0
  64. data/cpp/arduino/include/iocan128.h +100 -0
  65. data/cpp/arduino/include/iocan32.h +100 -0
  66. data/cpp/arduino/include/iocan64.h +100 -0
  67. data/cpp/arduino/include/iocanxx.h +2020 -0
  68. data/cpp/arduino/include/iom103.h +735 -0
  69. data/cpp/arduino/include/iom128.h +1299 -0
  70. data/cpp/arduino/include/iom1280.h +101 -0
  71. data/cpp/arduino/include/iom1281.h +101 -0
  72. data/cpp/arduino/include/iom1284.h +1099 -0
  73. data/cpp/arduino/include/iom1284p.h +1219 -0
  74. data/cpp/arduino/include/iom1284rfr2.h +2690 -0
  75. data/cpp/arduino/include/iom128a.h +1070 -0
  76. data/cpp/arduino/include/iom128rfa1.h +5385 -0
  77. data/cpp/arduino/include/iom128rfr2.h +2706 -0
  78. data/cpp/arduino/include/iom16.h +676 -0
  79. data/cpp/arduino/include/iom161.h +726 -0
  80. data/cpp/arduino/include/iom162.h +1022 -0
  81. data/cpp/arduino/include/iom163.h +686 -0
  82. data/cpp/arduino/include/iom164.h +101 -0
  83. data/cpp/arduino/include/iom164a.h +34 -0
  84. data/cpp/arduino/include/iom164p.h +34 -0
  85. data/cpp/arduino/include/iom164pa.h +1016 -0
  86. data/cpp/arduino/include/iom165.h +887 -0
  87. data/cpp/arduino/include/iom165a.h +832 -0
  88. data/cpp/arduino/include/iom165p.h +889 -0
  89. data/cpp/arduino/include/iom165pa.h +948 -0
  90. data/cpp/arduino/include/iom168.h +97 -0
  91. data/cpp/arduino/include/iom168a.h +35 -0
  92. data/cpp/arduino/include/iom168p.h +942 -0
  93. data/cpp/arduino/include/iom168pa.h +843 -0
  94. data/cpp/arduino/include/iom168pb.h +899 -0
  95. data/cpp/arduino/include/iom169.h +1174 -0
  96. data/cpp/arduino/include/iom169a.h +44 -0
  97. data/cpp/arduino/include/iom169p.h +1097 -0
  98. data/cpp/arduino/include/iom169pa.h +1485 -0
  99. data/cpp/arduino/include/iom16a.h +923 -0
  100. data/cpp/arduino/include/iom16hva.h +80 -0
  101. data/cpp/arduino/include/iom16hva2.h +883 -0
  102. data/cpp/arduino/include/iom16hvb.h +1052 -0
  103. data/cpp/arduino/include/iom16hvbrevb.h +1052 -0
  104. data/cpp/arduino/include/iom16m1.h +1571 -0
  105. data/cpp/arduino/include/iom16u2.h +1000 -0
  106. data/cpp/arduino/include/iom16u4.h +1423 -0
  107. data/cpp/arduino/include/iom2560.h +101 -0
  108. data/cpp/arduino/include/iom2561.h +101 -0
  109. data/cpp/arduino/include/iom2564rfr2.h +2691 -0
  110. data/cpp/arduino/include/iom256rfr2.h +2707 -0
  111. data/cpp/arduino/include/iom3000.h +237 -0
  112. data/cpp/arduino/include/iom32.h +755 -0
  113. data/cpp/arduino/include/iom323.h +744 -0
  114. data/cpp/arduino/include/iom324a.h +1014 -0
  115. data/cpp/arduino/include/iom324p.h +1016 -0
  116. data/cpp/arduino/include/iom324pa.h +1372 -0
  117. data/cpp/arduino/include/iom325.h +886 -0
  118. data/cpp/arduino/include/iom3250.h +982 -0
  119. data/cpp/arduino/include/iom3250a.h +34 -0
  120. data/cpp/arduino/include/iom3250p.h +34 -0
  121. data/cpp/arduino/include/iom3250pa.h +1042 -0
  122. data/cpp/arduino/include/iom325a.h +34 -0
  123. data/cpp/arduino/include/iom325p.h +34 -0
  124. data/cpp/arduino/include/iom325pa.h +937 -0
  125. data/cpp/arduino/include/iom328.h +34 -0
  126. data/cpp/arduino/include/iom328p.h +948 -0
  127. data/cpp/arduino/include/iom329.h +1069 -0
  128. data/cpp/arduino/include/iom3290.h +1227 -0
  129. data/cpp/arduino/include/iom3290a.h +34 -0
  130. data/cpp/arduino/include/iom3290pa.h +1123 -0
  131. data/cpp/arduino/include/iom329a.h +34 -0
  132. data/cpp/arduino/include/iom329p.h +1164 -0
  133. data/cpp/arduino/include/iom329pa.h +34 -0
  134. data/cpp/arduino/include/iom32a.h +686 -0
  135. data/cpp/arduino/include/iom32c1.h +1320 -0
  136. data/cpp/arduino/include/iom32hvb.h +1052 -0
  137. data/cpp/arduino/include/iom32hvbrevb.h +953 -0
  138. data/cpp/arduino/include/iom32m1.h +1625 -0
  139. data/cpp/arduino/include/iom32u2.h +1000 -0
  140. data/cpp/arduino/include/iom32u4.h +1512 -0
  141. data/cpp/arduino/include/iom32u6.h +1431 -0
  142. data/cpp/arduino/include/iom406.h +783 -0
  143. data/cpp/arduino/include/iom48.h +93 -0
  144. data/cpp/arduino/include/iom48a.h +35 -0
  145. data/cpp/arduino/include/iom48p.h +936 -0
  146. data/cpp/arduino/include/iom48pa.h +839 -0
  147. data/cpp/arduino/include/iom48pb.h +890 -0
  148. data/cpp/arduino/include/iom64.h +1311 -0
  149. data/cpp/arduino/include/iom640.h +101 -0
  150. data/cpp/arduino/include/iom644.h +101 -0
  151. data/cpp/arduino/include/iom644a.h +34 -0
  152. data/cpp/arduino/include/iom644p.h +101 -0
  153. data/cpp/arduino/include/iom644pa.h +1387 -0
  154. data/cpp/arduino/include/iom644rfr2.h +2685 -0
  155. data/cpp/arduino/include/iom645.h +881 -0
  156. data/cpp/arduino/include/iom6450.h +978 -0
  157. data/cpp/arduino/include/iom6450a.h +34 -0
  158. data/cpp/arduino/include/iom6450p.h +34 -0
  159. data/cpp/arduino/include/iom645a.h +34 -0
  160. data/cpp/arduino/include/iom645p.h +34 -0
  161. data/cpp/arduino/include/iom649.h +1061 -0
  162. data/cpp/arduino/include/iom6490.h +1182 -0
  163. data/cpp/arduino/include/iom6490a.h +34 -0
  164. data/cpp/arduino/include/iom6490p.h +34 -0
  165. data/cpp/arduino/include/iom649a.h +34 -0
  166. data/cpp/arduino/include/iom649p.h +1490 -0
  167. data/cpp/arduino/include/iom64a.h +1084 -0
  168. data/cpp/arduino/include/iom64c1.h +1321 -0
  169. data/cpp/arduino/include/iom64hve.h +1034 -0
  170. data/cpp/arduino/include/iom64hve2.h +767 -0
  171. data/cpp/arduino/include/iom64m1.h +1572 -0
  172. data/cpp/arduino/include/iom64rfr2.h +2701 -0
  173. data/cpp/arduino/include/iom8.h +665 -0
  174. data/cpp/arduino/include/iom8515.h +687 -0
  175. data/cpp/arduino/include/iom8535.h +772 -0
  176. data/cpp/arduino/include/iom88.h +97 -0
  177. data/cpp/arduino/include/iom88a.h +35 -0
  178. data/cpp/arduino/include/iom88p.h +941 -0
  179. data/cpp/arduino/include/iom88pa.h +1185 -0
  180. data/cpp/arduino/include/iom88pb.h +899 -0
  181. data/cpp/arduino/include/iom8a.h +621 -0
  182. data/cpp/arduino/include/iom8hva.h +76 -0
  183. data/cpp/arduino/include/iom8u2.h +997 -0
  184. data/cpp/arduino/include/iomx8.h +808 -0
  185. data/cpp/arduino/include/iomxx0_1.h +1692 -0
  186. data/cpp/arduino/include/iomxx4.h +954 -0
  187. data/cpp/arduino/include/iomxxhva.h +550 -0
  188. data/cpp/arduino/include/iotn10.h +512 -0
  189. data/cpp/arduino/include/iotn11.h +255 -0
  190. data/cpp/arduino/include/iotn12.h +288 -0
  191. data/cpp/arduino/include/iotn13.h +395 -0
  192. data/cpp/arduino/include/iotn13a.h +394 -0
  193. data/cpp/arduino/include/iotn15.h +363 -0
  194. data/cpp/arduino/include/iotn1634.h +914 -0
  195. data/cpp/arduino/include/iotn167.h +883 -0
  196. data/cpp/arduino/include/iotn20.h +776 -0
  197. data/cpp/arduino/include/iotn22.h +221 -0
  198. data/cpp/arduino/include/iotn2313.h +702 -0
  199. data/cpp/arduino/include/iotn2313a.h +812 -0
  200. data/cpp/arduino/include/iotn24.h +94 -0
  201. data/cpp/arduino/include/iotn24a.h +846 -0
  202. data/cpp/arduino/include/iotn25.h +93 -0
  203. data/cpp/arduino/include/iotn26.h +422 -0
  204. data/cpp/arduino/include/iotn261.h +93 -0
  205. data/cpp/arduino/include/iotn261a.h +987 -0
  206. data/cpp/arduino/include/iotn28.h +297 -0
  207. data/cpp/arduino/include/iotn4.h +477 -0
  208. data/cpp/arduino/include/iotn40.h +767 -0
  209. data/cpp/arduino/include/iotn4313.h +813 -0
  210. data/cpp/arduino/include/iotn43u.h +604 -0
  211. data/cpp/arduino/include/iotn44.h +94 -0
  212. data/cpp/arduino/include/iotn441.h +903 -0
  213. data/cpp/arduino/include/iotn44a.h +844 -0
  214. data/cpp/arduino/include/iotn45.h +93 -0
  215. data/cpp/arduino/include/iotn461.h +94 -0
  216. data/cpp/arduino/include/iotn461a.h +987 -0
  217. data/cpp/arduino/include/iotn48.h +806 -0
  218. data/cpp/arduino/include/iotn5.h +512 -0
  219. data/cpp/arduino/include/iotn828.h +911 -0
  220. data/cpp/arduino/include/iotn84.h +94 -0
  221. data/cpp/arduino/include/iotn841.h +903 -0
  222. data/cpp/arduino/include/iotn84a.h +844 -0
  223. data/cpp/arduino/include/iotn85.h +93 -0
  224. data/cpp/arduino/include/iotn861.h +94 -0
  225. data/cpp/arduino/include/iotn861a.h +988 -0
  226. data/cpp/arduino/include/iotn87.h +859 -0
  227. data/cpp/arduino/include/iotn88.h +806 -0
  228. data/cpp/arduino/include/iotn9.h +477 -0
  229. data/cpp/arduino/include/iotnx4.h +482 -0
  230. data/cpp/arduino/include/iotnx5.h +442 -0
  231. data/cpp/arduino/include/iotnx61.h +541 -0
  232. data/cpp/arduino/include/iousb1286.h +101 -0
  233. data/cpp/arduino/include/iousb1287.h +101 -0
  234. data/cpp/arduino/include/iousb162.h +101 -0
  235. data/cpp/arduino/include/iousb646.h +102 -0
  236. data/cpp/arduino/include/iousb647.h +102 -0
  237. data/cpp/arduino/include/iousb82.h +95 -0
  238. data/cpp/arduino/include/iousbxx2.h +807 -0
  239. data/cpp/arduino/include/iousbxx6_7.h +1336 -0
  240. data/cpp/arduino/include/iox128a1.h +7236 -0
  241. data/cpp/arduino/include/iox128a1u.h +8305 -0
  242. data/cpp/arduino/include/iox128a3.h +6987 -0
  243. data/cpp/arduino/include/iox128a3u.h +7697 -0
  244. data/cpp/arduino/include/iox128a4u.h +7309 -0
  245. data/cpp/arduino/include/iox128b1.h +6872 -0
  246. data/cpp/arduino/include/iox128b3.h +6288 -0
  247. data/cpp/arduino/include/iox128c3.h +6264 -0
  248. data/cpp/arduino/include/iox128d3.h +5749 -0
  249. data/cpp/arduino/include/iox128d4.h +5562 -0
  250. data/cpp/arduino/include/iox16a4.h +6748 -0
  251. data/cpp/arduino/include/iox16a4u.h +7309 -0
  252. data/cpp/arduino/include/iox16c4.h +6078 -0
  253. data/cpp/arduino/include/iox16d4.h +5717 -0
  254. data/cpp/arduino/include/iox16e5.h +7699 -0
  255. data/cpp/arduino/include/iox192a3.h +6987 -0
  256. data/cpp/arduino/include/iox192a3u.h +7697 -0
  257. data/cpp/arduino/include/iox192c3.h +6264 -0
  258. data/cpp/arduino/include/iox192d3.h +5749 -0
  259. data/cpp/arduino/include/iox256a3.h +6987 -0
  260. data/cpp/arduino/include/iox256a3b.h +6983 -0
  261. data/cpp/arduino/include/iox256a3bu.h +7706 -0
  262. data/cpp/arduino/include/iox256a3u.h +7697 -0
  263. data/cpp/arduino/include/iox256c3.h +6264 -0
  264. data/cpp/arduino/include/iox256d3.h +5709 -0
  265. data/cpp/arduino/include/iox32a4.h +6747 -0
  266. data/cpp/arduino/include/iox32a4u.h +7309 -0
  267. data/cpp/arduino/include/iox32c3.h +6264 -0
  268. data/cpp/arduino/include/iox32c4.h +6078 -0
  269. data/cpp/arduino/include/iox32d3.h +5105 -0
  270. data/cpp/arduino/include/iox32d4.h +5685 -0
  271. data/cpp/arduino/include/iox32e5.h +7699 -0
  272. data/cpp/arduino/include/iox384c3.h +6849 -0
  273. data/cpp/arduino/include/iox384d3.h +5833 -0
  274. data/cpp/arduino/include/iox64a1.h +7236 -0
  275. data/cpp/arduino/include/iox64a1u.h +8305 -0
  276. data/cpp/arduino/include/iox64a3.h +6987 -0
  277. data/cpp/arduino/include/iox64a3u.h +7697 -0
  278. data/cpp/arduino/include/iox64a4u.h +7309 -0
  279. data/cpp/arduino/include/iox64b1.h +6454 -0
  280. data/cpp/arduino/include/iox64b3.h +6288 -0
  281. data/cpp/arduino/include/iox64c3.h +6264 -0
  282. data/cpp/arduino/include/iox64d3.h +5764 -0
  283. data/cpp/arduino/include/iox64d4.h +5555 -0
  284. data/cpp/arduino/include/iox8e5.h +7699 -0
  285. data/cpp/arduino/include/lock.h +239 -0
  286. data/cpp/arduino/include/portpins.h +549 -0
  287. data/cpp/arduino/include/version.h +90 -0
  288. data/cpp/arduino/include/xmega.h +71 -0
  289. data/cpp/unittest/Assertion.h +9 -4
  290. data/cpp/unittest/Compare.h +93 -0
  291. data/lib/arduino_ci/arduino_installation.rb +1 -1
  292. data/lib/arduino_ci/cpp_library.rb +4 -1
  293. data/lib/arduino_ci/version.rb +1 -1
  294. data/misc/default.yaml +7 -0
  295. metadata +285 -2
@@ -0,0 +1,3 @@
1
+ IO defintions.
2
+
3
+ All of it copied from `arduino-1.8.5/hardware/tools/avr/avr/include/avr`
@@ -0,0 +1,333 @@
1
+ /* Copyright (c) 2007 Eric B. Weddington
2
+ All rights reserved.
3
+
4
+ Redistribution and use in source and binary forms, with or without
5
+ modification, are permitted provided that the following conditions are met:
6
+
7
+ * Redistributions of source code must retain the above copyright
8
+ notice, this list of conditions and the following disclaimer.
9
+
10
+ * Redistributions in binary form must reproduce the above copyright
11
+ notice, this list of conditions and the following disclaimer in
12
+ the documentation and/or other materials provided with the
13
+ distribution.
14
+
15
+ * Neither the name of the copyright holders nor the names of
16
+ contributors may be used to endorse or promote products derived
17
+ from this software without specific prior written permission.
18
+
19
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
20
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
23
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
24
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
27
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29
+ POSSIBILITY OF SUCH DAMAGE. */
30
+
31
+ /* $Id$ */
32
+
33
+
34
+ #ifndef _AVR_COMMON_H
35
+ #define _AVR_COMMON_H
36
+
37
+ /*
38
+ This purpose of this header is to define registers that have not been
39
+ previously defined in the individual device IO header files, and to define
40
+ other symbols that are common across AVR device families.
41
+
42
+ This file is designed to be included in <avr/io.h> after the individual
43
+ device IO header files, and after <avr/sfr_defs.h>
44
+
45
+ */
46
+
47
+ /*------------ Registers Not Previously Defined ------------*/
48
+
49
+ /*
50
+ These are registers that are not previously defined in the individual
51
+ IO header files, OR they are defined here because they are used in parts of
52
+ avr-libc even if a device is not selected but a general architecture has
53
+ been selected.
54
+ */
55
+
56
+
57
+ /*
58
+ Stack pointer register.
59
+
60
+ AVR architecture 1 has no RAM, thus no stack pointer.
61
+
62
+ All other architectures do have a stack pointer. Some devices have only
63
+ less than 256 bytes of possible RAM locations (128 Bytes of SRAM
64
+ and no option for external RAM), thus SPH is officially "reserved"
65
+ for them.
66
+ */
67
+ #if __AVR_ARCH__ >= 100
68
+ # ifndef SPL
69
+ # define SPL _SFR_MEM8(0x3D)
70
+ # endif
71
+ # ifndef SPH
72
+ # define SPH _SFR_MEM8(0x3E)
73
+ # endif
74
+ # ifndef SP
75
+ # define SP _SFR_MEM16(0x3D)
76
+ # endif
77
+ #elif __AVR_ARCH__ != 1
78
+ # ifndef SPL
79
+ # define SPL _SFR_IO8(0x3D)
80
+ # endif
81
+ # if XRAMEND < 0x100 && !defined(__COMPILING_AVR_LIBC__)
82
+ # ifndef SP
83
+ # define SP _SFR_IO8(0x3D)
84
+ # endif
85
+ # else
86
+ # ifndef SP
87
+ # define SP _SFR_IO16(0x3D)
88
+ # endif
89
+ # ifndef SPH
90
+ # define SPH _SFR_IO8(0x3E)
91
+ # endif
92
+ # endif /* XRAMEND < 0x100 && !defined(__COMPILING_AVR_LIBC__) */
93
+ #endif /* __AVR_ARCH__ != 1 */
94
+
95
+
96
+ /* Status Register */
97
+ #ifndef SREG
98
+ # if __AVR_ARCH__ >= 100
99
+ # define SREG _SFR_MEM8(0x3F)
100
+ # else
101
+ # define SREG _SFR_IO8(0x3F)
102
+ # endif
103
+ #endif
104
+
105
+
106
+ /* SREG bit definitions */
107
+ #ifndef SREG_C
108
+ # define SREG_C (0)
109
+ #endif
110
+ #ifndef SREG_Z
111
+ # define SREG_Z (1)
112
+ #endif
113
+ #ifndef SREG_N
114
+ # define SREG_N (2)
115
+ #endif
116
+ #ifndef SREG_V
117
+ # define SREG_V (3)
118
+ #endif
119
+ #ifndef SREG_S
120
+ # define SREG_S (4)
121
+ #endif
122
+ #ifndef SREG_H
123
+ # define SREG_H (5)
124
+ #endif
125
+ #ifndef SREG_T
126
+ # define SREG_T (6)
127
+ #endif
128
+ #ifndef SREG_I
129
+ # define SREG_I (7)
130
+ #endif
131
+
132
+
133
+ #if defined(__COMPILING_AVR_LIBC__)
134
+
135
+ /* AVR 6 Architecture */
136
+ # if __AVR_ARCH__ == 6
137
+ # ifndef EIND
138
+ # define EIND _SFR_IO8(0X3C)
139
+ # endif
140
+ /* XMEGA Architectures */
141
+ # elif __AVR_ARCH__ >= 100
142
+ # ifndef EIND
143
+ # define EIND _SFR_MEM8(0x3C)
144
+ # endif
145
+ # endif
146
+
147
+ /*
148
+ Only few devices come without EEPROM. In order to assemble the
149
+ EEPROM library components without defining a specific device, we
150
+ keep the EEPROM-related definitions here.
151
+ */
152
+
153
+ /* EEPROM Control Register */
154
+ # ifndef EECR
155
+ # define EECR _SFR_IO8(0x1C)
156
+ # endif
157
+
158
+ /* EEPROM Data Register */
159
+ # ifndef EEDR
160
+ # define EEDR _SFR_IO8(0x1D)
161
+ # endif
162
+
163
+ /* EEPROM Address Register */
164
+ # ifndef EEAR
165
+ # define EEAR _SFR_IO16(0x1E)
166
+ # endif
167
+ # ifndef EEARL
168
+ # define EEARL _SFR_IO8(0x1E)
169
+ # endif
170
+ # ifndef EEARH
171
+ # define EEARH _SFR_IO8(0x1F)
172
+ # endif
173
+
174
+ /* EEPROM Control Register bits */
175
+ # ifndef EERE
176
+ # define EERE (0)
177
+ # endif
178
+ # ifndef EEWE
179
+ # define EEWE (1)
180
+ # endif
181
+ # ifndef EEMWE
182
+ # define EEMWE (2)
183
+ # endif
184
+ # ifndef EERIE
185
+ # define EERIE (3)
186
+ # endif
187
+
188
+
189
+ /* RAM Page Z Select Register */
190
+ #ifndef RAMPZ
191
+ # if defined(__AVR_HAVE_RAMPZ__) && __AVR_HAVE_RAMPZ__
192
+ # if __AVR_ARCH__ >= 100
193
+ # define RAMPZ _SFR_MEM8(0x3B)
194
+ # else
195
+ # define RAMPZ _SFR_IO8(0x3B)
196
+ # endif
197
+ # endif
198
+ #endif
199
+
200
+ #endif /* __COMPILING_AVR_LIBC__ */
201
+
202
+
203
+
204
+ /*------------ Common Symbols ------------*/
205
+
206
+ /*
207
+ Generic definitions for registers that are common across multiple AVR devices
208
+ and families.
209
+ */
210
+
211
+ /* Pointer registers definitions */
212
+ #if __AVR_ARCH__ != 1 /* avr1 does not have X and Y pointers */
213
+ # define XL r26
214
+ # define XH r27
215
+ # define YL r28
216
+ # define YH r29
217
+ #endif /* #if __AVR_ARCH__ != 1 */
218
+ #define ZL r30
219
+ #define ZH r31
220
+
221
+
222
+ /* Status Register */
223
+ #if defined(SREG)
224
+ # define AVR_STATUS_REG SREG
225
+ # if __AVR_ARCH__ >= 100
226
+ # define AVR_STATUS_ADDR _SFR_MEM_ADDR(SREG)
227
+ # else
228
+ # define AVR_STATUS_ADDR _SFR_IO_ADDR(SREG)
229
+ # endif
230
+ #endif
231
+
232
+ /* Stack Pointer (combined) Register */
233
+ #if defined(SP)
234
+ # define AVR_STACK_POINTER_REG SP
235
+ # if __AVR_ARCH__ >= 100
236
+ # define AVR_STACK_POINTER_ADDR _SFR_MEM_ADDR(SP)
237
+ # else
238
+ # define AVR_STACK_POINTER_ADDR _SFR_IO_ADDR(SP)
239
+ # endif
240
+ #endif
241
+
242
+ /* Stack Pointer High Register */
243
+ #if defined(SPH)
244
+ # define _HAVE_AVR_STACK_POINTER_HI 1
245
+ # define AVR_STACK_POINTER_HI_REG SPH
246
+ # if __AVR_ARCH__ >= 100
247
+ # define AVR_STACK_POINTER_HI_ADDR _SFR_MEM_ADDR(SPH)
248
+ # else
249
+ # define AVR_STACK_POINTER_HI_ADDR _SFR_IO_ADDR(SPH)
250
+ # endif
251
+ #endif
252
+
253
+ /* Stack Pointer Low Register */
254
+ #if defined(SPL)
255
+ # define AVR_STACK_POINTER_LO_REG SPL
256
+ # if __AVR_ARCH__ >= 100
257
+ # define AVR_STACK_POINTER_LO_ADDR _SFR_MEM_ADDR(SPL)
258
+ # else
259
+ # define AVR_STACK_POINTER_LO_ADDR _SFR_IO_ADDR(SPL)
260
+ # endif
261
+ #endif
262
+
263
+ /* RAMPD Register */
264
+ #if defined(RAMPD)
265
+ # define AVR_RAMPD_REG RAMPD
266
+ # if __AVR_ARCH__ >= 100
267
+ # define AVR_RAMPD_ADDR _SFR_MEM_ADDR(RAMPD)
268
+ # else
269
+ # define AVR_RAMPD_ADDR _SFR_IO_ADDR(RAMPD)
270
+ # endif
271
+ #endif
272
+
273
+ /* RAMPX Register */
274
+ #if defined(RAMPX)
275
+ # define AVR_RAMPX_REG RAMPX
276
+ # if __AVR_ARCH__ >= 100
277
+ # define AVR_RAMPX_ADDR _SFR_MEM_ADDR(RAMPX)
278
+ # else
279
+ # define AVR_RAMPX_ADDR _SFR_IO_ADDR(RAMPX)
280
+ # endif
281
+ #endif
282
+
283
+ /* RAMPY Register */
284
+ #if defined(RAMPY)
285
+ # define AVR_RAMPY_REG RAMPY
286
+ # if __AVR_ARCH__ >= 100
287
+ # define AVR_RAMPY_ADDR _SFR_MEM_ADDR(RAMPY)
288
+ # else
289
+ # define AVR_RAMPY_ADDR _SFR_IO_ADDR(RAMPY)
290
+ # endif
291
+ #endif
292
+
293
+ /* RAMPZ Register */
294
+ #if defined(RAMPZ)
295
+ # define AVR_RAMPZ_REG RAMPZ
296
+ # if __AVR_ARCH__ >= 100
297
+ # define AVR_RAMPZ_ADDR _SFR_MEM_ADDR(RAMPZ)
298
+ # else
299
+ # define AVR_RAMPZ_ADDR _SFR_IO_ADDR(RAMPZ)
300
+ # endif
301
+ #endif
302
+
303
+ /* Extended Indirect Register */
304
+ #if defined(EIND)
305
+ # define AVR_EXTENDED_INDIRECT_REG EIND
306
+ # if __AVR_ARCH__ >= 100
307
+ # define AVR_EXTENDED_INDIRECT_ADDR _SFR_MEM_ADDR(EIND)
308
+ # else
309
+ # define AVR_EXTENDED_INDIRECT_ADDR _SFR_IO_ADDR(EIND)
310
+ # endif
311
+ #endif
312
+
313
+ /*------------ Workaround to old compilers (4.1.2 and earlier) ------------*/
314
+
315
+ #ifndef __AVR_HAVE_MOVW__
316
+ # if defined(__AVR_ENHANCED__) && __AVR_ENHANCED__
317
+ # define __AVR_HAVE_MOVW__ 1
318
+ # endif
319
+ #endif
320
+
321
+ #ifndef __AVR_HAVE_LPMX__
322
+ # if defined(__AVR_ENHANCED__) && __AVR_ENHANCED__
323
+ # define __AVR_HAVE_LPMX__ 1
324
+ # endif
325
+ #endif
326
+
327
+ #ifndef __AVR_HAVE_MUL__
328
+ # if defined(__AVR_ENHANCED__) && __AVR_ENHANCED__
329
+ # define __AVR_HAVE_MUL__ 1
330
+ # endif
331
+ #endif
332
+
333
+ #endif /* _AVR_COMMON_H */
@@ -0,0 +1,274 @@
1
+ /* Copyright (c) 2007, Atmel Corporation
2
+ All rights reserved.
3
+
4
+ Redistribution and use in source and binary forms, with or without
5
+ modification, are permitted provided that the following conditions are met:
6
+
7
+ * Redistributions of source code must retain the above copyright
8
+ notice, this list of conditions and the following disclaimer.
9
+
10
+ * Redistributions in binary form must reproduce the above copyright
11
+ notice, this list of conditions and the following disclaimer in
12
+ the documentation and/or other materials provided with the
13
+ distribution.
14
+
15
+ * Neither the name of the copyright holders nor the names of
16
+ contributors may be used to endorse or promote products derived
17
+ from this software without specific prior written permission.
18
+
19
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
20
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
23
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
24
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
27
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29
+ POSSIBILITY OF SUCH DAMAGE. */
30
+
31
+ /* $Id$ */
32
+
33
+ /* avr/fuse.h - Fuse API */
34
+
35
+ #ifndef _AVR_FUSE_H_
36
+ #define _AVR_FUSE_H_ 1
37
+
38
+ /* This file must be explicitly included by <avr/io.h>. */
39
+ #if !defined(_AVR_IO_H_)
40
+ #error "You must #include <avr/io.h> and not <avr/fuse.h> by itself."
41
+ #endif
42
+
43
+
44
+ /** \file */
45
+ /** \defgroup avr_fuse <avr/fuse.h>: Fuse Support
46
+
47
+ \par Introduction
48
+
49
+ The Fuse API allows a user to specify the fuse settings for the specific
50
+ AVR device they are compiling for. These fuse settings will be placed
51
+ in a special section in the ELF output file, after linking.
52
+
53
+ Programming tools can take advantage of the fuse information embedded in
54
+ the ELF file, by extracting this information and determining if the fuses
55
+ need to be programmed before programming the Flash and EEPROM memories.
56
+ This also allows a single ELF file to contain all the
57
+ information needed to program an AVR.
58
+
59
+ To use the Fuse API, include the <avr/io.h> header file, which in turn
60
+ automatically includes the individual I/O header file and the <avr/fuse.h>
61
+ file. These other two files provides everything necessary to set the AVR
62
+ fuses.
63
+
64
+ \par Fuse API
65
+
66
+ Each I/O header file must define the FUSE_MEMORY_SIZE macro which is
67
+ defined to the number of fuse bytes that exist in the AVR device.
68
+
69
+ A new type, __fuse_t, is defined as a structure. The number of fields in
70
+ this structure are determined by the number of fuse bytes in the
71
+ FUSE_MEMORY_SIZE macro.
72
+
73
+ If FUSE_MEMORY_SIZE == 1, there is only a single field: byte, of type
74
+ unsigned char.
75
+
76
+ If FUSE_MEMORY_SIZE == 2, there are two fields: low, and high, of type
77
+ unsigned char.
78
+
79
+ If FUSE_MEMORY_SIZE == 3, there are three fields: low, high, and extended,
80
+ of type unsigned char.
81
+
82
+ If FUSE_MEMORY_SIZE > 3, there is a single field: byte, which is an array
83
+ of unsigned char with the size of the array being FUSE_MEMORY_SIZE.
84
+
85
+ A convenience macro, FUSEMEM, is defined as a GCC attribute for a
86
+ custom-named section of ".fuse".
87
+
88
+ A convenience macro, FUSES, is defined that declares a variable, __fuse, of
89
+ type __fuse_t with the attribute defined by FUSEMEM. This variable
90
+ allows the end user to easily set the fuse data.
91
+
92
+ \note If a device-specific I/O header file has previously defined FUSEMEM,
93
+ then FUSEMEM is not redefined. If a device-specific I/O header file has
94
+ previously defined FUSES, then FUSES is not redefined.
95
+
96
+ Each AVR device I/O header file has a set of defined macros which specify the
97
+ actual fuse bits available on that device. The AVR fuses have inverted
98
+ values, logical 1 for an unprogrammed (disabled) bit and logical 0 for a
99
+ programmed (enabled) bit. The defined macros for each individual fuse
100
+ bit represent this in their definition by a bit-wise inversion of a mask.
101
+ For example, the FUSE_EESAVE fuse in the ATmega128 is defined as:
102
+ \code
103
+ #define FUSE_EESAVE ~_BV(3)
104
+ \endcode
105
+ \note The _BV macro creates a bit mask from a bit number. It is then
106
+ inverted to represent logical values for a fuse memory byte.
107
+
108
+ To combine the fuse bits macros together to represent a whole fuse byte,
109
+ use the bitwise AND operator, like so:
110
+ \code
111
+ (FUSE_BOOTSZ0 & FUSE_BOOTSZ1 & FUSE_EESAVE & FUSE_SPIEN & FUSE_JTAGEN)
112
+ \endcode
113
+
114
+ Each device I/O header file also defines macros that provide default values
115
+ for each fuse byte that is available. LFUSE_DEFAULT is defined for a Low
116
+ Fuse byte. HFUSE_DEFAULT is defined for a High Fuse byte. EFUSE_DEFAULT
117
+ is defined for an Extended Fuse byte.
118
+
119
+ If FUSE_MEMORY_SIZE > 3, then the I/O header file defines macros that
120
+ provide default values for each fuse byte like so:
121
+ FUSE0_DEFAULT
122
+ FUSE1_DEFAULT
123
+ FUSE2_DEFAULT
124
+ FUSE3_DEFAULT
125
+ FUSE4_DEFAULT
126
+ ....
127
+
128
+ \par API Usage Example
129
+
130
+ Putting all of this together is easy. Using C99's designated initializers:
131
+
132
+ \code
133
+ #include <avr/io.h>
134
+
135
+ FUSES =
136
+ {
137
+ .low = LFUSE_DEFAULT,
138
+ .high = (FUSE_BOOTSZ0 & FUSE_BOOTSZ1 & FUSE_EESAVE & FUSE_SPIEN & FUSE_JTAGEN),
139
+ .extended = EFUSE_DEFAULT,
140
+ };
141
+
142
+ int main(void)
143
+ {
144
+ return 0;
145
+ }
146
+ \endcode
147
+
148
+ Or, using the variable directly instead of the FUSES macro,
149
+
150
+ \code
151
+ #include <avr/io.h>
152
+
153
+ __fuse_t __fuse __attribute__((section (".fuse"))) =
154
+ {
155
+ .low = LFUSE_DEFAULT,
156
+ .high = (FUSE_BOOTSZ0 & FUSE_BOOTSZ1 & FUSE_EESAVE & FUSE_SPIEN & FUSE_JTAGEN),
157
+ .extended = EFUSE_DEFAULT,
158
+ };
159
+
160
+ int main(void)
161
+ {
162
+ return 0;
163
+ }
164
+ \endcode
165
+
166
+ If you are compiling in C++, you cannot use the designated intializers so
167
+ you must do:
168
+
169
+ \code
170
+ #include <avr/io.h>
171
+
172
+ FUSES =
173
+ {
174
+ LFUSE_DEFAULT, // .low
175
+ (FUSE_BOOTSZ0 & FUSE_BOOTSZ1 & FUSE_EESAVE & FUSE_SPIEN & FUSE_JTAGEN), // .high
176
+ EFUSE_DEFAULT, // .extended
177
+ };
178
+
179
+ int main(void)
180
+ {
181
+ return 0;
182
+ }
183
+ \endcode
184
+
185
+
186
+ However there are a number of caveats that you need to be aware of to
187
+ use this API properly.
188
+
189
+ Be sure to include <avr/io.h> to get all of the definitions for the API.
190
+ The FUSES macro defines a global variable to store the fuse data. This
191
+ variable is assigned to its own linker section. Assign the desired fuse
192
+ values immediately in the variable initialization.
193
+
194
+ The .fuse section in the ELF file will get its values from the initial
195
+ variable assignment ONLY. This means that you can NOT assign values to
196
+ this variable in functions and the new values will not be put into the
197
+ ELF .fuse section.
198
+
199
+ The global variable is declared in the FUSES macro has two leading
200
+ underscores, which means that it is reserved for the "implementation",
201
+ meaning the library, so it will not conflict with a user-named variable.
202
+
203
+ You must initialize ALL fields in the __fuse_t structure. This is because
204
+ the fuse bits in all bytes default to a logical 1, meaning unprogrammed.
205
+ Normal uninitialized data defaults to all locgial zeros. So it is vital that
206
+ all fuse bytes are initialized, even with default data. If they are not,
207
+ then the fuse bits may not programmed to the desired settings.
208
+
209
+ Be sure to have the -mmcu=<em>device</em> flag in your compile command line and
210
+ your linker command line to have the correct device selected and to have
211
+ the correct I/O header file included when you include <avr/io.h>.
212
+
213
+ You can print out the contents of the .fuse section in the ELF file by
214
+ using this command line:
215
+ \code
216
+ avr-objdump -s -j .fuse <ELF file>
217
+ \endcode
218
+ The section contents shows the address on the left, then the data going from
219
+ lower address to a higher address, left to right.
220
+
221
+ */
222
+
223
+ #if !(defined(__ASSEMBLER__) || defined(__DOXYGEN__))
224
+
225
+ #ifndef FUSEMEM
226
+ #define FUSEMEM __attribute__((__used__, __section__ (".fuse")))
227
+ #endif
228
+
229
+ #if FUSE_MEMORY_SIZE > 3
230
+
231
+ typedef struct
232
+ {
233
+ unsigned char byte[FUSE_MEMORY_SIZE];
234
+ } __fuse_t;
235
+
236
+
237
+ #elif FUSE_MEMORY_SIZE == 3
238
+
239
+ typedef struct
240
+ {
241
+ unsigned char low;
242
+ unsigned char high;
243
+ unsigned char extended;
244
+ } __fuse_t;
245
+
246
+ #elif FUSE_MEMORY_SIZE == 2
247
+
248
+ typedef struct
249
+ {
250
+ unsigned char low;
251
+ unsigned char high;
252
+ } __fuse_t;
253
+
254
+ #elif FUSE_MEMORY_SIZE == 1
255
+
256
+ typedef struct
257
+ {
258
+ unsigned char byte;
259
+ } __fuse_t;
260
+
261
+ #endif
262
+
263
+ #if !defined(FUSES)
264
+ #if defined(__AVR_XMEGA__)
265
+ #define FUSES NVM_FUSES_t __fuse FUSEMEM
266
+ #else
267
+ #define FUSES __fuse_t __fuse FUSEMEM
268
+ #endif
269
+ #endif
270
+
271
+
272
+ #endif /* !(__ASSEMBLER__ || __DOXYGEN__) */
273
+
274
+ #endif /* _AVR_FUSE_H_ */