Skip to content

Commit ef4e8c6

Browse files
committed
Robot has its own core
1 parent 44c5dae commit ef4e8c6

37 files changed

+7475
-2
lines changed

boards.txt

+2-2
Original file line numberDiff line numberDiff line change
@@ -541,7 +541,7 @@ robotControl.build.mcu=atmega32u4
541541
robotControl.build.f_cpu=16000000L
542542
robotControl.build.vid=0x2341
543543
robotControl.build.pid=0x8038
544-
robotControl.build.core=arduino
544+
robotControl.build.core=robot
545545
robotControl.build.variant=robot_control
546546

547547
##############################################################
@@ -562,6 +562,6 @@ robotMotor.build.mcu=atmega32u4
562562
robotMotor.build.f_cpu=16000000L
563563
robotMotor.build.vid=0x2341
564564
robotMotor.build.pid=0x8039
565-
robotMotor.build.core=arduino
565+
robotMotor.build.core=robot
566566
robotMotor.build.variant=robot_motor
567567

cores/robot/Arduino.h

+215
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,215 @@
1+
#ifndef Arduino_h
2+
#define Arduino_h
3+
4+
#include <stdlib.h>
5+
#include <string.h>
6+
#include <math.h>
7+
8+
#include <avr/pgmspace.h>
9+
#include <avr/io.h>
10+
#include <avr/interrupt.h>
11+
12+
#include "binary.h"
13+
14+
#ifdef __cplusplus
15+
extern "C"{
16+
#endif
17+
18+
#define HIGH 0x1
19+
#define LOW 0x0
20+
21+
#define INPUT 0x0
22+
#define OUTPUT 0x1
23+
#define INPUT_PULLUP 0x2
24+
25+
#define true 0x1
26+
#define false 0x0
27+
28+
#define PI 3.1415926535897932384626433832795
29+
#define HALF_PI 1.5707963267948966192313216916398
30+
#define TWO_PI 6.283185307179586476925286766559
31+
#define DEG_TO_RAD 0.017453292519943295769236907684886
32+
#define RAD_TO_DEG 57.295779513082320876798154814105
33+
34+
#define SERIAL 0x0
35+
#define DISPLAY 0x1
36+
37+
#define LSBFIRST 0
38+
#define MSBFIRST 1
39+
40+
#define CHANGE 1
41+
#define FALLING 2
42+
#define RISING 3
43+
44+
#if defined(__AVR_ATtiny24__) || defined(__AVR_ATtiny44__) || defined(__AVR_ATtiny84__) || defined(__AVR_ATtiny25__) || defined(__AVR_ATtiny45__) || defined(__AVR_ATtiny85__)
45+
#define DEFAULT 0
46+
#define EXTERNAL 1
47+
#define INTERNAL 2
48+
#else
49+
#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) || defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__) || defined(__AVR_ATmega644__) || defined(__AVR_ATmega644A__) || defined(__AVR_ATmega644P__) || defined(__AVR_ATmega644PA__)
50+
#define INTERNAL1V1 2
51+
#define INTERNAL2V56 3
52+
#else
53+
#define INTERNAL 3
54+
#endif
55+
#define DEFAULT 1
56+
#define EXTERNAL 0
57+
#endif
58+
59+
// undefine stdlib's abs if encountered
60+
#ifdef abs
61+
#undef abs
62+
#endif
63+
64+
#define min(a,b) ((a)<(b)?(a):(b))
65+
#define max(a,b) ((a)>(b)?(a):(b))
66+
#define abs(x) ((x)>0?(x):-(x))
67+
#define constrain(amt,low,high) ((amt)<(low)?(low):((amt)>(high)?(high):(amt)))
68+
#define round(x) ((x)>=0?(long)((x)+0.5):(long)((x)-0.5))
69+
#define radians(deg) ((deg)*DEG_TO_RAD)
70+
#define degrees(rad) ((rad)*RAD_TO_DEG)
71+
#define sq(x) ((x)*(x))
72+
73+
#define interrupts() sei()
74+
#define noInterrupts() cli()
75+
76+
#define clockCyclesPerMicrosecond() ( F_CPU / 1000000L )
77+
#define clockCyclesToMicroseconds(a) ( (a) / clockCyclesPerMicrosecond() )
78+
#define microsecondsToClockCycles(a) ( (a) * clockCyclesPerMicrosecond() )
79+
80+
#define lowByte(w) ((uint8_t) ((w) & 0xff))
81+
#define highByte(w) ((uint8_t) ((w) >> 8))
82+
83+
#define bitRead(value, bit) (((value) >> (bit)) & 0x01)
84+
#define bitSet(value, bit) ((value) |= (1UL << (bit)))
85+
#define bitClear(value, bit) ((value) &= ~(1UL << (bit)))
86+
#define bitWrite(value, bit, bitvalue) (bitvalue ? bitSet(value, bit) : bitClear(value, bit))
87+
88+
89+
typedef unsigned int word;
90+
91+
#define bit(b) (1UL << (b))
92+
93+
typedef uint8_t boolean;
94+
typedef uint8_t byte;
95+
96+
void init(void);
97+
98+
void pinMode(uint8_t, uint8_t);
99+
void digitalWrite(uint8_t, uint8_t);
100+
int digitalRead(uint8_t);
101+
int analogRead(uint8_t);
102+
void analogReference(uint8_t mode);
103+
void analogWrite(uint8_t, int);
104+
105+
unsigned long millis(void);
106+
unsigned long micros(void);
107+
void delay(unsigned long);
108+
void delayMicroseconds(unsigned int us);
109+
unsigned long pulseIn(uint8_t pin, uint8_t state, unsigned long timeout);
110+
111+
void shiftOut(uint8_t dataPin, uint8_t clockPin, uint8_t bitOrder, uint8_t val);
112+
uint8_t shiftIn(uint8_t dataPin, uint8_t clockPin, uint8_t bitOrder);
113+
114+
void attachInterrupt(uint8_t, void (*)(void), int mode);
115+
void detachInterrupt(uint8_t);
116+
117+
void setup(void);
118+
void loop(void);
119+
120+
// Get the bit location within the hardware port of the given virtual pin.
121+
// This comes from the pins_*.c file for the active board configuration.
122+
123+
#define analogInPinToBit(P) (P)
124+
125+
// On the ATmega1280, the addresses of some of the port registers are
126+
// greater than 255, so we can't store them in uint8_t's.
127+
extern const uint16_t PROGMEM port_to_mode_PGM[];
128+
extern const uint16_t PROGMEM port_to_input_PGM[];
129+
extern const uint16_t PROGMEM port_to_output_PGM[];
130+
131+
extern const uint8_t PROGMEM digital_pin_to_port_PGM[];
132+
// extern const uint8_t PROGMEM digital_pin_to_bit_PGM[];
133+
extern const uint8_t PROGMEM digital_pin_to_bit_mask_PGM[];
134+
extern const uint8_t PROGMEM digital_pin_to_timer_PGM[];
135+
136+
// Get the bit location within the hardware port of the given virtual pin.
137+
// This comes from the pins_*.c file for the active board configuration.
138+
//
139+
// These perform slightly better as macros compared to inline functions
140+
//
141+
#define digitalPinToPort(P) ( pgm_read_byte( digital_pin_to_port_PGM + (P) ) )
142+
#define digitalPinToBitMask(P) ( pgm_read_byte( digital_pin_to_bit_mask_PGM + (P) ) )
143+
#define digitalPinToTimer(P) ( pgm_read_byte( digital_pin_to_timer_PGM + (P) ) )
144+
#define analogInPinToBit(P) (P)
145+
#define portOutputRegister(P) ( (volatile uint8_t *)( pgm_read_word( port_to_output_PGM + (P))) )
146+
#define portInputRegister(P) ( (volatile uint8_t *)( pgm_read_word( port_to_input_PGM + (P))) )
147+
#define portModeRegister(P) ( (volatile uint8_t *)( pgm_read_word( port_to_mode_PGM + (P))) )
148+
149+
#define NOT_A_PIN 0
150+
#define NOT_A_PORT 0
151+
152+
#ifdef ARDUINO_MAIN
153+
#define PA 1
154+
#define PB 2
155+
#define PC 3
156+
#define PD 4
157+
#define PE 5
158+
#define PF 6
159+
#define PG 7
160+
#define PH 8
161+
#define PJ 10
162+
#define PK 11
163+
#define PL 12
164+
#endif
165+
166+
#define NOT_ON_TIMER 0
167+
#define TIMER0A 1
168+
#define TIMER0B 2
169+
#define TIMER1A 3
170+
#define TIMER1B 4
171+
#define TIMER2 5
172+
#define TIMER2A 6
173+
#define TIMER2B 7
174+
175+
#define TIMER3A 8
176+
#define TIMER3B 9
177+
#define TIMER3C 10
178+
#define TIMER4A 11
179+
#define TIMER4B 12
180+
#define TIMER4C 13
181+
#define TIMER4D 14
182+
#define TIMER5A 15
183+
#define TIMER5B 16
184+
#define TIMER5C 17
185+
186+
#ifdef __cplusplus
187+
} // extern "C"
188+
#endif
189+
190+
#ifdef __cplusplus
191+
#include "WCharacter.h"
192+
#include "WString.h"
193+
#include "HardwareSerial.h"
194+
195+
uint16_t makeWord(uint16_t w);
196+
uint16_t makeWord(byte h, byte l);
197+
198+
#define word(...) makeWord(__VA_ARGS__)
199+
200+
unsigned long pulseIn(uint8_t pin, uint8_t state, unsigned long timeout = 1000000L);
201+
202+
void tone(uint8_t _pin, unsigned int frequency, unsigned long duration = 0);
203+
void noTone(uint8_t _pin);
204+
205+
// WMath prototypes
206+
long random(long);
207+
long random(long, long);
208+
void randomSeed(unsigned int);
209+
long map(long, long, long, long, long);
210+
211+
#endif
212+
213+
#include "pins_arduino.h"
214+
215+
#endif

0 commit comments

Comments
 (0)