From 748731672aa10ffb313422c4c7c3a1bf6ae71895 Mon Sep 17 00:00:00 2001 From: alfran Date: Fri, 24 Feb 2017 15:01:45 +0100 Subject: [PATCH 1/3] fixed tone frequency --- cores/arduino/Tone.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cores/arduino/Tone.cpp b/cores/arduino/Tone.cpp index d4f5e9e..da255e5 100755 --- a/cores/arduino/Tone.cpp +++ b/cores/arduino/Tone.cpp @@ -52,7 +52,7 @@ void tone(uint8_t pin, unsigned int frequency, unsigned long duration) if (duration > 0 ) toggle_count = 2 * frequency * duration / 1000; else toggle_count = -1; timer.setPrescaleFactor(CYCLES_PER_MICROSECOND); // microseconds - timer.setOverflow(1000000/frequency/4); + timer.setOverflow(1000000/frequency/16); timer.setMode(TIMER_CH1, TIMER_OUTPUT_COMPARE); timer.setCompare(TIMER_CH1, 1); // Interrupt 1 count after each update timer.toneAttachInterrupt(TIMER_CH1, handler_tone); From 20a630662b86e7b98c18bde7d8fce8bbd6e88109 Mon Sep 17 00:00:00 2001 From: alfran Date: Fri, 24 Feb 2017 16:29:20 +0100 Subject: [PATCH 2/3] fixed Print.cpp and Pint.h --- cores/arduino/Print.cpp | 438 +++++++++++++++++----------------------- cores/arduino/Print.h | 97 ++++----- 2 files changed, 239 insertions(+), 296 deletions(-) mode change 100755 => 100644 cores/arduino/Print.cpp mode change 100755 => 100644 cores/arduino/Print.h diff --git a/cores/arduino/Print.cpp b/cores/arduino/Print.cpp old mode 100755 new mode 100644 index 15ffb32..1190b9b --- a/cores/arduino/Print.cpp +++ b/cores/arduino/Print.cpp @@ -1,77 +1,46 @@ /* - * Print.cpp - Base class that provides print() and println() - * Copyright (c) 2008 David A. Mellis. All right reserved. - * Copyright (c) 2011 LeafLabs, LLC. - * - * 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 23 November 2006 by David A. Mellis - * Modified 12 April 2011 by Marti Bolivar - */ - - /* - * Arduino srl - www.arduino.org - * 2016 Jun 9: Edited Francesco Alessi (alfran) - francesco@arduino.org + Print.cpp - Base class that provides print() and println() + Copyright (c) 2008 David A. Mellis. 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 23 November 2006 by David A. Mellis */ +#include +#include +#include +#include +#include "Arduino.h" #include "Print.h" -#include "wiring_math.h" -#include "limits.h" - -#ifndef LLONG_MAX -/* - * Note: - * - * At time of writing (12 April 2011), the limits.h that came with the - * newlib we distributed didn't include LLONG_MAX. Because we're - * staying away from using templates (see /notes/coding_standard.rst, - * "Language Features and Compiler Extensions"), this value was - * copy-pasted from a println() of the value - * - * std::numeric_limits::max(). - */ -#define LLONG_MAX 9223372036854775807LL -#endif - -/* - * Public methods - */ - -size_t Print::write(const char *str) { - size_t n = 0; - while (*str) { - write(*str++); - n++; - } - return n; -} +// Public Methods ////////////////////////////////////////////////////////////// -size_t Print::write(const void *buffer, uint32 size) { - size_t n = 0; - uint8 *ch = (uint8*)buffer; - while (size--) { - write(*ch++); - n++; - } - return n; +/* default implementation: may be overridden */ +size_t Print::write(const uint8_t *buffer, size_t size) +{ + size_t n = 0; + while (size--) { + n += write(*buffer++); + } + return n; } -size_t Print::print(uint8 b, int base) { - print((uint64)b, base); +size_t Print::print(const __FlashStringHelper *ifsh) +{ + return print(reinterpret_cast(ifsh)); } size_t Print::print(const String &s) @@ -79,234 +48,207 @@ size_t Print::print(const String &s) return write(s.c_str(), s.length()); } -size_t Print::print(char c) { - return write(c); -} - -size_t Print::print(const char str[]) { - return write(str); +size_t Print::print(const char str[]) +{ + return write(str); } -size_t Print::print(int n, int base) { - return print((long long)n, base); +size_t Print::print(char c) +{ + return write(c); } -size_t Print::print(unsigned int n, int base) { - return print((unsigned long long)n, base); +size_t Print::print(unsigned char b, int base) +{ + return print((unsigned long) b, base); } -size_t Print::print(long n, int base) { - return print((long long)n, base); +size_t Print::print(int n, int base) +{ + return print((long) n, base); } -size_t Print::print(unsigned long n, int base) { - return print((unsigned long long)n, base); +size_t Print::print(unsigned int n, int base) +{ + return print((unsigned long) n, base); } -size_t Print::print(long long n, int base) { - if (base == Byte) - { - return write((uint8)n); - } +size_t Print::print(long n, int base) +{ + if (base == 0) { + return write(n); + } else if (base == 10) { if (n < 0) { - print('-'); - n = -n; + int t = print('-'); + n = -n; + return printNumber(n, 10) + t; } + return printNumber(n, 10); + } else { return printNumber(n, base); + } } -size_t Print::print(unsigned long long n, int base) { -size_t c=0; - if (base == Byte) { - c= write((uint8)n); - } else { - c= printNumber(n, base); - } - return c; -} - -size_t Print::print(double n, int digits) { - return printFloat(n, digits); +size_t Print::print(unsigned long n, int base) +{ + if (base == 0) return write(n); + else return printNumber(n, base); } -size_t Print::println(void) +size_t Print::print(double n, int digits) { - size_t n = print('\r'); - n += print('\n'); - return n; + return printFloat(n, digits); } -size_t Print::println(const String &s) +size_t Print::println(const __FlashStringHelper *ifsh) { - size_t n = print(s); + size_t n = print(ifsh); n += println(); return n; } -size_t Print::println(char c) { - size_t n = print(c); - n += println(); - return n; +size_t Print::print(const Printable& x) +{ + return x.printTo(*this); } -size_t Print::println(const char c[]) { - size_t n = print(c); - n += println(); - return n; +size_t Print::println(void) +{ + return write("\r\n"); } -size_t Print::println(uint8 b, int base) { - size_t n = print(b, base); - n += println(); - return n; +size_t Print::println(const String &s) +{ + size_t n = print(s); + n += println(); + return n; } -size_t Print::println(int n, int base) { - size_t s = print(n, base); - s += println(); - return s; +size_t Print::println(const char c[]) +{ + size_t n = print(c); + n += println(); + return n; } -size_t Print::println(unsigned int n, int base) { - size_t s = print(n, base); - s += println(); - return s; +size_t Print::println(char c) +{ + size_t n = print(c); + n += println(); + return n; } -size_t Print::println(long n, int base) { - size_t s = print((long long)n, base); - s += println(); - return s; +size_t Print::println(unsigned char b, int base) +{ + size_t n = print(b, base); + n += println(); + return n; } -size_t Print::println(unsigned long n, int base) { - size_t s = print((unsigned long long)n, base); - s += println(); - return s; +size_t Print::println(int num, int base) +{ + size_t n = print(num, base); + n += println(); + return n; } -size_t Print::println(long long n, int base) { - size_t s = print(n, base); - s += println(); - return s; +size_t Print::println(unsigned int num, int base) +{ + size_t n = print(num, base); + n += println(); + return n; } -size_t Print::println(unsigned long long n, int base) { - size_t s = print(n, base); - s += println(); - return s; +size_t Print::println(long num, int base) +{ + size_t n = print(num, base); + n += println(); + return n; } -size_t Print::println(double n, int digits) { - size_t s = print(n, digits); - s += println(); - return s; +size_t Print::println(unsigned long num, int base) +{ + size_t n = print(num, base); + n += println(); + return n; } -#ifdef SUPPORTS_PRINTF -#include -#include -// Work in progress to support printf. -// Need to implement stream FILE to write individual chars to chosen serial port -int Print::printf (__const char *__restrict __format, ...) - { -FILE *__restrict __stream; - int ret_status = 0; - - - va_list args; - va_start(args,__format); - ret_status = vfprintf(__stream, __format, args); - va_end(args); - return ret_status; - } - #endif - -/* - * Private methods - */ - -size_t Print::printNumber(unsigned long long n, uint8 base) { - unsigned char buf[CHAR_BIT * sizeof(long long)]; - unsigned long i = 0; - size_t s=0; - if (n == 0) { - print('0'); - return 1; - } - - while (n > 0) { - buf[i++] = n % base; - n /= base; - } - - for (; i > 0; i--) { - s += print((char)(buf[i - 1] < 10 ? - '0' + buf[i - 1] : - 'A' + buf[i - 1] - 10)); - } - return s; +size_t Print::println(double num, int digits) +{ + size_t n = print(num, digits); + n += println(); + return n; } +size_t Print::println(const Printable& x) +{ + size_t n = print(x); + n += println(); + return n; +} -/* According to snprintf(), - * - * nextafter((double)numeric_limits::max(), 0.0) ~= 9.22337e+18 - * - * This slightly smaller value was picked semi-arbitrarily. */ -#define LARGE_DOUBLE_TRESHOLD (9.1e18) - -/* THIS FUNCTION SHOULDN'T BE USED IF YOU NEED ACCURATE RESULTS. - * - * This implementation is meant to be simple and not occupy too much - * code size. However, printing floating point values accurately is a - * subtle task, best left to a well-tested library function. - * - * See Steele and White 2003 for more details: - * - * http://kurtstephens.com/files/p372-steele.pdf - */ -size_t Print::printFloat(double number, uint8 digits) { -size_t s=0; - // Hackish fail-fast behavior for large-magnitude doubles - if (abs(number) >= LARGE_DOUBLE_TRESHOLD) { - if (number < 0.0) { - s=print('-'); - } - s+=print(""); - return s; - } - - // Handle negative numbers - if (number < 0.0) { - s+=print('-'); - number = -number; - } - - // Simplistic rounding strategy so that e.g. print(1.999, 2) - // prints as "2.00" - double rounding = 0.5; - for (uint8 i = 0; i < digits; i++) { - rounding /= 10.0; - } - number += rounding; - - // Extract the integer part of the number and print it - long long int_part = (long long)number; - double remainder = number - int_part; - s+=print(int_part); - - // Print the decimal point, but only if there are digits beyond - if (digits > 0) { - s+=print("."); - } - - // Extract digits from the remainder one at a time - while (digits-- > 0) { - remainder *= 10.0; - int to_print = (int)remainder; - s+=print(to_print); - remainder -= to_print; - } - return s; +// Private Methods ///////////////////////////////////////////////////////////// + +size_t Print::printNumber(unsigned long n, uint8_t base) { + char buf[8 * sizeof(long) + 1]; // Assumes 8-bit chars plus zero byte. + char *str = &buf[sizeof(buf) - 1]; + + *str = '\0'; + + // prevent crash if called with base == 1 + if (base < 2) base = 10; + + do { + unsigned long m = n; + n /= base; + char c = m - base * n; + *--str = c < 10 ? c + '0' : c + 'A' - 10; + } while(n); + + return write(str); +} + +size_t Print::printFloat(double number, uint8_t digits) +{ + size_t n = 0; + + if (isnan(number)) return print("nan"); + if (isinf(number)) return print("inf"); + if (number > 4294967040.0) return print ("ovf"); // constant determined empirically + if (number <-4294967040.0) return print ("ovf"); // constant determined empirically + + // Handle negative numbers + if (number < 0.0) + { + n += print('-'); + number = -number; + } + + // Round correctly so that print(1.999, 2) prints as "2.00" + double rounding = 0.5; + for (uint8_t i=0; i 0) { + n += print("."); + } + + // Extract digits from the remainder one at a time + while (digits-- > 0) + { + remainder *= 10.0; + int toPrint = int(remainder); + n += print(toPrint); + remainder -= toPrint; + } + + return n; } diff --git a/cores/arduino/Print.h b/cores/arduino/Print.h old mode 100755 new mode 100644 index 49748b9..736cff3 --- a/cores/arduino/Print.h +++ b/cores/arduino/Print.h @@ -25,60 +25,61 @@ #include #include "WString.h" +#include "Printable.h" -enum { - Byte = 0, - BIN = 2, - OCT = 8, - DEC = 10, - HEX = 16 -}; - -class Print { -public: - virtual size_t write(uint8 ch) = 0; - virtual size_t write(const char *str); - virtual size_t write(const void *buf, uint32 len); + #define DEC 10 +#define HEX 16 +#define OCT 8 +#define BIN 2 - size_t print(const String &); - size_t print(char); - size_t print(const char[]); - size_t print(uint8, int=DEC); - size_t print(int, int=DEC); - size_t print(unsigned int, int=DEC); - size_t print(long, int=DEC); - size_t print(unsigned long, int=DEC); - size_t print(long long, int=DEC); - size_t print(unsigned long long, int=DEC); - size_t print(double, int=2); - size_t println(void); - size_t println(const String &s); - size_t println(char); - size_t println(const char[]); - size_t println(uint8, int=DEC); - size_t println(int, int=DEC); - size_t println(unsigned int, int=DEC); - size_t println(long, int=DEC); - size_t println(unsigned long, int=DEC); - size_t println(long long, int=DEC); - size_t println(unsigned long long, int=DEC); - size_t println(double, int=2); -#ifdef SUPPORTS_PRINTF -// Roger Clark. Work in progress to add printf support - int printf(const char * format, ...); -#endif +class Print +{ + private: + int write_error; + size_t printNumber(unsigned long, uint8_t); + size_t printFloat(double, uint8_t); + protected: + void setWriteError(int err = 1) { write_error = err; } + public: Print() : write_error(0) {} - + int getWriteError() { return write_error; } void clearWriteError() { setWriteError(0); } + + virtual size_t write(uint8_t) = 0; + size_t write(const char *str) { + if (str == NULL) return 0; + return write((const uint8_t *)str, strlen(str)); + } + virtual size_t write(const uint8_t *buffer, size_t size); + size_t write(const char *buffer, size_t size) { + return write((const uint8_t *)buffer, size); + } + + size_t print(const __FlashStringHelper *); + size_t print(const String &); + size_t print(const char[]); + size_t print(char); + size_t print(unsigned char, int = DEC); + size_t print(int, int = DEC); + size_t print(unsigned int, int = DEC); + size_t print(long, int = DEC); + size_t print(unsigned long, int = DEC); + size_t print(double, int = 2); + size_t print(const Printable&); - protected: - void setWriteError(int err = 1) { write_error = err; } - -private: - int write_error; - size_t printNumber(unsigned long long, uint8); - size_t printFloat(double, uint8); + size_t println(const __FlashStringHelper *); + size_t println(const String &s); + size_t println(const char[]); + size_t println(char); + size_t println(unsigned char, int = DEC); + size_t println(int, int = DEC); + size_t println(unsigned int, int = DEC); + size_t println(long, int = DEC); + size_t println(unsigned long, int = DEC); + size_t println(double, int = 2); + size_t println(const Printable&); + size_t println(void); }; #endif From eb1d553181342f2c2411f35cd8595ae3015b55a8 Mon Sep 17 00:00:00 2001 From: alfran Date: Mon, 27 Feb 2017 12:07:56 +0100 Subject: [PATCH 3/3] added pins_arduino.h and modified pins name and related file --- cores/arduino/boards.h | 4 +- variants/otto/otto.h | 246 ------------------------ variants/otto/pins_arduino.h | 21 ++ variants/otto/{otto.cpp => variant.cpp} | 4 +- variants/otto/variant.h | 161 +++++++++++++++- 5 files changed, 183 insertions(+), 253 deletions(-) delete mode 100644 variants/otto/otto.h create mode 100644 variants/otto/pins_arduino.h rename variants/otto/{otto.cpp => variant.cpp} (99%) diff --git a/cores/arduino/boards.h b/cores/arduino/boards.h index 6fc26d7..1b74211 100755 --- a/cores/arduino/boards.h +++ b/cores/arduino/boards.h @@ -50,8 +50,8 @@ #include "memory.h" #include "gpio.h" #include "timer.h" - #include "wiring_types.h" +#include "variant.h" /* Set of all possible pin names; not all boards have all these (note * that we use the Dx convention since all of the Maple's pins are @@ -134,8 +134,6 @@ bool boardUsesPin(uint8 pin); * (...RBT6) on it. Maple Rev6 (as of March 2011) DOES NOT EXIST. */ -#include "otto.h" - /* * TODO turn this into a warning so people can: * diff --git a/variants/otto/otto.h b/variants/otto/otto.h deleted file mode 100644 index 9c229f9..0000000 --- a/variants/otto/otto.h +++ /dev/null @@ -1,246 +0,0 @@ -/****************************************************************************** - * The MIT License - * - * Copyright (c) 2011 LeafLabs, LLC. - * - * Permission is hereby granted, free of charge, to any person - * obtaining a copy of this software and associated documentation - * files (the "Software"), to deal in the Software without - * restriction, including without limitation the rights to use, copy, - * modify, merge, publish, distribute, sublicense, and/or sell copies - * of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS - * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - *****************************************************************************/ - -/** - * @file aeroquad32.h - * @author Marti Bolivar - * @brief Private include file for Maple Native in boards.h - * - * See maple.h for more information on these definitions. - */ - - /* - * 2016 May 31 first release for: - * Adruino OTTO serial ports interface definitions - * - * Arduino srl - * - * Francesco Alessi (alfran) - francesco@arduino.org - */ - - -#ifndef _OTTO_H_ -#define _OTTO_H_ - -#include "stm32f4xx_hal.h" - -#define Port2Pin(port, bit) ((port-'A')*16+bit) - -#define CYCLES_PER_MICROSECOND 180 - -#undef STM32_PCLK1 -#undef STM32_PCLK2 -#define STM32_PCLK1 (CYCLES_PER_MICROSECOND*1000000/4) -#define STM32_PCLK2 (CYCLES_PER_MICROSECOND*1000000/2) - -#define SYSTICK_RELOAD_VAL (CYCLES_PER_MICROSECOND*1000-1) - -// PINs definition - -// USART1 - NOT USED -#define USART1_TX_GPIO_DEV GPIOB_dev -#define USART1_TX_GPIO_PIN 6 -#define USART1_TX_AF 7 -#define USART1_RX_GPIO_DEV GPIOB_dev -#define USART1_RX_GPIO_PIN 7 -#define USART1_RX_AF 7 - -// USART2 - Serial2 -#define USART2_TX_GPIO_DEV GPIOD_dev -#define USART2_TX_GPIO_PIN 5 -#define USART2_TX_AF 7 -#define USART2_RX_GPIO_DEV GPIOD_dev -#define USART2_RX_GPIO_PIN 6 -#define USART2_RX_AF 7 - -// USART3 - Serial1 / SerialESP -#define USART3_TX_GPIO_DEV GPIOB_dev -#define USART3_TX_GPIO_PIN 10 -#define USART3_TX_AF 7 -#define USART3_RX_GPIO_DEV GPIOB_dev -#define USART3_RX_GPIO_PIN 11 -#define USART3_RX_AF 7 - -// UART4 - Serial0 -#define UART4_TX_GPIO_DEV GPIOA_dev -#define UART4_TX_GPIO_PIN 0 -#define UART4_TX_AF 8 -#define UART4_RX_GPIO_DEV GPIOA_dev -#define UART4_RX_GPIO_PIN 1 -#define UART4_RX_AF 8 - -// UART5 - NOT USED -#define UART5_TX_GPIO_DEV GPIOD_dev -#define UART5_TX_GPIO_PIN 2 -#define UART5_TX_AF 8 -#define UART5_RX_GPIO_DEV GPIOC_dev -#define UART5_RX_GPIO_PIN 12 -#define UART5_RX_AF 8 - -// USART6 - Serial3 -#define USART6_TX_GPIO_DEV GPIOG_dev -#define USART6_TX_GPIO_PIN 14 -#define USART6_TX_AF 8 -#define USART6_RX_GPIO_DEV GPIOG_dev -#define USART6_RX_GPIO_PIN 9 -#define USART6_RX_AF 8 - -// UART7 - NOT USED -#define UART7_TX_GPIO_DEV GPIOF_dev -#define UART7_TX_GPIO_PIN 7 -#define UART7_TX_AF 8 -#define UART7_RX_GPIO_DEV GPIOF_dev -#define UART7_RX_GPIO_PIN 6 -#define UART7_RX_AF 8 - -// UART8 - NOT USED -#define UART8_TX_GPIO_DEV GPIOE_dev -#define UART8_TX_GPIO_PIN 0 -#define UART8_TX_AF 8 -#define UART8_RX_GPIO_DEV GPIOE_dev -#define UART8_RX_GPIO_PIN 1 -#define UART8_RX_AF 8 - -#define GPIO_PINS 165 -#define BOARD_NR_PWM_PINS 26 -#define BOARD_NR_ADC_PINS 14 -#define BOARD_NR_USED_PINS 80 - -// Analog PIN Definition -#define A0 D54 -#define A1 D55 -#define A2 D56 -#define A3 D57 -#define A4 D58 -#define A5 D59 -#define A6 D60 -#define A7 D61 -#define A8 D62 -#define A9 D63 -#define A10 D64 -#define A11 D65 -#define A12 D66 -#define A13 D67 - -// DAC PIN Definition -#define DAC0 D66 -#define DAC1 D67 - -// LEDs PIN Definition -#define LED_L D13 -#define LED_BUILTIN D13 - -// CAN PIN -#define CANRX_PIN D68 -#define CANTX_PIN D69 - -// SPI PIN -#define MISO_PIN D72 -#define SCK_PIN D73 -#define MOSI_PIN D74 -#define SS_PIN D23 -#define MISO1_PIN D12 -#define SCK1_PIN D13 -#define MOSI1_PIN D11 -#define SS1_PIN D10 - -// I2C PIN -#define SCL_PIN D70 -#define SDA_PIN D71 -#define SDA1_PIN D20 -#define SCL1_PIN D21 - -// SERIAL PORT PIN -#define RX0_PIN D0 -#define TX0_PIN D1 -#define RX1_PIN D19 -#define TX1_PIN D18 -#define RX2_PIN D17 -#define TX2_PIN D16 -#define RX3_PIN D15 -#define TX3_PIN D14 - -// WIFI POWER PIN -#define WIFI_PWR D75 - -// USB POWER PIN -#define USB_PWR D76 - -// LCD CONTROL -#define LCD_BL D77 - -// MIC SEL -#define MIC_SEL D78 -#define CODEC 0 -#define MCU 1 - - - - -enum { -PA0,PA1,PA2,PA3,PA4,PA5,PA6,PA7,PA8,PA9,PA10,PA11,PA12,PA13,PA14,PA15, -PB0,PB1,PB2,PB3,PB4,PB5,PB6,PB7,PB8,PB9,PB10,PB11,PB12,PB13,PB14,PB15, -PC0,PC1,PC2,PC3,PC4,PC5,PC6,PC7,PC8,PC9,PC10,PC11,PC12,PC13,PC14,PC15, -PD0,PD1,PD2,PD3,PD4,PD5,PD6,PD7,PD8,PD9,PD10,PD11,PD12,PD13,PD14,PD15, -PE0,PE1,PE2,PE3,PE4,PE5,PE6,PE7,PE8,PE9,PE10,PE11,PE12,PE13,PE14,PE15, -PF0,PF1,PF2,PF3,PF4,PF5,PF6,PF7,PF8,PF9,PF10,PF11,PF12,PF13,PF14,PF15, -PG0,PG1,PG2,PG3,PG4,PG5,PG6,PG7,PG8,PG9,PG10,PG11,PG12,PG13,PG14,PG15, -PH0,PH1,PH2,PH3,PH4,PH5,PH6,PH7,PH8,PH9,PH10,PH11,PH12,PH13,PH14,PH15 -// alfran --- begin -, -PI0,PI1,PI2,PI3,PI4,PI5,PI6,PI7,PI8,PI9,PI10,PI11,PI12,PI13,PI14,PI15, -PJ0,PJ1,PJ2,PJ3,PJ4,PJ5,PJ6,PJ7,PJ8,PJ9,PJ10,PJ11,PJ12,PJ13,PJ14,PJ15, -PK0,PK1,PK2,PK3,PK4,PK5,PK6,PK7,PK8,PK9,PK10,PK11,PK12,PK13,PK14,PK15, -// alfran --- end -}; - -/* -// alfran --- begin - -enum { -PC7,PC6,PD13,PD12,PB12,PB7,PB11,PB13,PA3,PA6,PA15,PA7,PA9,PC8,PC10, -PC11,PD5,PD6,PC5,PC4,PH5,PH4,PJ1,PJ0,PI15,PI14,PI13,PI12,PI11,PI8, -PH7,PH6,PG14,PG13,PG12,PG11,PG10,PG9,PG7,PG6,PJ3,PG3,PE2,PE3,PE4, -PE5,PE6,PD7,PD11,PB4,PC13,PB5,PG2,PB6,PB0,PB1,PC0,PF6,PF7,PF8, -PF9,PF10,PC1,PC2,PC3,PA1,PA2,PA4,PA5,PB8,PB9,PB14,PB10,PB15,PA8, -PC9,PJ2,PJ5,PD3,PD4,PB2,PA10,PA0, - -PA11,PA12,PA13,PA14, -PB3, -PC12,PC14,PC15, -PD0,PD1,PD2,PD8,PD9,PD10,PD14,PD15, -PE0,PE1,PE7,PE8,PE9,PE10,PE11,PE12,PE13,PE14,PE15, -PF0,PF1,PF2,PF3,PF4,PF5,PF11,PF12,PF13,PF14,PF15, -PG0,PG1,PG4,PG5,PG8,PG15, -PH0,PH1,PH2,PH3,PH8,PH9,PH10,PH11,PH12,PH13,PH14,PH15, -PI0,PI1,PI2,PI3,PI4,PI5,PI6,PI7,PI9,PI10, -PJ4,PJ6,PJ7,PJ8,PJ9,PJ10,PJ11,PJ12,PJ13,PJ14,PJ15, -PK0,PK1,PK2,PK3,PK4,PK5,PK6,PK7,PK8,PK9,PK10,PK11,PK12,PK13,PK14,PK15, -// alfran --- end -}; -*/ - -#endif diff --git a/variants/otto/pins_arduino.h b/variants/otto/pins_arduino.h new file mode 100644 index 0000000..4e279aa --- /dev/null +++ b/variants/otto/pins_arduino.h @@ -0,0 +1,21 @@ +/* + Copyright (c) 2011 Arduino. 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 +*/ + +// API compatibility +#include "variant.h" + diff --git a/variants/otto/otto.cpp b/variants/otto/variant.cpp similarity index 99% rename from variants/otto/otto.cpp rename to variants/otto/variant.cpp index abab834..3721765 100644 --- a/variants/otto/otto.cpp +++ b/variants/otto/variant.cpp @@ -40,7 +40,8 @@ * 2016 Dec 20: Modified for HW rev 3 */ -#include "otto.h" +//#include "otto.h" +#include "variant.h" #include "gpio.h" #include "rcc.h" @@ -243,4 +244,3 @@ extern const uint8 boardPWMPins[BOARD_NR_PWM_PINS] __FLASH__ = { extern const uint8 boardADCPins[BOARD_NR_ADC_PINS] __FLASH__ = { 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67 }; - diff --git a/variants/otto/variant.h b/variants/otto/variant.h index c9cf7cf..1395a45 100644 --- a/variants/otto/variant.h +++ b/variants/otto/variant.h @@ -1,7 +1,9 @@ #ifndef _VARIANT_ARDUINO_STM32_ #define _VARIANT_ARDUINO_STM32_ -#include "otto.h" +#ifndef _OTTO_H_ +#define _OTTO_H_ + #define digitalPinToPort(P) ( PIN_MAP[P].gpio_device ) #define digitalPinToBitMask(P) ( BIT(PIN_MAP[P].gpio_bit) ) @@ -13,4 +15,159 @@ #define portConfigRegister(pin) ( &(PIN_MAP[pin].gpio_device->regs->CRL) ) -#endif /* _VARIANT_ARDUINO_STM32_ */ +#include "stm32f4xx_hal.h" + +#define Port2Pin(port, bit) ((port-'A')*16+bit) + +#define CYCLES_PER_MICROSECOND 180 + +#undef STM32_PCLK1 +#undef STM32_PCLK2 +#define STM32_PCLK1 (CYCLES_PER_MICROSECOND*1000000/4) +#define STM32_PCLK2 (CYCLES_PER_MICROSECOND*1000000/2) + +#define SYSTICK_RELOAD_VAL (CYCLES_PER_MICROSECOND*1000-1) + +// PINs definition + +// USART1 - NOT USED +#define USART1_TX_GPIO_DEV GPIOB_dev +#define USART1_TX_GPIO_PIN 6 +#define USART1_TX_AF 7 +#define USART1_RX_GPIO_DEV GPIOB_dev +#define USART1_RX_GPIO_PIN 7 +#define USART1_RX_AF 7 + +// USART2 - Serial2 +#define USART2_TX_GPIO_DEV GPIOD_dev +#define USART2_TX_GPIO_PIN 5 +#define USART2_TX_AF 7 +#define USART2_RX_GPIO_DEV GPIOD_dev +#define USART2_RX_GPIO_PIN 6 +#define USART2_RX_AF 7 + +// USART3 - Serial1 / SerialESP +#define USART3_TX_GPIO_DEV GPIOB_dev +#define USART3_TX_GPIO_PIN 10 +#define USART3_TX_AF 7 +#define USART3_RX_GPIO_DEV GPIOB_dev +#define USART3_RX_GPIO_PIN 11 +#define USART3_RX_AF 7 + +// UART4 - Serial0 +#define UART4_TX_GPIO_DEV GPIOA_dev +#define UART4_TX_GPIO_PIN 0 +#define UART4_TX_AF 8 +#define UART4_RX_GPIO_DEV GPIOA_dev +#define UART4_RX_GPIO_PIN 1 +#define UART4_RX_AF 8 + +// UART5 - NOT USED +#define UART5_TX_GPIO_DEV GPIOD_dev +#define UART5_TX_GPIO_PIN 2 +#define UART5_TX_AF 8 +#define UART5_RX_GPIO_DEV GPIOC_dev +#define UART5_RX_GPIO_PIN 12 +#define UART5_RX_AF 8 + +// USART6 - Serial3 +#define USART6_TX_GPIO_DEV GPIOG_dev +#define USART6_TX_GPIO_PIN 14 +#define USART6_TX_AF 8 +#define USART6_RX_GPIO_DEV GPIOG_dev +#define USART6_RX_GPIO_PIN 9 +#define USART6_RX_AF 8 + +// UART7 - NOT USED +#define UART7_TX_GPIO_DEV GPIOF_dev +#define UART7_TX_GPIO_PIN 7 +#define UART7_TX_AF 8 +#define UART7_RX_GPIO_DEV GPIOF_dev +#define UART7_RX_GPIO_PIN 6 +#define UART7_RX_AF 8 + +// UART8 - NOT USED +#define UART8_TX_GPIO_DEV GPIOE_dev +#define UART8_TX_GPIO_PIN 0 +#define UART8_TX_AF 8 +#define UART8_RX_GPIO_DEV GPIOE_dev +#define UART8_RX_GPIO_PIN 1 +#define UART8_RX_AF 8 + +#define GPIO_PINS 165 +#define BOARD_NR_PWM_PINS 26 +#define BOARD_NR_ADC_PINS 14 +#define BOARD_NR_USED_PINS 80 + +// Analog PIN Definition +#define A0 D54 +#define A1 D55 +#define A2 D56 +#define A3 D57 +#define A4 D58 +#define A5 D59 +#define A6 D60 +#define A7 D61 +#define A8 D62 +#define A9 D63 +#define A10 D64 +#define A11 D65 +#define A12 D66 +#define A13 D67 + +// DAC PIN Definition +#define DAC0 D66 +#define DAC1 D67 + +// LEDs PIN Definition +#define LED_L D13 +#define LED_BUILTIN D13 + +// CAN PIN +#define CANRX D68 +#define CANTX D69 +// #define CANRX1 D +// #define CANTX1 D + +// SPI PIN +#define MISO D72 +#define SCK D73 +#define MOSI D74 +#define SS D23 +#define MISO1 D12 +#define SCK1 D13 +#define MOSI1 D11 +#define SS1 D10 + +// I2C PIN +#define SCL D70 +#define SDA D71 +#define SDA1 D20 +#define SCL1 D21 + +// SERIAL PORT PIN +#define RX D0 +#define TX D1 +#define RX1 D19 +#define TX1 D18 +#define RX2 D17 +#define TX2 D16 +#define RX3 D15 +#define TX3 D14 + +// WIFI POWER PIN +#define WIFI_PWR D75 + +// USB POWER PIN +#define USB_PWR D76 + +// LCD CONTROL +#define LCD_BL D77 + +// MIC SEL +#define MIC_SEL D78 +#define CODEC 0 +#define MCU 1 + +#endif +#endif