Skip to content

Commit 04f5ae1

Browse files
committed
Add core files and use same toolchain as stmhal
1 parent 4d9dd26 commit 04f5ae1

22 files changed

+8622
-18
lines changed

teensy/Makefile

Lines changed: 35 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,7 @@ QSTR_DEFS = qstrdefsport.h
66
# include py core make definitions
77
include ../py/py.mk
88

9-
ifeq ($(ARDUINO),)
10-
$(error Please define ARDUINO (where TeensyDuino is installed))
11-
endif
12-
TOOLS_PATH = $(ARDUINO)/hardware/tools
13-
COMPILER_PATH = $(TOOLS_PATH)/arm-none-eabi/bin
14-
CORE_PATH = $(ARDUINO)/hardware/teensy/cores/teensy3
15-
16-
CROSS_COMPILE = $(COMPILER_PATH)/arm-none-eabi-
9+
CROSS_COMPILE = arm-none-eabi-
1710

1811
CFLAGS_TEENSY = -DF_CPU=96000000 -DUSB_SERIAL -D__MK20DX256__
1912
CFLAGS_CORTEX_M4 = -mthumb -mtune=cortex-m4 -mcpu=cortex-m4 -fsingle-precision-constant -Wdouble-promotion $(CFLAGS_TEENSY)
@@ -22,13 +15,26 @@ INC = -I.
2215
INC += -I$(PY_SRC)
2316
INC += -I../stmhal
2417
INC += -I$(BUILD)
25-
INC += -I$(CORE_PATH)
18+
INC += -Icore
2619

2720
CFLAGS = $(INC) -Wall -ansi -std=gnu99 -nostdlib $(CFLAGS_CORTEX_M4)
2821
LDFLAGS = -nostdlib -T mk20dx256.ld
29-
LIBS = -L $(COMPILER_PATH)/../arm-none-eabi/lib/thumb2 -lm
30-
LIBS += -L $(COMPILER_PATH)/../arm-none-eabi/lib/thumb2 -lc
31-
LIBS += -L $(COMPILER_PATH)/../lib/gcc/arm-none-eabi/4.7.2/thumb2 -lgcc
22+
23+
LIBGCC_FILE_NAME = $(shell $(CC) -print-libgcc-file-name)
24+
LIBM_FILE_NAME = $(shell $(CC) -print-file-name=libm.a)
25+
LIBC_FILE_NAME = $(shell $(CC) -print-file-name=libc.a)
26+
27+
#$(info %%%%% LIBGCC_FILE_NAME = $(LIBGCC_FILE_NAME))
28+
#$(info %%%%% LIBM_FILE_NAME = $(LIBM_FILE_NAME))
29+
#$(info %%%%% LIBC_FILE_NAME = $(LIBC_FILE_NAME))
30+
31+
#$(info %%%%% dirname LIBGCC_FILE_NAME = $(dir $(LIBGCC_FILE_NAME)))
32+
#$(info %%%%% dirname LIBM_FILE_NAME = $(dir $(LIBM_FILE_NAME)))
33+
#$(info %%%%% dirname LIBC_FILE_NAME = $(dir $(LIBC_FILE_NAME)))
34+
35+
LIBS = -L $(dir $(LIBM_FILE_NAME)) -lm
36+
LIBS += -L $(dir $(LIBC_FILE_NAME)) -lc
37+
LIBS += -L $(dir $(LIBGCC_FILE_NAME)) -lgcc
3238

3339
#Debugging/Optimization
3440
ifdef DEBUG
@@ -67,7 +73,7 @@ STM_SRC_S = $(addprefix stmhal/,\
6773
gchelper.s \
6874
)
6975

70-
SRC_TEENSY = \
76+
SRC_TEENSY = $(addprefix core/,\
7177
mk20dx128.c \
7278
pins_teensy.c \
7379
analog.c \
@@ -76,22 +82,37 @@ SRC_TEENSY = \
7682
usb_mem.c \
7783
usb_serial.c \
7884
yield.c \
85+
)
7986

