123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283 |
- /*
- 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
- */
- #ifndef _VARIANT_ARDUINO_DUE_X_
- #define _VARIANT_ARDUINO_DUE_X_
- /*----------------------------------------------------------------------------
- * Definitions
- *----------------------------------------------------------------------------*/
- /** Frequency of the board main oscillator */
- #define VARIANT_MAINOSC 12000000
- /** Master clock frequency */
- #define VARIANT_MCK 84000000
- /*----------------------------------------------------------------------------
- * Headers
- *----------------------------------------------------------------------------*/
- #include "Arduino.h"
- #ifdef __cplusplus
- #include "UARTClass.h"
- #include "USARTClass.h"
- #endif
- #ifdef __cplusplus
- extern "C"{
- #endif // __cplusplus
- /**
- * Libc porting layers
- */
- #if defined ( __GNUC__ ) /* GCC CS3 */
- # include <syscalls.h> /** RedHat Newlib minimal stub */
- #endif
- /*----------------------------------------------------------------------------
- * Pins
- *----------------------------------------------------------------------------*/
- // Number of pins defined in PinDescription array
- #define PINS_COUNT 79
- #define NUM_DIGITAL_PINS 66
- #define NUM_ANALOG_INPUTS 12
- #define analogInputToDigitalPin(p) pin_t((p < 12) ? (p) + 54 : -1)
- #define digitalPinToPort(P) ( g_APinDescription[P].pPort )
- #define digitalPinToBitMask(P) ( g_APinDescription[P].ulPin )
- //#define analogInPinToBit(P) ( )
- #define portOutputRegister(port) ( &(port->PIO_ODSR) )
- #define portInputRegister(port) ( &(port->PIO_PDSR) )
- #define digitalPinHasPWM(P) ( g_APinDescription[P].ulPWMChannel != NOT_ON_PWM || g_APinDescription[P].ulTCChannel != NOT_ON_TIMER )
- /*
- * portModeRegister(..) should return a register to set pin mode
- * INPUT or OUTPUT by setting the corresponding bit to 0 or 1.
- * Unfortunately on SAM architecture the PIO_OSR register is
- * read-only and can be set only through the enable/disable registers
- * pair PIO_OER/PIO_ODR.
- */
- // #define portModeRegister(port) ( &(port->PIO_OSR) )
- /*
- * digitalPinToTimer(..) is AVR-specific and is not defined for SAM
- * architecture. If you need to check if a pin supports PWM you must
- * use digitalPinHasPWM(..).
- *
- * https://github.com/arduino/Arduino/issues/1833
- */
- // #define digitalPinToTimer(P)
- // Interrupts
- #define digitalPinToInterrupt(p) ((p) < NUM_DIGITAL_PINS ? (p) : -1)
- // LEDs
- #define PIN_LED_13 (13U)
- #define PIN_LED_RXL (72U)
- #define PIN_LED_TXL (73U)
- #define PIN_LED PIN_LED_13
- #define PIN_LED2 PIN_LED_RXL
- #define PIN_LED3 PIN_LED_TXL
- #define LED_BUILTIN 13
- /*
- * SPI Interfaces
- */
- #define SPI_INTERFACES_COUNT 1
- #define SPI_INTERFACE SPI0
- #define SPI_INTERFACE_ID ID_SPI0
- #define SPI_CHANNELS_NUM 4
- #define PIN_SPI_SS0 (77U)
- #define PIN_SPI_SS1 (87U)
- #define PIN_SPI_SS2 (86U)
- #define PIN_SPI_SS3 (78U)
- #define PIN_SPI_MOSI (75U)
- #define PIN_SPI_MISO (74U)
- #define PIN_SPI_SCK (76U)
- #define BOARD_SPI_SS0 (77U) //(10U)
- #define BOARD_SPI_SS1 (4U)
- #define BOARD_SPI_SS2 (52U)
- #define BOARD_SPI_SS3 PIN_SPI_SS3
- #define BOARD_SPI_DEFAULT_SS BOARD_SPI_SS3
- #define BOARD_PIN_TO_SPI_PIN(x) \
- (x==BOARD_SPI_SS0 ? PIN_SPI_SS0 : \
- (x==BOARD_SPI_SS1 ? PIN_SPI_SS1 : \
- (x==BOARD_SPI_SS2 ? PIN_SPI_SS2 : PIN_SPI_SS3 )))
- #define BOARD_PIN_TO_SPI_CHANNEL(x) \
- (x==BOARD_SPI_SS0 ? 0 : \
- (x==BOARD_SPI_SS1 ? 1 : \
- (x==BOARD_SPI_SS2 ? 2 : 3)))
- static const uint8_t SS = BOARD_SPI_SS0;
- static const uint8_t SS1 = BOARD_SPI_SS1;
- static const uint8_t SS2 = BOARD_SPI_SS2;
- static const uint8_t SS3 = BOARD_SPI_SS3;
- static const uint8_t MOSI = PIN_SPI_MOSI;
- static const uint8_t MISO = PIN_SPI_MISO;
- static const uint8_t SCK = PIN_SPI_SCK;
- /*
- * Wire Interfaces
- */
- #define WIRE_INTERFACES_COUNT 2
- #define PIN_WIRE_SDA (20U)
- #define PIN_WIRE_SCL (21U)
- #define WIRE_INTERFACE TWI1
- #define WIRE_INTERFACE_ID ID_TWI1
- #define WIRE_ISR_HANDLER TWI1_Handler
- #define WIRE_ISR_ID TWI1_IRQn
- #define PIN_WIRE1_SDA (70U)
- #define PIN_WIRE1_SCL (71U)
- #define WIRE1_INTERFACE TWI0
- #define WIRE1_INTERFACE_ID ID_TWI0
- #define WIRE1_ISR_HANDLER TWI0_Handler
- #define WIRE1_ISR_ID TWI0_IRQn
- static const uint8_t SDA = PIN_WIRE_SDA;
- static const uint8_t SCL = PIN_WIRE_SCL;
- static const uint8_t SDA1 = PIN_WIRE1_SDA;
- static const uint8_t SCL1 = PIN_WIRE1_SCL;
- /*
- * UART/USART Interfaces
- */
- // Serial
- #define PINS_UART (81U)
- // Serial1
- #define PINS_USART0 (82U)
- // Serial2
- #define PINS_USART1 (83U)
- // Serial3
- #define PINS_USART3 (84U)
- /*
- * USB Interfaces
- */
- #define PINS_USB (85U)
- /*
- * Analog pins
- */
- static const uint8_t A0 = 54;
- static const uint8_t A1 = 55;
- static const uint8_t A2 = 56;
- static const uint8_t A3 = 57;
- static const uint8_t A4 = 58;
- static const uint8_t A5 = 59;
- static const uint8_t A6 = 60;
- static const uint8_t A7 = 61;
- static const uint8_t A8 = 62;
- static const uint8_t A9 = 63;
- static const uint8_t A10 = 64;
- static const uint8_t A11 = 65;
- static const uint8_t DAC0 = 66;
- static const uint8_t DAC1 = 67;
- static const uint8_t CANRX = 68;
- static const uint8_t CANTX = 69;
- #define ADC_RESOLUTION 12
- /*
- * Complementary CAN pins
- */
- static const uint8_t CAN1RX = 88;
- static const uint8_t CAN1TX = 89;
- // CAN0
- #define PINS_CAN0 (90U)
- // CAN1
- #define PINS_CAN1 (91U)
- /*
- * DACC
- */
- #define DACC_INTERFACE DACC
- #define DACC_INTERFACE_ID ID_DACC
- #define DACC_RESOLUTION 12
- #define DACC_ISR_HANDLER DACC_Handler
- #define DACC_ISR_ID DACC_IRQn
- /*
- * PWM
- */
- #define PWM_INTERFACE PWM
- #define PWM_INTERFACE_ID ID_PWM
- #define PWM_FREQUENCY 31000
- #define PWM_MAX_DUTY_CYCLE 255
- #define PWM_MIN_DUTY_CYCLE 0
- #define PWM_RESOLUTION 8
- /*
- * TC
- */
- #define TC_INTERFACE TC0
- #define TC_INTERFACE_ID ID_TC0
- #define TC_FREQUENCY 100000
- #define TC_MAX_DUTY_CYCLE 255
- #define TC_MIN_DUTY_CYCLE 0
- #define TC_RESOLUTION 8
- #ifdef __cplusplus
- }
- #endif
- /*----------------------------------------------------------------------------
- * Arduino objects - C++ only
- *----------------------------------------------------------------------------*/
- #ifdef __cplusplus
- extern UARTClass Serial;
- extern USARTClass Serial1;
- extern USARTClass Serial2;
- extern USARTClass Serial3;
- #endif
- // These serial port names are intended to allow libraries and architecture-neutral
- // sketches to automatically default to the correct port name for a particular type
- // of use. For example, a GPS module would normally connect to SERIAL_PORT_HARDWARE_OPEN,
- // the first hardware serial port whose RX/TX pins are not dedicated to another use.
- //
- // SERIAL_PORT_MONITOR Port which normally prints to the Arduino Serial Monitor
- //
- // SERIAL_PORT_USBVIRTUAL Port which is USB virtual serial
- //
- // SERIAL_PORT_LINUXBRIDGE Port which connects to a Linux system via Bridge library
- //
- // SERIAL_PORT_HARDWARE Hardware serial port, physical RX & TX pins.
- //
- // SERIAL_PORT_HARDWARE_OPEN Hardware serial ports which are open for use. Their RX & TX
- // pins are NOT connected to anything by default.
- #define SERIAL_PORT_MONITOR Serial
- #define SERIAL_PORT_USBVIRTUAL SerialUSB
- #define SERIAL_PORT_HARDWARE_OPEN Serial1
- #define SERIAL_PORT_HARDWARE_OPEN1 Serial2
- #define SERIAL_PORT_HARDWARE_OPEN2 Serial3
- #define SERIAL_PORT_HARDWARE Serial
- #define SERIAL_PORT_HARDWARE1 Serial1
- #define SERIAL_PORT_HARDWARE2 Serial2
- #define SERIAL_PORT_HARDWARE3 Serial3
- #endif /* _VARIANT_ARDUINO_DUE_X_ */
|