From 865dd561efdfc3ea3a6bbf9de90596356aaa4d4c Mon Sep 17 00:00:00 2001 From: Rob Giseburt Date: Mon, 26 Feb 2018 18:41:31 -0600 Subject: [PATCH] Add gQuadratic rev C (need to fix motors still) --- g2core/board/gquadratic.mk | 6 + g2core/board/gquadratic/board_gpio.cpp | 35 +-- g2core/board/gquadratic/board_gpio.h | 23 +- g2core/board/gquadratic/board_xio.cpp | 1 + g2core/board/gquadratic/board_xio.h | 2 +- g2core/board/gquadratic/gquadratic-b-pinout.h | 6 +- g2core/board/gquadratic/gquadratic-c-pinout.h | 205 ++++++++++++++++++ .../board/gquadratic/motate_pin_assignments.h | 15 +- 8 files changed, 235 insertions(+), 58 deletions(-) create mode 100644 g2core/board/gquadratic/gquadratic-c-pinout.h diff --git a/g2core/board/gquadratic.mk b/g2core/board/gquadratic.mk index 9527cdc1..c426b7cb 100755 --- a/g2core/board/gquadratic.mk +++ b/g2core/board/gquadratic.mk @@ -18,6 +18,12 @@ ifeq ("$(BOARD)","gquadratic-b") DEVICE_DEFINES += SETTINGS_FILE=${SETTINGS_FILE} endif +ifeq ("$(BOARD)","gquadratic-c") + BASE_BOARD=gquadratic + DEVICE_DEFINES += MOTATE_BOARD="gquadratic-c" + DEVICE_DEFINES += SETTINGS_FILE=${SETTINGS_FILE} +endif + ########## # The general gquadratic BASE_BOARD. diff --git a/g2core/board/gquadratic/board_gpio.cpp b/g2core/board/gquadratic/board_gpio.cpp index 5033c3f1..614f4e0e 100644 --- a/g2core/board/gquadratic/board_gpio.cpp +++ b/g2core/board/gquadratic/board_gpio.cpp @@ -56,37 +56,18 @@ /**** Setup Actual Objects ****/ -gpioDigitalInputPin> din1 {DI1_ENABLED, DI1_POLARITY, 1}; -gpioDigitalInputPin> din2 {DI2_ENABLED, DI2_POLARITY, 2}; -gpioDigitalInputPin> din3 {DI3_ENABLED, DI3_POLARITY, 3}; -gpioDigitalInputPin> din4 {DI4_ENABLED, DI4_POLARITY, 4}; -gpioDigitalInputPin> din5 {DI5_ENABLED, DI5_POLARITY, 5}; -gpioDigitalInputPin> din6 {DI6_ENABLED, DI6_POLARITY, 6}; -gpioDigitalInputPin> din7 {DI7_ENABLED, DI7_POLARITY, 7}; -gpioDigitalInputPin> din8 {DI8_ENABLED, DI8_POLARITY, 8}; -gpioDigitalInputPin> din9 {DI9_ENABLED, DI9_POLARITY, 9}; -// gpioDigitalInputPin> din10 {DI10ENABLEDE, DI10_POLARITY, 10}; -// gpioDigitalInputPin> din11 {DI11ENABLEDE, DI11_POLARITY, 11}; -// gpioDigitalInputPin> din12 {DI12ENABLEDE, DI12_POLARITY, 12}; +gpioDigitalInputPin> din1 {DI1_ENABLED, DI1_POLARITY, 1, DI1_EXTERNAL_NUMBER}; +gpioDigitalInputPin> din2 {DI2_ENABLED, DI2_POLARITY, 2, DI2_EXTERNAL_NUMBER}; +gpioDigitalInputPin> din3 {DI3_ENABLED, DI3_POLARITY, 3, DI3_EXTERNAL_NUMBER}; +gpioDigitalInputPin> din4 {DI4_ENABLED, DI4_POLARITY, 4, DI4_EXTERNAL_NUMBER}; -gpioDigitalOutputPin> dout1 { DO1_ENABLED, DO1_POLARITY, (uint32_t)200000 }; -gpioDigitalOutputPin> dout2 { DO2_ENABLED, DO2_POLARITY, (uint32_t)200000 }; -gpioDigitalOutputPin> dout3 { DO3_ENABLED, DO3_POLARITY, (uint32_t)200000 }; -gpioDigitalOutputPin> dout4 { DO4_ENABLED, DO4_POLARITY, (uint32_t)200000 }; -gpioDigitalOutputPin> dout5 { DO5_ENABLED, DO5_POLARITY, (uint32_t)200000 }; -gpioDigitalOutputPin> dout6 { DO6_ENABLED, DO6_POLARITY, (uint32_t)200000 }; -gpioDigitalOutputPin> dout7 { DO7_ENABLED, DO7_POLARITY, (uint32_t)200000 }; -gpioDigitalOutputPin> dout8 { DO8_ENABLED, DO8_POLARITY, (uint32_t)200000 }; -gpioDigitalOutputPin> dout9 { DO9_ENABLED, DO9_POLARITY, (uint32_t)200000 }; -gpioDigitalOutputPin> dout10 { DO10_ENABLED, DO10_POLARITY, (uint32_t)200000 }; -gpioDigitalOutputPin> dout11 { DO11_ENABLED, DO11_POLARITY, (uint32_t)200000 }; -gpioDigitalOutputPin> dout12 { DO12_ENABLED, DO12_POLARITY, (uint32_t)200000 }; -gpioDigitalOutputPin> dout13 { DO13_ENABLED, DO13_POLARITY, (uint32_t)200000 }; +gpioDigitalOutputPin> dout1 { DO1_ENABLED, DO1_POLARITY, DO1_EXTERNAL_NUMBER, (uint32_t)200000 }; +gpioDigitalOutputPin> dout2 { DO2_ENABLED, DO2_POLARITY, DO2_EXTERNAL_NUMBER, (uint32_t)200000 }; /**** Setup Arrays - these are extern and MUST match the board_gpio.h ****/ -gpioDigitalInput* const d_in[] = {&din1, &din2, &din3, &din4, &din5, &din6, &din7, &din8, &din9}; -gpioDigitalOutput* const d_out[] = {&dout1, &dout2, &dout3, &dout4, &dout5, &dout6, &dout7, &dout8, &dout9, &dout10, &dout11, &dout12, &dout13}; +gpioDigitalInput* const d_in[] = {&din1, &din2, &din3, &din4}; +gpioDigitalOutput* const d_out[] = {&dout1, &dout2}; // not yet used // gpioAnalogInput* a_in[A_IN_CHANNELS]; // gpioAnalogOutput* a_out[A_OUT_CHANNELS]; diff --git a/g2core/board/gquadratic/board_gpio.h b/g2core/board/gquadratic/board_gpio.h index 25a1cddc..c596fc54 100644 --- a/g2core/board/gquadratic/board_gpio.h +++ b/g2core/board/gquadratic/board_gpio.h @@ -36,8 +36,8 @@ */ //--- change as required for board and switch hardware ---// -#define D_IN_CHANNELS 9 // v9 // number of digital inputs supported -#define D_OUT_CHANNELS 13 // number of digital outputs supported +#define D_IN_CHANNELS 4 // number of digital inputs supported +#define D_OUT_CHANNELS 2 // number of digital outputs supported #define A_IN_CHANNELS 0 // number of analog inputs supported #define A_OUT_CHANNELS 0 // number of analog outputs supported @@ -63,28 +63,9 @@ extern gpioDigitalInputPin> din1; extern gpioDigitalInputPin> din2; extern gpioDigitalInputPin> din3; extern gpioDigitalInputPin> din4; -extern gpioDigitalInputPin> din5; -extern gpioDigitalInputPin> din6; -extern gpioDigitalInputPin> din7; -extern gpioDigitalInputPin> din8; -extern gpioDigitalInputPin> din9; -// extern gpioDigitalInputPin> din10; -// extern gpioDigitalInputPin> din11; -// extern gpioDigitalInputPin> din12; extern gpioDigitalOutputPin> dout1; extern gpioDigitalOutputPin> dout2; -extern gpioDigitalOutputPin> dout3; -extern gpioDigitalOutputPin> dout4; -extern gpioDigitalOutputPin> dout5; -extern gpioDigitalOutputPin> dout6; -extern gpioDigitalOutputPin> dout7; -extern gpioDigitalOutputPin> dout8; -extern gpioDigitalOutputPin> dout9; -extern gpioDigitalOutputPin> dout10; -extern gpioDigitalOutputPin> dout11; -extern gpioDigitalOutputPin> dout12; -extern gpioDigitalOutputPin> dout13; #endif // End of include guard: BOARD_GPIO_H_ONCE diff --git a/g2core/board/gquadratic/board_xio.cpp b/g2core/board/gquadratic/board_xio.cpp index c48356be..077df084 100755 --- a/g2core/board/gquadratic/board_xio.cpp +++ b/g2core/board/gquadratic/board_xio.cpp @@ -71,6 +71,7 @@ void board_hardware_init(void) // called 1st #if XIO_HAS_USB // Init USB usb.attach(); + usb.handleVbusChange(true); #endif // XIO_HAS_USB } diff --git a/g2core/board/gquadratic/board_xio.h b/g2core/board/gquadratic/board_xio.h index 6055d461..659f68a4 100755 --- a/g2core/board/gquadratic/board_xio.h +++ b/g2core/board/gquadratic/board_xio.h @@ -36,7 +36,7 @@ #include "MotateUSB.h" #include "MotateUSBCDC.h" -typedef Motate::USBDeviceHardwareBus> USBDeviceHardware_t; +typedef Motate::USBDeviceHardwareVBus> USBDeviceHardware_t; #if USB_SERIAL_PORTS_EXPOSED == 1 typedef Motate::USBDevice< USBDeviceHardware_t, Motate::USBCDC > XIOUSBDevice_t; diff --git a/g2core/board/gquadratic/gquadratic-b-pinout.h b/g2core/board/gquadratic/gquadratic-b-pinout.h index 6eab0184..7eb8946b 100755 --- a/g2core/board/gquadratic/gquadratic-b-pinout.h +++ b/g2core/board/gquadratic/gquadratic-b-pinout.h @@ -2,8 +2,8 @@ * gquadratic-b-pinout.h - board pinout specification * This file is part of the g2core project * - * Copyright (c) 2016 Robert Giseburt - * Copyright (c) 2016 Alden S. Hart Jr. + * Copyright (c) 2016-2018 Robert Giseburt + * Copyright (c) 2016-2018 Alden S. Hart Jr. * * This file is part of the Motate Library. * @@ -108,6 +108,8 @@ #define OUTPUT12_PWM 0 // Unused #define OUTPUT13_PWM 0 // Unused +#define QUADRATIC_REVISION 'B' + namespace Motate { // Arduino pin name & function diff --git a/g2core/board/gquadratic/gquadratic-c-pinout.h b/g2core/board/gquadratic/gquadratic-c-pinout.h new file mode 100644 index 00000000..dd8fd42f --- /dev/null +++ b/g2core/board/gquadratic/gquadratic-c-pinout.h @@ -0,0 +1,205 @@ +/* + * gquadratic-c-pinout.h - board pinout specification + * This file is part of the g2core project + * + * Copyright (c) 2018 Robert Giseburt + * Copyright (c) 2018 Alden S. Hart Jr. + * + * This file is part of the Motate Library. + * + * This file ("the software") is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License, version 2 as published by the + * Free Software Foundation. You should have received a copy of the GNU General Public + * License, version 2 along with the software. If not, see . + * + * As a special exception, you may use this file as part of a software library without + * restriction. Specifically, if other files instantiate templates or use macros or + * inline functions from this file, or you compile this file and link it with other + * files to produce an executable, this file does not by itself cause the resulting + * executable to be covered by the GNU General Public License. This exception does not + * however invalidate any other reasons why the executable file might be covered by the + * GNU General Public License. + * + * THE SOFTWARE IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT WITHOUT ANY + * 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. + * + */ + +#ifndef GQUADRATIC_C_PINOUT_H +#define GQUADRATIC_C_PINOUT_H + +/* + * USAGE NOTES + * + * Read this first: + * https://github.com/synthetos/g2/wiki/Adding-a-new-G2-board-(or-revision)-to-G2#making-a-new-pin-assignment + * + * USAGE: + * + * This file is lays out all the pin capabilities of the SAM3X8C organized by pin number. + * Each pin has its associated functions listed at the bottom of the file, and is essentially + * immutable for each processor. + * + * To use, assign Motate pin numbers to the first value in the _MAKE_MOTATE_PIN() macro. + * ALL PINS MUST BE ASSIGNED A NUMBER, even if they are not used. There will NOT be a + * code-size or speed penalty for unused pins, but the WILL be a compiler-failure for + * unassigned pins. This new restriction allows for simplification of linkages deep in + * Motate. + */ +/* See motate_pin_assignments.h for pin names to be used int he rest of the G2 code. + * EXAMPLES: + * + * *** Vanilla pin example *** + * + * _MAKE_MOTATE_PIN(4, A, 'A', 27); // SPI0_SCKPinNumber + * + * This assigns Motate pin 4 to Port A, pin 27 (A27) + * Look in motate_pin_assignments.h to see that this is kSPI_SCKPinNumber + * + * ** Other pin functions *** + * + * Please look in /platform/atmel_sam/motate_chip_pin_functions.h + */ + + +#include + +// We don't have all of the inputs, so we have to indicate as much: +#define INPUT1_AVAILABLE 1 +#define INPUT2_AVAILABLE 1 +#define INPUT3_AVAILABLE 1 +#define INPUT4_AVAILABLE 1 +#define INPUT5_AVAILABLE 0 +#define INPUT6_AVAILABLE 0 +#define INPUT7_AVAILABLE 0 +#define INPUT8_AVAILABLE 0 +#define INPUT9_AVAILABLE 0 +#define INPUT10_AVAILABLE 0 +#define INPUT11_AVAILABLE 0 +#define INPUT12_AVAILABLE 0 +#define INPUT13_AVAILABLE 0 + +#define XIO_HAS_USB 1 +#define XIO_HAS_UART 1 +#define XIO_HAS_SPI 0 +#define XIO_HAS_I2C 0 + +#define TEMPERATURE_OUTPUT_ON 0 // NO ADC yet + +// Some pins, if the PWM capability is turned on, it will cause timer conflicts. +// So we have to explicitly enable them as PWM pins. +// Generated with: +// perl -e 'for($i=1;$i<14;$i++) { print "#define OUTPUT${i}_PWM 0\n";}' +#define OUTPUT1_PWM 1 // TC0.0 +#define OUTPUT2_PWM 1 // PWM0.0 +#define OUTPUT3_PWM 1 // TC0.1 +#define OUTPUT4_PWM 1 // PWM1.3 +#define OUTPUT5_PWM 0 // unused +#define OUTPUT6_PWM 0 // unused +#define OUTPUT7_PWM 0 // unused +#define OUTPUT8_PWM 0 // unused +#define OUTPUT9_PWM 0 // unused +#define OUTPUT10_PWM 0 // unused +#define OUTPUT11_PWM 0 // unused +#define OUTPUT12_PWM 0 // Unused +#define OUTPUT13_PWM 0 // Unused + +#define QUADRATIC_REVISION 'C' + +namespace Motate { + +// Arduino pin name & function +_MAKE_MOTATE_PIN(kOutput1_PinNumber, 'A', 0); // TC0.0 or PWM0 +_MAKE_MOTATE_PIN(kOutput2_PinNumber, 'A', 1); // TC0.1 or PWM1 +_MAKE_MOTATE_PIN(kUnassigned1, 'A', 2); // PWM1 +_MAKE_MOTATE_PIN(kI2C1_SDAPinNumber, 'A', 3); // +_MAKE_MOTATE_PIN(kI2C1_SCLPinNumber, 'A', 4); // +_MAKE_MOTATE_PIN(kUnassigned2, 'A', 5); // +_MAKE_MOTATE_PIN(kUnassigned3, 'A', 6); // Missing in 100-pin package +_MAKE_MOTATE_PIN(kUnassigned4, 'A', 7); // +_MAKE_MOTATE_PIN(kUnassigned5, 'A', 8); // +_MAKE_MOTATE_PIN(kSerial_RXPinNumber, 'A', 9); // +_MAKE_MOTATE_PIN(kSerial_TXPinNumber, 'A', 10); // +_MAKE_MOTATE_PIN(kSocket1_StepPinNumber, 'A', 11); // +_MAKE_MOTATE_PIN(kUnassigned6, 'A', 12); // +_MAKE_MOTATE_PIN(kUnassigned7, 'A', 13); // +_MAKE_MOTATE_PIN(kUnassigned8, 'A', 14); // +_MAKE_MOTATE_PIN(kUnassigned9, 'A', 15); // +_MAKE_MOTATE_PIN(kUnassigned10, 'A', 16); // +_MAKE_MOTATE_PIN(kUnassigned11, 'A', 17); // +_MAKE_MOTATE_PIN(kUnassigned12, 'A', 18); // +_MAKE_MOTATE_PIN(kUnassigned13, 'A', 19); // +_MAKE_MOTATE_PIN(kUnassigned14, 'A', 20); // +_MAKE_MOTATE_PIN(kUnassigned15, 'A', 21); // +_MAKE_MOTATE_PIN(kUnassigned16, 'A', 22); // +_MAKE_MOTATE_PIN(kUnassigned17, 'A', 23); // +_MAKE_MOTATE_PIN(kUnassigned18, 'A', 24); // DIAG0 +_MAKE_MOTATE_PIN(kUnassigned19, 'A', 25); // +_MAKE_MOTATE_PIN(kSocket1_DirPinNumber, 'A', 26); // +_MAKE_MOTATE_PIN(kUnassigned20, 'A', 27); // TC2.1 +_MAKE_MOTATE_PIN(kSerial_CTSPinNumber, 'A', 28); // +_MAKE_MOTATE_PIN(kUnassigned21, 'A', 29); // Missing in 100-pin package +_MAKE_MOTATE_PIN(kServo1_PinNumber, 'A', 30); // PWM2 - kOutput3_PinNumber +_MAKE_MOTATE_PIN(kInput4_PinNumber, 'A', 31); // + +_MAKE_MOTATE_PIN(kUnassigned22, 'B', 0); // +_MAKE_MOTATE_PIN(kUnassigned23, 'B', 1); // +_MAKE_MOTATE_PIN(kSocket3_SPISlaveSelectPinNumber, 'B', 2); // +_MAKE_MOTATE_PIN(kUnassigned24, 'B', 3); // +//_MAKE_MOTATE_PIN( , 'B', 4); // TDI +//_MAKE_MOTATE_PIN( , 'B', 5); // TRACESDO +//_MAKE_MOTATE_PIN( , 'B', 6); // SWDIO +//_MAKE_MOTATE_PIN( , 'B', 7); // SWDCLK +//_MAKE_MOTATE_PIN( , 'B', 8); // XOUT +//_MAKE_MOTATE_PIN( , 'B', 9); // XIN +//_MAKE_MOTATE_PIN( , 'B', 10); // USB_D- +//_MAKE_MOTATE_PIN( , 'B', 11); // USB_D+ +//_MAKE_MOTATE_PIN( , 'B', 12); // ERASE +_MAKE_MOTATE_PIN(kUnassigned25, 'B', 13); // + +_MAKE_MOTATE_PIN(kUSBVBUS_PinNumber, 'D', 0); // USB_VBUS +_MAKE_MOTATE_PIN(kInput1_PinNumber, 'D', 1); // +_MAKE_MOTATE_PIN(kInput2_PinNumber, 'D', 2); // +_MAKE_MOTATE_PIN(kUnassigned26, 'D', 3); // +_MAKE_MOTATE_PIN(kUnassigned27, 'D', 4); // +_MAKE_MOTATE_PIN(kUnassigned28, 'D', 5); // +_MAKE_MOTATE_PIN(kInput3_PinNumber, 'D', 6); // +_MAKE_MOTATE_PIN(kSerial_RTSPinNumber, 'D', 7); // +_MAKE_MOTATE_PIN(kUnassigned29, 'D', 8); // INTERRUPT_OUT +_MAKE_MOTATE_PIN(kUnassigned30, 'D', 9); // +_MAKE_MOTATE_PIN(kUnassigned31, 'D', 10); // +_MAKE_MOTATE_PIN(kLED_RGBWPixelPinNumber, 'D', 11); // PWM0 - kOutput4_PinNumber +_MAKE_MOTATE_PIN(kSocket4_SPISlaveSelectPinNumber, 'D', 12); // +_MAKE_MOTATE_PIN(kSocket2_EnablePinNumber, 'D', 13); // +_MAKE_MOTATE_PIN(kSocket2_StepPinNumber, 'D', 14); // +_MAKE_MOTATE_PIN(kOutputSAFE_PinNumber, 'D', 15); // +_MAKE_MOTATE_PIN(kSocket2_DirPinNumber, 'D', 16); // +_MAKE_MOTATE_PIN(kUnassigned32, 'D', 17); // +_MAKE_MOTATE_PIN(kUnassigned33, 'D', 18); // +_MAKE_MOTATE_PIN(kUnassigned34, 'D', 19); // +_MAKE_MOTATE_PIN(kSPI0_MISOPinNumber, 'D', 20); // +_MAKE_MOTATE_PIN(kSPI0_MOSIPinNumber, 'D', 21); // +_MAKE_MOTATE_PIN(kSPI0_SCKPinNumber, 'D', 22); // +_MAKE_MOTATE_PIN(kUnassigned35, 'D', 23); // Missing in 100-pin package +_MAKE_MOTATE_PIN(kUnassigned36, 'D', 24); // DIAG1 +_MAKE_MOTATE_PIN(kSocket1_SPISlaveSelectPinNumber, 'D', 25); // +_MAKE_MOTATE_PIN(kSocket1_EnablePinNumber, 'D', 26); // +_MAKE_MOTATE_PIN(kSocket2_SPISlaveSelectPinNumber, 'D', 27); // +_MAKE_MOTATE_PIN(kUnassigned37, 'D', 28); // +_MAKE_MOTATE_PIN(kUnassigned38, 'D', 29); // Missing in 100-pin package +_MAKE_MOTATE_PIN(kLEDPWM_PinNumber, 'D', 30); // +_MAKE_MOTATE_PIN(kUnassigned39, 'D', 31); // + +} // namespace Motate + +// We then allow each chip-type to have it's onw function definitions +// that will refer to these pin assignments. +#include "motate_chip_pin_functions.h" + +#endif + +// GQUADRATIC_C_PINOUT_H diff --git a/g2core/board/gquadratic/motate_pin_assignments.h b/g2core/board/gquadratic/motate_pin_assignments.h index 0057a9e4..6eba4482 100755 --- a/g2core/board/gquadratic/motate_pin_assignments.h +++ b/g2core/board/gquadratic/motate_pin_assignments.h @@ -157,13 +157,14 @@ pin_number kDebug3_PinNumber = -1; // 116; //e Not the out-of-order numbering & pin_number kDebug4_PinNumber = -1; // 114; // END DEBUG PINS -pin_number kLED_USBRXPinNumber = 117; -pin_number kLED_USBTXPinNumber = 118; -pin_number kSD_CardDetectPinNumber = 119; -pin_number kSD_ChipSelectPinNumber = 120; -pin_number kInterlock_InPinNumber = 121; -pin_number kOutputSAFE_PinNumber = 122; // SAFE signal -pin_number kLEDPWM_PinNumber = 123; +pin_number kLED_USBRXPinNumber = 117; +pin_number kLED_USBTXPinNumber = 118; +pin_number kSD_CardDetectPinNumber = -1; +pin_number kSD_ChipSelectPinNumber = -1; +pin_number kUSBVBUS_PinNumber = 119; +pin_number kInterlock_InPinNumber = 121; +pin_number kOutputSAFE_PinNumber = 122; // SAFE signal +pin_number kLEDPWM_PinNumber = 123; pin_number kOutputInterrupt_PinNumber = 124; // to-host interrupt signal pin_number kLED_RGBWPixelPinNumber = 125; // 117;