8087
OBJ = $(PY_O) $(addprefix $(BUILD)/, $(SRC_C:.c=.o) $(STM_SRC_C:.c=.o) $(STM_SRC_S:.s=.o) $(SRC_TEENSY:.c=.o))
8188
OBJ += $(BUILD)/pins_gen.o
8289

8390
all: hex
8491
hex: $(BUILD)/micropython-mz.hex
8592

93+
ifeq ($(ARDUINO),)
94+
post_compile: $(BUILD)/micropython-mz.hex
95+
$(ECHO) "Please define ARDUINO (where TeensyDuino is installed)"
96+
exit 1
97+
98+
reboot:
99+
$(ECHO) "Please define ARDUINO (where TeensyDuino is installed)"
100+
exit 1
101+
102+
else
103+
TOOLS_PATH = $(ARDUINO)/hardware/tools
104+
86105
post_compile: $(BUILD)/micropython-mz.hex
87106
$(ECHO) "Preparing $@ for upload"
88107
$(Q)$(TOOLS_PATH)/teensy_post_compile -file="$(basename $(<F))" -path="$(<D)" -tools="$(TOOLS_PATH)"
89108

90109
reboot:
91110
$(ECHO) "REBOOT"
92111
-$(Q)$(TOOLS_PATH)/teensy_reboot
112+
endif
93113

94-
upload: post_compile reboot
114+
.PHONY: deploy
115+
deploy: post_compile reboot
95116

96117
$(BUILD)/micropython.elf: $(OBJ)
97118
$(ECHO) "LINK $@"
@@ -110,9 +131,6 @@ $(BUILD)/%.hex: $(BUILD)/%.elf
110131
$(ECHO) "HEX $<"
111132
$(Q)$(OBJCOPY) -O ihex -R .eeprom "$<" "$@"
112133

113-
$(BUILD)/%.o: $(CORE_PATH)/%.c
114-
$(call compile_c)
115-
116134
MAKE_PINS = make-pins.py
117135
BOARD_PINS = teensy-pins.csv
118136
AF_FILE = mk20dx256-af.csv

teensy/core/Arduino.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
//#include "WProgram.h"
2+
#include "core_pins.h"
3+
#include "pins_arduino.h"

teensy/core/HardwareSerial.h

Lines changed: 227 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,227 @@
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+
31+
#ifndef HardwareSerial_h
32+
#define HardwareSerial_h
33+
34+
#include "mk20dx128.h"
35+
#include <inttypes.h>
36+
37+
// uncomment to enable 9 bit formats
38+
//#define SERIAL_9BIT_SUPPORT
39+
40+
41+
#define SERIAL_7E1 0x02
42+
#define SERIAL_7O1 0x03
43+
#define SERIAL_8N1 0x00
44+
#define SERIAL_8N2 0x04
45+
#define SERIAL_8E1 0x06
46+
#define SERIAL_8O1 0x07
47+
#define SERIAL_7E1_RXINV 0x12
48+
#define SERIAL_7O1_RXINV 0x13
49+
#define SERIAL_8N1_RXINV 0x10
50+
#define SERIAL_8N2_RXINV 0x14
51+
#define SERIAL_8E1_RXINV 0x16
52+
#define SERIAL_8O1_RXINV 0x17
53+
#define SERIAL_7E1_TXINV 0x22
54+
#define SERIAL_7O1_TXINV 0x23
55+
#define SERIAL_8N1_TXINV 0x20
56+
#define SERIAL_8N2_TXINV 0x24
57+
#define SERIAL_8E1_TXINV 0x26
58+
#define SERIAL_8O1_TXINV 0x27
59+
#define SERIAL_7E1_RXINV_TXINV 0x32
60+
#define SERIAL_7O1_RXINV_TXINV 0x33
61+
#define SERIAL_8N1_RXINV_TXINV 0x30
62+
#define SERIAL_8N2_RXINV_TXINV 0x34
63+
#define SERIAL_8E1_RXINV_TXINV 0x36
64+
#define SERIAL_8O1_RXINV_TXINV 0x37
65+
#ifdef SERIAL_9BIT_SUPPORT
66+
#define SERIAL_9N1 0x84
67+
#define SERIAL_9E1 0x8E
68+
#define SERIAL_9O1 0x8F
69+
#define SERIAL_9N1_RXINV 0x94
70+
#define SERIAL_9E1_RXINV 0x9E
71+
#define SERIAL_9O1_RXINV 0x9F
72+
#define SERIAL_9N1_TXINV 0xA4
73+
#define SERIAL_9E1_TXINV 0xAE
74+
#define SERIAL_9O1_TXINV 0xAF
75+
#define SERIAL_9N1_RXINV_TXINV 0xB4
76+
#define SERIAL_9E1_RXINV_TXINV 0xBE
77+
#define SERIAL_9O1_RXINV_TXINV 0xBF
78+
#endif
79+
// bit0: parity, 0=even, 1=odd
80+
// bit1: parity, 0=disable, 1=enable
81+
// bit2: mode, 1=9bit, 0=8bit
82+
// bit3: mode10: 1=10bit, 0=8bit
83+
// bit4: rxinv, 0=normal, 1=inverted
84+
// bit5: txinv, 0=normal, 1=inverted
85+
// bit6: unused
86+
// bit7: actual data goes into 9th bit
87+
88+
89+
#define BAUD2DIV(baud) (((F_CPU * 2) + ((baud) >> 1)) / (baud))
90+
#define BAUD2DIV3(baud) (((F_BUS * 2) + ((baud) >> 1)) / (baud))
91+
92+
// C language implementation
93+
//
94+
#ifdef __cplusplus
95+
extern "C" {
96+
#endif
97+
void serial_begin(uint32_t divisor);
98+
void serial_format(uint32_t format);
99+
void serial_end(void);
100+
void serial_set_transmit_pin(uint8_t pin);
101+
void serial_putchar(uint32_t c);
102+
void serial_write(const void *buf, unsigned int count);
103+
void serial_flush(void);
104+
int serial_available(void);
105+
int serial_getchar(void);
106+
int serial_peek(void);
107+
void serial_clear(void);
108+
void serial_print(const char *p);
109+
void serial_phex(uint32_t n);
110+
void serial_phex16(uint32_t n);
111+
void serial_phex32(uint32_t n);
112+
113+
void serial2_begin(uint32_t divisor);
114+
void serial2_format(uint32_t format);
115+
void serial2_end(void);
116+
void serial2_putchar(uint32_t c);
117+
void serial2_write(const void *buf, unsigned int count);
118+
void serial2_flush(void);
119+
int serial2_available(void);
120+
int serial2_getchar(void);
121+
int serial2_peek(void);
122+
void serial2_clear(void);
123+
124+
void serial3_begin(uint32_t divisor);
125+
void serial3_format(uint32_t format);
126+
void serial3_end(void);
127+
void serial3_putchar(uint32_t c);
128+
void serial3_write(const void *buf, unsigned int count);
129+
void serial3_flush(void);
130+
int serial3_available(void);
131+
int serial3_getchar(void);
132+
int serial3_peek(void);
133+
void serial3_clear(void);
134+
135+
#ifdef __cplusplus
136+
}
137+
#endif
138+
139+
140+
// C++ interface
141+
//
142+
#ifdef __cplusplus
143+
#include "Stream.h"
144+
class HardwareSerial : public Stream
145+
{
146+
public:
147+
virtual void begin(uint32_t baud) { serial_begin(BAUD2DIV(baud)); }
148+
virtual void begin(uint32_t baud, uint32_t format) {
149+
serial_begin(BAUD2DIV(baud));
150+
serial_format(format); }
151+
virtual void end(void) { serial_end(); }
152+
virtual void transmitterEnable(uint8_t pin) { serial_set_transmit_pin(pin); }
153+
virtual int available(void) { return serial_available(); }
154+
virtual int peek(void) { return serial_peek(); }
155+
virtual int read(void) { return serial_getchar(); }
156+
virtual void flush(void) { serial_flush(); }
157+
virtual void clear(void) { serial_clear(); }
158+
virtual size_t write(uint8_t c) { serial_putchar(c); return 1; }
159+
virtual size_t write(unsigned long n) { return write((uint8_t)n); }
160+
virtual size_t write(long n) { return write((uint8_t)n); }
161+
virtual size_t write(unsigned int n) { return write((uint8_t)n); }
162+
virtual size_t write(int n) { return write((uint8_t)n); }
163+
virtual size_t write(const uint8_t *buffer, size_t size)
164+
{ serial_write(buffer, size); return size; }
165+
virtual size_t write(const char *str) { size_t len = strlen(str);
166+
serial_write((const uint8_t *)str, len);
167+
return len; }
168+
virtual size_t write9bit(uint32_t c) { serial_putchar(c); return 1; }
169+
};
170+
extern HardwareSerial Serial1;
171+
172+
class HardwareSerial2 : public HardwareSerial
173+
{
174+
public:
175+
virtual void begin(uint32_t baud) { serial2_begin(BAUD2DIV(baud)); }
176+
virtual void begin(uint32_t baud, uint32_t format) {
177+
serial2_begin(BAUD2DIV(baud));
178+
serial2_format(format); }
179+
virtual void end(void) { serial2_end(); }
180+
virtual int available(void) { return serial2_available(); }
181+
virtual int peek(void) { return serial2_peek(); }
182+
virtual int read(void) { return serial2_getchar(); }
183+
virtual void flush(void) { serial2_flush(); }
184+
virtual void clear(void) { serial2_clear(); }
185+
virtual size_t write(uint8_t c) { serial2_putchar(c); return 1; }
186+
virtual size_t write(unsigned long n) { return write((uint8_t)n); }
187+
virtual size_t write(long n) { return write((uint8_t)n); }
188+
virtual size_t write(unsigned int n) { return write((uint8_t)n); }
189+
virtual size_t write(int n) { return write((uint8_t)n); }
190+
virtual size_t write(const uint8_t *buffer, size_t size)
191+
{ serial2_write(buffer, size); return size; }
192+
virtual size_t write(const char *str) { size_t len = strlen(str);
193+
serial2_write((const uint8_t *)str, len);
194+
return len; }
195+
virtual size_t write9bit(uint32_t c) { serial2_putchar(c); return 1; }
196+
};
197+
extern HardwareSerial2 Serial2;
198+
199+
class HardwareSerial3 : public HardwareSerial
200+
{
201+
public:
202+
virtual void begin(uint32_t baud) { serial3_begin(BAUD2DIV3(baud)); }
203+
virtual void begin(uint32_t baud, uint32_t format) {
204+
serial3_begin(BAUD2DIV3(baud));
205+
serial3_format(format); }
206+
virtual void end(void) { serial3_end(); }
207+
virtual int available(void) { return serial3_available(); }
208+
virtual int peek(void) { return serial3_peek(); }
209+
virtual int read(void) { return serial3_getchar(); }
210+
virtual void flush(void) { serial3_flush(); }
211+
virtual void clear(void) { serial3_clear(); }
212+
virtual size_t write(uint8_t c) { serial3_putchar(c); return 1; }
213+
virtual size_t write(unsigned long n) { return write((uint8_t)n); }
214+
virtual size_t write(long n) { return write((uint8_t)n); }
215+
virtual size_t write(unsigned int n) { return write((uint8_t)n); }
216+
virtual size_t write(int n) { return write((uint8_t)n); }
217+
virtual size_t write(const uint8_t *buffer, size_t size)
218+
{ serial3_write(buffer, size); return size; }
219+
virtual size_t write(const char *str) { size_t len = strlen(str);
220+
serial3_write((const uint8_t *)str, len);
221+
return len; }
222+
virtual size_t write9bit(uint32_t c) { serial3_putchar(c); return 1; }
223+
};
224+
extern HardwareSerial3 Serial3;
225+
226+
#endif
227+
#endif

0 commit comments

Comments
 (0)