@@ -1,202 +0,0 @@
|
||||
/*
|
||||
* SPI Master library for Arduino Zero.
|
||||
* Copyright (c) 2015 Arduino 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
|
||||
*/
|
||||
|
||||
#include "SPI.h"
|
||||
#include <Arduino.h>
|
||||
#include <wiring_private.h>
|
||||
#include <assert.h>
|
||||
|
||||
#define SPI_IMODE_NONE 0
|
||||
#define SPI_IMODE_EXTINT 1
|
||||
#define SPI_IMODE_GLOBAL 2
|
||||
|
||||
const SPISettings DEFAULT_SPI_SETTINGS = SPISettings();
|
||||
|
||||
SPIClass::SPIClass(SERCOM *p_sercom, uint8_t uc_pinMISO, uint8_t uc_pinSCK, uint8_t uc_pinMOSI)
|
||||
{
|
||||
initialized = false;
|
||||
assert(p_sercom != NULL);
|
||||
_p_sercom = p_sercom;
|
||||
|
||||
_uc_pinMiso = uc_pinMISO;
|
||||
_uc_pinSCK = uc_pinSCK;
|
||||
_uc_pinMosi = uc_pinMOSI;
|
||||
}
|
||||
|
||||
void SPIClass::begin()
|
||||
{
|
||||
init();
|
||||
|
||||
// PIO init
|
||||
pinPeripheral(_uc_pinMiso, g_APinDescription[_uc_pinMiso].ulPinType);
|
||||
pinPeripheral(_uc_pinSCK, g_APinDescription[_uc_pinSCK].ulPinType);
|
||||
pinPeripheral(_uc_pinMosi, g_APinDescription[_uc_pinMosi].ulPinType);
|
||||
|
||||
config(DEFAULT_SPI_SETTINGS);
|
||||
}
|
||||
|
||||
void SPIClass::init()
|
||||
{
|
||||
if (initialized)
|
||||
return;
|
||||
interruptMode = SPI_IMODE_NONE;
|
||||
interruptSave = 0;
|
||||
interruptMask = 0;
|
||||
initialized = true;
|
||||
}
|
||||
|
||||
void SPIClass::config(SPISettings settings)
|
||||
{
|
||||
_p_sercom->disableSPI();
|
||||
|
||||
_p_sercom->initSPI(SPI_PAD_0_SCK_1, SERCOM_RX_PAD_2, SPI_CHAR_SIZE_8_BITS, settings.bitOrder);
|
||||
_p_sercom->initSPIClock(settings.dataMode, settings.clockFreq);
|
||||
|
||||
_p_sercom->enableSPI();
|
||||
}
|
||||
|
||||
void SPIClass::end()
|
||||
{
|
||||
_p_sercom->resetSPI();
|
||||
initialized = false;
|
||||
}
|
||||
|
||||
#ifndef interruptsStatus
|
||||
#define interruptsStatus() __interruptsStatus()
|
||||
static inline unsigned char __interruptsStatus(void) __attribute__((always_inline, unused));
|
||||
static inline unsigned char __interruptsStatus(void)
|
||||
{
|
||||
// See http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0497a/CHDBIBGJ.html
|
||||
return (__get_PRIMASK() ? 0 : 1);
|
||||
}
|
||||
#endif
|
||||
|
||||
void SPIClass::usingInterrupt(int interruptNumber)
|
||||
{
|
||||
if ((interruptNumber == NOT_AN_INTERRUPT) || (interruptNumber == EXTERNAL_INT_NMI))
|
||||
return;
|
||||
|
||||
uint8_t irestore = interruptsStatus();
|
||||
noInterrupts();
|
||||
|
||||
if (interruptNumber >= EXTERNAL_NUM_INTERRUPTS)
|
||||
interruptMode = SPI_IMODE_GLOBAL;
|
||||
else
|
||||
{
|
||||
interruptMode |= SPI_IMODE_EXTINT;
|
||||
interruptMask |= (1 << interruptNumber);
|
||||
}
|
||||
|
||||
if (irestore)
|
||||
interrupts();
|
||||
}
|
||||
|
||||
void SPIClass::beginTransaction(SPISettings settings)
|
||||
{
|
||||
if (interruptMode != SPI_IMODE_NONE)
|
||||
{
|
||||
if (interruptMode & SPI_IMODE_GLOBAL)
|
||||
{
|
||||
interruptSave = interruptsStatus();
|
||||
noInterrupts();
|
||||
}
|
||||
else if (interruptMode & SPI_IMODE_EXTINT)
|
||||
EIC->INTENCLR.reg = EIC_INTENCLR_EXTINT(interruptMask);
|
||||
}
|
||||
|
||||
config(settings);
|
||||
}
|
||||
|
||||
void SPIClass::endTransaction(void)
|
||||
{
|
||||
if (interruptMode != SPI_IMODE_NONE)
|
||||
{
|
||||
if (interruptMode & SPI_IMODE_GLOBAL)
|
||||
{
|
||||
if (interruptSave)
|
||||
interrupts();
|
||||
}
|
||||
else if (interruptMode & SPI_IMODE_EXTINT)
|
||||
EIC->INTENSET.reg = EIC_INTENSET_EXTINT(interruptMask);
|
||||
}
|
||||
}
|
||||
|
||||
void SPIClass::setBitOrder(BitOrder order)
|
||||
{
|
||||
if (order == LSBFIRST) {
|
||||
_p_sercom->setDataOrderSPI(LSB_FIRST);
|
||||
} else {
|
||||
_p_sercom->setDataOrderSPI(MSB_FIRST);
|
||||
}
|
||||
}
|
||||
|
||||
void SPIClass::setDataMode(uint8_t mode)
|
||||
{
|
||||
switch (mode)
|
||||
{
|
||||
case SPI_MODE0:
|
||||
_p_sercom->setClockModeSPI(SERCOM_SPI_MODE_0);
|
||||
break;
|
||||
|
||||
case SPI_MODE1:
|
||||
_p_sercom->setClockModeSPI(SERCOM_SPI_MODE_1);
|
||||
break;
|
||||
|
||||
case SPI_MODE2:
|
||||
_p_sercom->setClockModeSPI(SERCOM_SPI_MODE_2);
|
||||
break;
|
||||
|
||||
case SPI_MODE3:
|
||||
_p_sercom->setClockModeSPI(SERCOM_SPI_MODE_3);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void SPIClass::setClockDivider(uint8_t div)
|
||||
{
|
||||
if (div < SPI_MIN_CLOCK_DIVIDER) {
|
||||
_p_sercom->setBaudrateSPI(SPI_MIN_CLOCK_DIVIDER);
|
||||
} else {
|
||||
_p_sercom->setBaudrateSPI(div);
|
||||
}
|
||||
}
|
||||
|
||||
byte SPIClass::transfer(uint8_t data)
|
||||
{
|
||||
// Writing the data
|
||||
_p_sercom->writeDataSPI(data);
|
||||
|
||||
// Read data
|
||||
return _p_sercom->readDataSPI() & 0xFF;
|
||||
}
|
||||
|
||||
void SPIClass::attachInterrupt() {
|
||||
// Should be enableInterrupt()
|
||||
}
|
||||
|
||||
void SPIClass::detachInterrupt() {
|
||||
// Should be disableInterrupt()
|
||||
}
|
||||
|
||||
SPIClass SPI( &sercom1, RADIO_SPI_MISO, RADIO_SPI_SCK, RADIO_SPI_MOSI );
|
||||
SPIClass SPI_ETH (&sercom4, NET_SPI_MISO, NET_SPI_SCK, NET_SPI_MOSI);
|
||||
SPIClass SPI_USER(&sercom5, USR_SPI_MISO, USR_SPI_SCK, USR_SPI_MOSI);
|
||||
@@ -1,155 +0,0 @@
|
||||
/*
|
||||
* SPI Master library for Arduino Zero.
|
||||
* Copyright (c) 2015 Arduino 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
|
||||
*/
|
||||
|
||||
#ifndef _SPI_H_INCLUDED
|
||||
#define _SPI_H_INCLUDED
|
||||
|
||||
#include <Arduino.h>
|
||||
|
||||
// SPI_HAS_TRANSACTION means SPI has
|
||||
// - beginTransaction()
|
||||
// - endTransaction()
|
||||
// - usingInterrupt()
|
||||
// - SPISetting(clock, bitOrder, dataMode)
|
||||
#define SPI_HAS_TRANSACTION 1
|
||||
|
||||
#define SPI_MODE0 0x02
|
||||
#define SPI_MODE1 0x00
|
||||
#define SPI_MODE2 0x03
|
||||
#define SPI_MODE3 0x01
|
||||
|
||||
#if defined(__SAMD21G18A__)
|
||||
// Even if not specified on the datasheet, the SAMD21G18A MCU
|
||||
// doesn't operate correctly with clock dividers lower than 4.
|
||||
// This allows a theoretical maximum SPI clock speed of 12Mhz
|
||||
#define SPI_MIN_CLOCK_DIVIDER 4
|
||||
// Other SAMD21xxxxx MCU may be affected as well
|
||||
#else
|
||||
#define SPI_MIN_CLOCK_DIVIDER 2
|
||||
#endif
|
||||
|
||||
class SPISettings {
|
||||
public:
|
||||
SPISettings(uint32_t clock, BitOrder bitOrder, uint8_t dataMode) {
|
||||
if (__builtin_constant_p(clock)) {
|
||||
init_AlwaysInline(clock, bitOrder, dataMode);
|
||||
} else {
|
||||
init_MightInline(clock, bitOrder, dataMode);
|
||||
}
|
||||
}
|
||||
|
||||
// Default speed set to 4MHz, SPI mode set to MODE 0 and Bit order set to MSB first.
|
||||
SPISettings() { init_AlwaysInline(4000000, MSBFIRST, SPI_MODE0); }
|
||||
|
||||
private:
|
||||
void init_MightInline(uint32_t clock, BitOrder bitOrder, uint8_t dataMode) {
|
||||
init_AlwaysInline(clock, bitOrder, dataMode);
|
||||
}
|
||||
|
||||
void init_AlwaysInline(uint32_t clock, BitOrder bitOrder, uint8_t dataMode) __attribute__((__always_inline__)) {
|
||||
this->clockFreq = (clock >= (F_CPU / SPI_MIN_CLOCK_DIVIDER) ? F_CPU / SPI_MIN_CLOCK_DIVIDER : clock);
|
||||
|
||||
this->bitOrder = (bitOrder == MSBFIRST ? MSB_FIRST : LSB_FIRST);
|
||||
|
||||
switch (dataMode)
|
||||
{
|
||||
case SPI_MODE0:
|
||||
this->dataMode = SERCOM_SPI_MODE_0; break;
|
||||
case SPI_MODE1:
|
||||
this->dataMode = SERCOM_SPI_MODE_1; break;
|
||||
case SPI_MODE2:
|
||||
this->dataMode = SERCOM_SPI_MODE_2; break;
|
||||
case SPI_MODE3:
|
||||
this->dataMode = SERCOM_SPI_MODE_3; break;
|
||||
default:
|
||||
this->dataMode = SERCOM_SPI_MODE_0; break;
|
||||
}
|
||||
}
|
||||
|
||||
uint32_t clockFreq;
|
||||
SercomSpiClockMode dataMode;
|
||||
SercomDataOrder bitOrder;
|
||||
|
||||
friend class SPIClass;
|
||||
};
|
||||
|
||||
class SPIClass {
|
||||
public:
|
||||
SPIClass(SERCOM *p_sercom, uint8_t uc_pinMISO, uint8_t uc_pinSCK, uint8_t uc_pinMOSI);
|
||||
|
||||
byte transfer(uint8_t data);
|
||||
inline void transfer(void *buf, size_t count);
|
||||
|
||||
// Transaction Functions
|
||||
void usingInterrupt(int interruptNumber);
|
||||
void beginTransaction(SPISettings settings);
|
||||
void endTransaction(void);
|
||||
|
||||
// SPI Configuration methods
|
||||
void attachInterrupt();
|
||||
void detachInterrupt();
|
||||
|
||||
void begin();
|
||||
void end();
|
||||
|
||||
void setBitOrder(BitOrder order);
|
||||
void setDataMode(uint8_t uc_mode);
|
||||
void setClockDivider(uint8_t uc_div);
|
||||
|
||||
private:
|
||||
void init();
|
||||
void config(SPISettings settings);
|
||||
|
||||
SERCOM *_p_sercom;
|
||||
uint8_t _uc_pinMiso;
|
||||
uint8_t _uc_pinMosi;
|
||||
uint8_t _uc_pinSCK;
|
||||
bool initialized;
|
||||
uint8_t interruptMode;
|
||||
char interruptSave;
|
||||
uint32_t interruptMask;
|
||||
};
|
||||
|
||||
void SPIClass::transfer(void *buf, size_t count)
|
||||
{
|
||||
// TODO: Optimize for faster block-transfer
|
||||
uint8_t *buffer = reinterpret_cast<uint8_t *>(buf);
|
||||
for (size_t i=0; i<count; i++)
|
||||
buffer[i] = transfer(buffer[i]);
|
||||
}
|
||||
|
||||
#if SPI_INTERFACES_COUNT > 0
|
||||
extern SPIClass SPI;
|
||||
extern SPIClass SPI_ETH;
|
||||
extern SPIClass SPI_USER;
|
||||
#endif
|
||||
|
||||
// For compatibility with sketches designed for AVR @ 16 MHz
|
||||
// New programs should use SPI.beginTransaction to set the SPI clock
|
||||
#if F_CPU == 48000000
|
||||
#define SPI_CLOCK_DIV2 6
|
||||
#define SPI_CLOCK_DIV4 12
|
||||
#define SPI_CLOCK_DIV8 24
|
||||
#define SPI_CLOCK_DIV16 48
|
||||
#define SPI_CLOCK_DIV32 96
|
||||
#define SPI_CLOCK_DIV64 192
|
||||
#define SPI_CLOCK_DIV128 255
|
||||
#endif
|
||||
|
||||
#endif
|
||||
-143
@@ -1,143 +0,0 @@
|
||||
/*
|
||||
SCP1000 Barometric Pressure Sensor Display
|
||||
|
||||
Shows the output of a Barometric Pressure Sensor on a
|
||||
Uses the SPI library. For details on the sensor, see:
|
||||
http://www.sparkfun.com/commerce/product_info.php?products_id=8161
|
||||
http://www.vti.fi/en/support/obsolete_products/pressure_sensors/
|
||||
|
||||
This sketch adapted from Nathan Seidle's SCP1000 example for PIC:
|
||||
http://www.sparkfun.com/datasheets/Sensors/SCP1000-Testing.zip
|
||||
|
||||
Circuit:
|
||||
SCP1000 sensor attached to pins 6, 7, 10 - 13:
|
||||
DRDY: pin 6
|
||||
CSB: pin 7
|
||||
MOSI: pin 11
|
||||
MISO: pin 12
|
||||
SCK: pin 13
|
||||
|
||||
created 31 July 2010
|
||||
modified 14 August 2010
|
||||
by Tom Igoe
|
||||
*/
|
||||
|
||||
// the sensor communicates using SPI, so include the library:
|
||||
#include <SPI.h>
|
||||
|
||||
//Sensor's memory register addresses:
|
||||
const int PRESSURE = 0x1F; //3 most significant bits of pressure
|
||||
const int PRESSURE_LSB = 0x20; //16 least significant bits of pressure
|
||||
const int TEMPERATURE = 0x21; //16 bit temperature reading
|
||||
const byte READ = 0b11111100; // SCP1000's read command
|
||||
const byte WRITE = 0b00000010; // SCP1000's write command
|
||||
|
||||
// pins used for the connection with the sensor
|
||||
// the other you need are controlled by the SPI library):
|
||||
const int dataReadyPin = 6;
|
||||
const int chipSelectPin = 7;
|
||||
|
||||
void setup() {
|
||||
Serial.begin(9600);
|
||||
|
||||
// start the SPI library:
|
||||
SPI.begin();
|
||||
|
||||
// initalize the data ready and chip select pins:
|
||||
pinMode(dataReadyPin, INPUT);
|
||||
pinMode(chipSelectPin, OUTPUT);
|
||||
|
||||
//Configure SCP1000 for low noise configuration:
|
||||
writeRegister(0x02, 0x2D);
|
||||
writeRegister(0x01, 0x03);
|
||||
writeRegister(0x03, 0x02);
|
||||
// give the sensor time to set up:
|
||||
delay(100);
|
||||
}
|
||||
|
||||
void loop() {
|
||||
//Select High Resolution Mode
|
||||
writeRegister(0x03, 0x0A);
|
||||
|
||||
// don't do anything until the data ready pin is high:
|
||||
if (digitalRead(dataReadyPin) == HIGH) {
|
||||
//Read the temperature data
|
||||
int tempData = readRegister(0x21, 2);
|
||||
|
||||
// convert the temperature to celsius and display it:
|
||||
float realTemp = (float)tempData / 20.0;
|
||||
Serial.print("Temp[C]=");
|
||||
Serial.print(realTemp);
|
||||
|
||||
|
||||
//Read the pressure data highest 3 bits:
|
||||
byte pressure_data_high = readRegister(0x1F, 1);
|
||||
pressure_data_high &= 0b00000111; //you only needs bits 2 to 0
|
||||
|
||||
//Read the pressure data lower 16 bits:
|
||||
unsigned int pressure_data_low = readRegister(0x20, 2);
|
||||
//combine the two parts into one 19-bit number:
|
||||
long pressure = ((pressure_data_high << 16) | pressure_data_low) / 4;
|
||||
|
||||
// display the temperature:
|
||||
Serial.println("\tPressure [Pa]=" + String(pressure));
|
||||
}
|
||||
}
|
||||
|
||||
//Read from or write to register from the SCP1000:
|
||||
unsigned int readRegister(byte thisRegister, int bytesToRead ) {
|
||||
byte inByte = 0; // incoming byte from the SPI
|
||||
unsigned int result = 0; // result to return
|
||||
Serial.print(thisRegister, BIN);
|
||||
Serial.print("\t");
|
||||
// SCP1000 expects the register name in the upper 6 bits
|
||||
// of the byte. So shift the bits left by two bits:
|
||||
thisRegister = thisRegister << 2;
|
||||
// now combine the address and the command into one byte
|
||||
byte dataToSend = thisRegister & READ;
|
||||
Serial.println(thisRegister, BIN);
|
||||
// take the chip select low to select the device:
|
||||
digitalWrite(chipSelectPin, LOW);
|
||||
// send the device the register you want to read:
|
||||
SPI.transfer(dataToSend);
|
||||
// send a value of 0 to read the first byte returned:
|
||||
result = SPI.transfer(0x00);
|
||||
// decrement the number of bytes left to read:
|
||||
bytesToRead--;
|
||||
// if you still have another byte to read:
|
||||
if (bytesToRead > 0) {
|
||||
// shift the first byte left, then get the second byte:
|
||||
result = result << 8;
|
||||
inByte = SPI.transfer(0x00);
|
||||
// combine the byte you just got with the previous one:
|
||||
result = result | inByte;
|
||||
// decrement the number of bytes left to read:
|
||||
bytesToRead--;
|
||||
}
|
||||
// take the chip select high to de-select:
|
||||
digitalWrite(chipSelectPin, HIGH);
|
||||
// return the result:
|
||||
return(result);
|
||||
}
|
||||
|
||||
|
||||
//Sends a write command to SCP1000
|
||||
|
||||
void writeRegister(byte thisRegister, byte thisValue) {
|
||||
|
||||
// SCP1000 expects the register address in the upper 6 bits
|
||||
// of the byte. So shift the bits left by two bits:
|
||||
thisRegister = thisRegister << 2;
|
||||
// now combine the register address and the command into one byte:
|
||||
byte dataToSend = thisRegister | WRITE;
|
||||
|
||||
// take the chip select low to select the device:
|
||||
digitalWrite(chipSelectPin, LOW);
|
||||
|
||||
SPI.transfer(dataToSend); //Send register location
|
||||
SPI.transfer(thisValue); //Send value to record into register
|
||||
|
||||
// take the chip select high to de-select:
|
||||
digitalWrite(chipSelectPin, HIGH);
|
||||
}
|
||||
|
||||
-71
@@ -1,71 +0,0 @@
|
||||
/*
|
||||
Digital Pot Control
|
||||
|
||||
This example controls an Analog Devices AD5206 digital potentiometer.
|
||||
The AD5206 has 6 potentiometer channels. Each channel's pins are labeled
|
||||
A - connect this to voltage
|
||||
W - this is the pot's wiper, which changes when you set it
|
||||
B - connect this to ground.
|
||||
|
||||
The AD5206 is SPI-compatible,and to command it, you send two bytes,
|
||||
one with the channel number (0 - 5) and one with the resistance value for the
|
||||
channel (0 - 255).
|
||||
|
||||
The circuit:
|
||||
* All A pins of AD5206 connected to +5V
|
||||
* All B pins of AD5206 connected to ground
|
||||
* An LED and a 220-ohm resisor in series connected from each W pin to ground
|
||||
* CS - to digital pin 10 (SS pin)
|
||||
* SDI - to digital pin 11 (MOSI pin)
|
||||
* CLK - to digital pin 13 (SCK pin)
|
||||
|
||||
created 10 Aug 2010
|
||||
by Tom Igoe
|
||||
|
||||
Thanks to Heather Dewey-Hagborg for the original tutorial, 2005
|
||||
|
||||
*/
|
||||
|
||||
|
||||
// inslude the SPI library:
|
||||
#include <SPI.h>
|
||||
|
||||
|
||||
// set pin 10 as the slave select for the digital pot:
|
||||
const int slaveSelectPin = 10;
|
||||
|
||||
void setup() {
|
||||
// set the slaveSelectPin as an output:
|
||||
pinMode (slaveSelectPin, OUTPUT);
|
||||
// initialize SPI:
|
||||
SPI.begin();
|
||||
}
|
||||
|
||||
void loop() {
|
||||
// go through the six channels of the digital pot:
|
||||
for (int channel = 0; channel < 6; channel++) {
|
||||
// change the resistance on this channel from min to max:
|
||||
for (int level = 0; level < 255; level++) {
|
||||
digitalPotWrite(channel, level);
|
||||
delay(10);
|
||||
}
|
||||
// wait a second at the top:
|
||||
delay(100);
|
||||
// change the resistance on this channel from max to min:
|
||||
for (int level = 0; level < 255; level++) {
|
||||
digitalPotWrite(channel, 255 - level);
|
||||
delay(10);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void digitalPotWrite(int address, int value) {
|
||||
// take the SS pin low to select the chip:
|
||||
digitalWrite(slaveSelectPin, LOW);
|
||||
// send in the address and value via SPI:
|
||||
SPI.transfer(address);
|
||||
SPI.transfer(value);
|
||||
// take the SS pin high to de-select the chip:
|
||||
digitalWrite(slaveSelectPin, HIGH);
|
||||
}
|
||||
@@ -1,31 +0,0 @@
|
||||
#######################################
|
||||
# Syntax Coloring Map SPI
|
||||
#######################################
|
||||
|
||||
#######################################
|
||||
# Datatypes (KEYWORD1)
|
||||
#######################################
|
||||
|
||||
SPI KEYWORD1
|
||||
|
||||
#######################################
|
||||
# Methods and Functions (KEYWORD2)
|
||||
#######################################
|
||||
begin KEYWORD2
|
||||
end KEYWORD2
|
||||
transfer KEYWORD2
|
||||
#setBitOrder KEYWORD2
|
||||
setDataMode KEYWORD2
|
||||
setClockDivider KEYWORD2
|
||||
|
||||
|
||||
#######################################
|
||||
# Constants (LITERAL1)
|
||||
#######################################
|
||||
SPI_MODE0 LITERAL1
|
||||
SPI_MODE1 LITERAL1
|
||||
SPI_MODE2 LITERAL1
|
||||
SPI_MODE3 LITERAL1
|
||||
|
||||
SPI_CONTINUE LITERAL1
|
||||
SPI_LAST LITERAL1
|
||||
@@ -15,94 +15,6 @@
|
||||
License along with this library; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
/*
|
||||
* +------------+------------------+--------+-----------------+--------------------------------------------------------------------------------------------------------
|
||||
* + Pin number + ZERO Board pin | PIN | Label/Name | Comments (* is for default peripheral in use)
|
||||
* +------------+------------------+--------+-----------------+--------------------------------------------------------------------------------------------------------
|
||||
* | | Digital Low | | |
|
||||
* +------------+------------------+--------+-----------------+--------------------------------------------------------------------------------------------------------
|
||||
* | 0 | 0 -> RX | PA11 | | EIC/EXTINT[11] ADC/AIN[19] PTC/X[3] *SERCOM0/PAD[3] SERCOM2/PAD[3] TCC0/WO[3] TCC1/WO[1]
|
||||
* | 1 | 1 <- TX | PA10 | | EIC/EXTINT[10] ADC/AIN[18] PTC/X[2] *SERCOM0/PAD[2] TCC0/WO[2] TCC1/WO[0]
|
||||
* | 2 | 2 | PA14 | | EIC/EXTINT[14] SERCOM2/PAD[2] SERCOM4/PAD[2] TC3/WO[0] TCC0/WO[4]
|
||||
* | 3 | ~3 | PA09 | | EIC/EXTINT[9] ADC/AIN[17] PTC/X[1] SERCOM0/PAD[1] SERCOM2/PAD[1] *TCC0/WO[1] TCC1/WO[3]
|
||||
* | 4 | ~4 | PA08 | | EIC/NMI ADC/AIN[16] PTC/X[0] SERCOM0/PAD[0] SERCOM2/PAD[0] *TCC0/WO[0] TCC1/WO[2]
|
||||
* | 5 | ~5 | PA15 | | EIC/EXTINT[15] SERCOM2/PAD[3] SERCOM4/PAD[3] *TC3/WO[1] TCC0/WO[5]
|
||||
* | 6 | ~6 | PA20 | | EIC/EXTINT[4] PTC/X[8] SERCOM5/PAD[2] SERCOM3/PAD[2] *TCC0/WO[6]
|
||||
* | 7 | 7 | PA21 | | EIC/EXTINT[5] PTC/X[9] SERCOM5/PAD[3] SERCOM3/PAD[3] TCC0/WO[7]
|
||||
* +------------+------------------+--------+-----------------+--------------------------------------------------------------------------------------------------------
|
||||
* | | Digital High | | |
|
||||
* +------------+------------------+--------+-----------------+--------------------------------------------------------------------------------------------------------
|
||||
* | 8 | ~8 | PA06 | | EIC/EXTINT[6] ADC/AIN[6] AC/AIN[2] PTC/Y[4] SERCOM0/PAD[2] *TCC1/WO[0]
|
||||
* | 9 | ~9 | PA07 | | EIC/EXTINT[7] ADC/AIN[7] AC/AIN[3] PTC/Y[5] SERCOM0/PAD[3] *TCC1/WO[1]
|
||||
* | 10 | ~10 | PA18 | | EIC/EXTINT[2] PTC/X[6] +SERCOM1/PAD[2] SERCOM3/PAD[2] *TC3/WO[0] TCC0/WO[2]
|
||||
* | 11 | ~11 | PA16 | | EIC/EXTINT[0] PTC/X[4] +SERCOM1/PAD[0] SERCOM3/PAD[0] *TCC2/WO[0] TCC0/WO[6]
|
||||
* | 12 | ~12 | PA19 | | EIC/EXTINT[3] PTC/X[7] +SERCOM1/PAD[3] SERCOM3/PAD[3] TC3/WO[1] *TCC0/WO[3]
|
||||
* | 13 | ~13 | PA17 | LED | EIC/EXTINT[1] PTC/X[5] +SERCOM1/PAD[1] SERCOM3/PAD[1] *TCC2/WO[1] TCC0/WO[7]
|
||||
* +------------+------------------+--------+-----------------+--------------------------------------------------------------------------------------------------------
|
||||
* | | Analog Connector | | |
|
||||
* +------------+------------------+--------+-----------------+--------------------------------------------------------------------------------------------------------
|
||||
* | 14 | A0 | PA02 | A0 | EIC/EXTINT[2] *ADC/AIN[0] DAC/VOUT PTC/Y[0]
|
||||
* | 15 | A1 | PB08 | A1 | EIC/EXTINT[8] *ADC/AIN[2] PTC/Y[14] SERCOM4/PAD[0] TC4/WO[0]
|
||||
* | 16 | A2 | PB09 | A2 | EIC/EXTINT[9] *ADC/AIN[3] PTC/Y[15] SERCOM4/PAD[1] TC4/WO[1]
|
||||
* | 17 | A3 | PA04 | A3 | EIC/EXTINT[4] *ADC/AIN[4] AC/AIN[0] PTC/Y[2] SERCOM0/PAD[0] TCC0/WO[0]
|
||||
* | 18 | A4 | PA05 | A4 | EIC/EXTINT[5] *ADC/AIN[5] AC/AIN[1] PTC/Y[5] SERCOM0/PAD[1] TCC0/WO[1]
|
||||
* | 19 | A5 | PB02 | A5 | EIC/EXTINT[2] *ADC/AIN[10] PTC/Y[8] SERCOM5/PAD[0]
|
||||
* +------------+------------------+--------+-----------------+--------------------------------------------------------------------------------------------------------
|
||||
* | | Wire | | |
|
||||
* +------------+------------------+--------+-----------------+--------------------------------------------------------------------------------------------------------
|
||||
* | 20 | SDA | PA22 | SDA | EIC/EXTINT[6] PTC/X[10] *SERCOM3/PAD[0] SERCOM5/PAD[0] TC4/WO[0] TCC0/WO[4]
|
||||
* | 21 | SCL | PA23 | SCL | EIC/EXTINT[7] PTC/X[11] *SERCOM3/PAD[1] SERCOM5/PAD[1] TC4/WO[1] TCC0/WO[5]
|
||||
* +------------+------------------+--------+-----------------+--------------------------------------------------------------------------------------------------------
|
||||
* | |SPI (Legacy ICSP) | | |
|
||||
* +------------+------------------+--------+-----------------+--------------------------------------------------------------------------------------------------------
|
||||
* | 22 | 1 | PA12 | MISO | EIC/EXTINT[12] SERCOM2/PAD[0] *SERCOM4/PAD[0] TCC2/WO[0] TCC0/WO[6]
|
||||
* | | 2 | | 5V0 |
|
||||
* | 23 | 4 | PB10 | MOSI | EIC/EXTINT[10] *SERCOM4/PAD[2] TC5/WO[0] TCC0/WO[4]
|
||||
* | 24 | 3 | PB11 | SCK | EIC/EXTINT[11] *SERCOM4/PAD[3] TC5/WO[1] TCC0/WO[5]
|
||||
* | | 5 | | RESET |
|
||||
* | | 6 | | GND |
|
||||
* +------------+------------------+--------+-----------------+--------------------------------------------------------------------------------------------------------
|
||||
* | | LEDs | | |
|
||||
* +------------+------------------+--------+-----------------+--------------------------------------------------------------------------------------------------------
|
||||
* | 25 | | PB03 | RX |
|
||||
* | 26 | | PA27 | TX |
|
||||
* +------------+------------------+--------+-----------------+--------------------------------------------------------------------------------------------------------
|
||||
* | | USB | | |
|
||||
* +------------+------------------+--------+-----------------+--------------------------------------------------------------------------------------------------------
|
||||
* | 27 | | PA28 | USB_HOST_ENABLE | EIC/EXTINT[8]
|
||||
* | 28 | | PA24 | USB_NEGATIVE | *USB/DM
|
||||
* | 29 | | PA25 | USB_POSITIVE | *USB/DP
|
||||
* +------------+------------------+--------+-----------------+--------------------------------------------------------------------------------------------------------
|
||||
* | | EDBG | | |
|
||||
* +------------+------------------+--------+-----------------+--------------------------------------------------------------------------------------------------------
|
||||
* | 30 | | PB22 | EDBG_UART TX | *SERCOM5/PAD[2]
|
||||
* | 31 | | PB23 | EDBG_UART RX | *SERCOM5/PAD[3]
|
||||
* +------------+------------------+--------+-----------------+--------------------------------------------------------------------------------------------------------
|
||||
* | 32 | | PA22 | EDBG_SDA | Pin 20 (SDA)
|
||||
* | 33 | | PA23 | EDBG_SCL | Pin 21 (SCL)
|
||||
* +------------+------------------+--------+-----------------+--------------------------------------------------------------------------------------------------------
|
||||
* | 34 | | PA19 | EDBG_MISO | EIC/EXTINT[3] *SERCOM1/PAD[3] SERCOM3/PAD[3] TC3/WO[1] TCC0/WO[3]
|
||||
* | 35 | | PA16 | EDBG_MOSI | EIC/EXTINT[0] *SERCOM1/PAD[0] SERCOM3/PAD[0] TCC2/WO[0] TCC0/WO[6]
|
||||
* | 36 | | PA18 | EDBG_SS | EIC/EXTINT[2] *SERCOM1/PAD[2] SERCOM3/PAD[2] TC3/WO[0] TCC0/WO[2]
|
||||
* | 37 | | PA17 | EDBG_SCK | EIC/EXTINT[1] *SERCOM1/PAD[1] SERCOM3/PAD[1] TCC2/WO[1] TCC0/WO[7]
|
||||
* +------------+------------------+--------+-----------------+--------------------------------------------------------------------------------------------------------
|
||||
* | 38 | ATN | PA13 | EDBG_GPIO0 | EIC/EXTINT[13] SERCOM2/PAD[1] SERCOM4/PAD[1] *TCC2/WO[1] TCC0/WO[7]
|
||||
* | 39 | | PA21 | EDBG_GPIO1 | Pin 7
|
||||
* | 40 | | PA06 | EDBG_GPIO2 | Pin 8
|
||||
* | 41 | | PA07 | EDBG_GPIO3 | Pin 9
|
||||
* +------------+------------------+--------+-----------------+--------------------------------------------------------------------------------------------------------
|
||||
* | | | | |
|
||||
* +------------+------------------+--------+-----------------+--------------------------------------------------------------------------------------------------------
|
||||
* | | GND | | |
|
||||
* | 42 | AREF | PA03 | | EIC/EXTINT[3] *[ADC|DAC]/VREFA ADC/AIN[1] PTC/Y[1]
|
||||
* +------------+------------------+--------+-----------------+--------------------------------------------------------------------------------------------------------
|
||||
* | |32.768KHz Crystal | | |
|
||||
* +------------+------------------+--------+-----------------+--------------------------------------------------------------------------------------------------------
|
||||
* | | | PA00 | XIN32 | EIC/EXTINT[0] SERCOM1/PAD[0] TCC2/WO[0]
|
||||
* | | | PA01 | XOUT32 | EIC/EXTINT[1] SERCOM1/PAD[1] TCC2/WO[1]
|
||||
* +------------+------------------+--------+-----------------+--------------------------------------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
|
||||
#include "variant.h"
|
||||
|
||||
@@ -111,101 +23,133 @@
|
||||
*/
|
||||
const PinDescription g_APinDescription[]=
|
||||
{
|
||||
// 0..13 - Digital pins
|
||||
// ----------------------
|
||||
// 0/1 - SERCOM/UART (Serial1)
|
||||
{ PORTA, 11, PIO_SERCOM, (PIN_ATTR_DIGITAL), No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_11 }, // RX: SERCOM0/PAD[3]
|
||||
{ PORTA, 10, PIO_SERCOM, (PIN_ATTR_DIGITAL), No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_10 }, // TX: SERCOM0/PAD[2]
|
||||
|
||||
// 2..12
|
||||
// Digital Low
|
||||
{ PORTA, 14, PIO_DIGITAL, (PIN_ATTR_DIGITAL), No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_14 },
|
||||
{ PORTA, 9, PIO_TIMER, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM|PIN_ATTR_TIMER), No_ADC_Channel, PWM0_CH1, TCC0_CH1, EXTERNAL_INT_9 }, // TCC0/WO[1]
|
||||
{ PORTA, 8, PIO_TIMER, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM|PIN_ATTR_TIMER), No_ADC_Channel, PWM0_CH0, TCC0_CH0, EXTERNAL_INT_NMI }, // TCC0/WO[0]
|
||||
{ PORTA, 15, PIO_TIMER, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM|PIN_ATTR_TIMER), No_ADC_Channel, PWM3_CH1, TC3_CH1, EXTERNAL_INT_15 }, // TC3/WO[1]
|
||||
{ PORTA, 20, PIO_TIMER_ALT, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM|PIN_ATTR_TIMER), No_ADC_Channel, PWM0_CH6, TCC0_CH6, EXTERNAL_INT_4 }, // TCC0/WO[6]
|
||||
{ PORTA, 21, PIO_DIGITAL, (PIN_ATTR_DIGITAL), No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_5 },
|
||||
/*
|
||||
+------------+------------------+--------+-----------------+--------+-----------------------+---------+---------+--------+--------+----------+----------+
|
||||
| Pin number | MysX pin | PIN | Notes | Peri.A | Peripheral B | Perip.C | Perip.D | Peri.E | Peri.F | Periph.G | Periph.H |
|
||||
| | | | | EIC | ADC | AC | PTC | DAC | SERCOMx | SERCOMx | TCCx | TCCx | COM | AC/GLCK |
|
||||
| | | | |(EXTINT)|(AIN)|(AIN)| | | (x/PAD) | (x/PAD) | (x/WO) | (x/WO) | | |
|
||||
+------------+------------------+--------+-----------------+--------+-----+-----+-----+-----+---------+---------+--------+--------+----------+----------+
|
||||
| 00 | D1_DFM | PA10 | | 10 | 10 | | X02 | | 0/02 | 2/02 |*TCC1/0 | TCC0/2 | I2S/SCK0 | GCLK_IO4 |
|
||||
| 01 | D2_DTM | PA08 | | NMI | 16 | | X00 | | 0/00 | 2/00 |*TCC0/0 | TCC1/2 | I2S/SD1 | |
|
||||
| 02 | D3_INT | PA05 | | 5 | 05 | 01 | Y03 | | | 0/01 |*TCC0/1 | | | |
|
||||
| 03 | D4_INT | PA07 | | 7 | 07 | 03 | Y05 | | | 0/03 |*TCC1/1 | | I2S/SD0 | |
|
||||
| 04 | D5_PWM | PA04 | | 4 | 04 | 00 | Y02 | | | 0/00 |*TCC0/0 | TCC0/4 | | |
|
||||
| 05 | D6_PWM | PA06 | | 6 | 06 | 02 | Y04 | | | 0/02 |*TCC1/0 | | | |
|
||||
| 06 | D7_SCL | PA23 | | 7 | | | X11 | | 3/01 | 5/01 | TC4/1 |*TCC0/5 | USB/SOF | GCLK_IO7 |
|
||||
| 07 | D8_SDA | PA22 | | 6 | | | X10 | | 3/00 | 5/00 | TC4/0 |*TCC0/4 | | GCLK_IO6 |
|
||||
| 08 | D9_A3 | PB02 | | 2 | 10 | | Y08 | | | 5/00 | TC6/0 | | | |
|
||||
| 09 | D10_A4 | PB03 | | 3 | 11 | | X09 | | | 5/01 | TC6/1 | | | |
|
||||
| 10 | D11_MOSI | PB30 | | 14 | | | | | | 5/00 | TCC0/0 | TCC1/2 | | |
|
||||
| 11 | D12_MISO | PB22 | | 6 | | | | | | 5/02 | TC7/0 | | | GCLK_IO0 |
|
||||
| 12 | D13_SCK | PB31 | | 15 | | | | | | 5/01 | TCC0/1 | TCC1/3 | | |
|
||||
| 13 | D14_CS | PB23 | | 7 | | | | | | 5/03 | TC7/1 | | | GCLK_IO1 |
|
||||
| 14 | A1 | PA02 | | 2 | 00 | | Y00 | VOUT| | | | | | |
|
||||
| 15 | A2 | PA03 | | 3 | 01 | | Y01 | | | | | | | |
|
||||
+------------+------------------+--------+-----------------+--------+-----+-----+-----+-----+---------+---------+--------+--------+----------+----------+
|
||||
*/
|
||||
|
||||
// Digital High
|
||||
{ PORTA, 6, PIO_TIMER, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM|PIN_ATTR_TIMER), No_ADC_Channel, PWM1_CH0, TCC1_CH0, EXTERNAL_INT_4 }, // TCC1/WO[0]
|
||||
{ PORTA, 7, PIO_TIMER, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM|PIN_ATTR_TIMER), No_ADC_Channel, PWM1_CH1, TCC1_CH1, EXTERNAL_INT_5 }, // TCC1/WO[1]
|
||||
{ PORTA, 18, PIO_TIMER, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM|PIN_ATTR_TIMER), No_ADC_Channel, PWM3_CH0, TC3_CH0, EXTERNAL_INT_2 }, // TC3/WO[0]
|
||||
{ PORTA, 16, PIO_TIMER, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM|PIN_ATTR_TIMER), No_ADC_Channel, PWM2_CH0, TCC2_CH0, EXTERNAL_INT_0 }, // TCC2/WO[0]
|
||||
{ PORTA, 19, PIO_TIMER_ALT, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM|PIN_ATTR_TIMER), No_ADC_Channel, PWM0_CH3, TCC0_CH3, EXTERNAL_INT_3 }, // TCC0/WO[3]
|
||||
{ PORTA, 10, PIO_SERCOM, (PIN_ATTR_DIGITAL), No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_11 },
|
||||
{ PORTA, 8, PIO_SERCOM, (PIN_ATTR_DIGITAL), No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_NMI },
|
||||
{ PORTA, 5, PIO_DIGITAL, (PIN_ATTR_DIGITAL), No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_14 },
|
||||
{ PORTA, 7, PIO_DIGITAL, (PIN_ATTR_DIGITAL), No_ADC_Channel, PWM0_CH1, TCC0_CH1, EXTERNAL_INT_9 },
|
||||
{ PORTA, 4, PIO_TIMER, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM|PIN_ATTR_TIMER), No_ADC_Channel, PWM0_CH0, TCC0_CH0, EXTERNAL_INT_NMI},
|
||||
{ PORTA, 6, PIO_TIMER, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM|PIN_ATTR_TIMER), No_ADC_Channel, PWM3_CH1, TC3_CH1, EXTERNAL_INT_1},
|
||||
{ PORTA, 23, PIO_SERCOM, (PIN_ATTR_DIGITAL), No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_6 },
|
||||
{ PORTA, 22, PIO_SERCOM, (PIN_ATTR_DIGITAL), No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_7 },
|
||||
{ PORTB, 2, PIO_DIGITAL, (PIN_ATTR_ANALOG|PIN_ATTR_DIGITAL), ADC_Channel10, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_2},
|
||||
{ PORTB, 3, PIO_DIGITAL, (PIN_ATTR_ANALOG|PIN_ATTR_DIGITAL), ADC_Channel11, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_3},
|
||||
{ PORTB, 30, PIO_SERCOM_ALT, (PIN_ATTR_DIGITAL), No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, NOT_AN_INTERRUPT },
|
||||
{ PORTB, 22, PIO_SERCOM_ALT, (PIN_ATTR_DIGITAL), No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, NOT_AN_INTERRUPT },
|
||||
{ PORTB, 31, PIO_SERCOM_ALT, (PIN_ATTR_DIGITAL), No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, NOT_AN_INTERRUPT },
|
||||
{ PORTB, 23, PIO_DIGITAL, (PIN_ATTR_DIGITAL), No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, NOT_AN_INTERRUPT },
|
||||
{ PORTA, 2, PIO_ANALOG, (PIN_ATTR_ANALOG), ADC_Channel0, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_1},
|
||||
{ PORTA, 3, PIO_ANALOG, (PIN_ATTR_ANALOG), ADC_Channel1, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_3},
|
||||
|
||||
// 13 (LED)
|
||||
{ PORTA, 17, PIO_PWM, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), No_ADC_Channel, PWM2_CH1, NOT_ON_TIMER, EXTERNAL_INT_1 }, // TCC2/WO[1]
|
||||
/*
|
||||
+-------- ----+------------------+--------+-----------------+--------+-----------------------+---------+---------+--------+--------+----------+----------+
|
||||
| Pin number | Internal pins | PIN | Notes | Peri.A | Peripheral B | Perip.C | Perip.D | Peri.E | Peri.F | Periph.G | Periph.H |
|
||||
| | | | | EIC | ADC | AC | PTC | DAC | SERCOMx | SERCOMx | TCCx | TCCx | COM | AC/GLCK |
|
||||
| | LED INDICATORS | | |(EXTINT)|(AIN)|(AIN)| | | (x/PAD) | (x/PAD) | (x/WO) | (x/WO) | | |
|
||||
+------------+------------------+--------+-----------------+--------+-----+-----+-----+-----+---------+---------+--------+--------+----------+----------+
|
||||
| 16 | LED_1 | PA19 | | 10 | | | X02 | | 0/02 | 2/02 |*TCC1/0 | TCC0/2 | I2S/SCK0 | GCLK_IO4 |
|
||||
| 17 | LED_2 | PA20 | | NMI | | | X00 | | 0/00 | 2/00 |*TCC0/0 | TCC1/2 | I2S/SD1 | |
|
||||
| 18 | LED_3 | PA21 | | 05 | 05 | 01 | Y03 | | | 0/01 |*TCC0/1 | | | |
|
||||
| 19 | LED_4 | PB16 | | 06 | 07 | 03 | Y05 | | | 0/03 |*TCC1/1 | | I2S/SD0 | |
|
||||
| 20 | LED_5 | PB17 | | *10 | | | | | | 4/02 |* TC5/0 | TCC0/4 | I2S/MCK1 | GCLK_IO4 |
|
||||
+------------+------------------+--------+-----------------+--------+-----+-----+-----+-----+---------+---------+--------+--------+----------+----------+
|
||||
*/
|
||||
|
||||
// 14..19 - Analog pins
|
||||
// --------------------
|
||||
{ PORTA, 2, PIO_ANALOG, PIN_ATTR_ANALOG, ADC_Channel0, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_2 }, // ADC/AIN[0]
|
||||
{ PORTB, 8, PIO_ANALOG, PIN_ATTR_ANALOG, ADC_Channel2, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_8 }, // ADC/AIN[2]
|
||||
{ PORTB, 9, PIO_ANALOG, PIN_ATTR_ANALOG, ADC_Channel3, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_9 }, // ADC/AIN[3]
|
||||
{ PORTA, 4, PIO_ANALOG, PIN_ATTR_ANALOG, ADC_Channel4, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_4 }, // ADC/AIN[4]
|
||||
{ PORTA, 5, PIO_ANALOG, PIN_ATTR_ANALOG, ADC_Channel5, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_5 }, // ADC/AIN[5]
|
||||
{ PORTB, 2, PIO_ANALOG, PIN_ATTR_ANALOG, ADC_Channel10, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_2 }, // ADC/AIN[10]
|
||||
{ PORTA, 19, PIO_OUTPUT, (PIN_ATTR_DIGITAL), No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, NOT_AN_INTERRUPT },
|
||||
{ PORTA, 20, PIO_OUTPUT, (PIN_ATTR_DIGITAL), No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, NOT_AN_INTERRUPT },
|
||||
{ PORTA, 21, PIO_OUTPUT, (PIN_ATTR_DIGITAL), No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, NOT_AN_INTERRUPT },
|
||||
{ PORTB, 16, PIO_OUTPUT, (PIN_ATTR_DIGITAL), No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, NOT_AN_INTERRUPT },
|
||||
{ PORTB, 17, PIO_OUTPUT, (PIN_ATTR_DIGITAL), No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, NOT_AN_INTERRUPT },
|
||||
|
||||
// 20..21 I2C pins (SDA/SCL and also EDBG:SDA/SCL)
|
||||
// ----------------------
|
||||
{ PORTA, 22, PIO_SERCOM, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_6 }, // SDA: SERCOM3/PAD[0]
|
||||
{ PORTA, 23, PIO_SERCOM, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_7 }, // SCL: SERCOM3/PAD[1]
|
||||
/*
|
||||
+------------+------------------+--------+-----------------+--------+-----------------------+---------+---------+--------+--------+----------+----------+
|
||||
| Pin number | Internal pins | PIN | Notes | Peri.A | Peripheral B | Perip.C | Perip.D | Peri.E | Peri.F | Periph.G | Periph.H |
|
||||
| | | | | EIC | ADC | AC | PTC | DAC | SERCOMx | SERCOMx | TCCx | TCCx | COM | AC/GLCK |
|
||||
| | Peripherals | | |(EXTINT)|(AIN)|(AIN)| | | (x/PAD) | (x/PAD) | (x/WO) | (x/WO) | | |
|
||||
+------------+------------------+--------+-----------------+--------+-----+-----+-----+-----+---------+---------+--------+--------+----------+----------+
|
||||
| 21 | NET_MOSI | PB12 | | 12 | | | X12 | | 4/00 | | TC4/0 | TCC0/6 | I2S/FS1 | GCLK_IO6 |
|
||||
| 22 | NET_MISO | PB14 | | 14 | | | X14 | | 4/02 | | TC5/0 | | | GCLK_IO0 |
|
||||
| 23 | NET_SCK | PB13 | | 13 | | | X13 | | 4/01 | | TC4/1 | TCC0/7 | | GCLK_IO7 |
|
||||
| 24 | NET_SS | PB15 | | 15 | | | X15 | | 4/03 | | TC5/1 | | | GCLK_IO1 |
|
||||
| 25 | NET_RST | PB11 | | 11 | | | | | | 4/3 | TC5/0 | TCC0/5 | I2S/SCK1 | GCLK_IO5 |
|
||||
| 26 | MOSI | PA16 | | 12 | | | X12 | | 1/00 | | TC4/0 | TCC0/6 | I2S/FS1 | GCLK_IO6 |
|
||||
| 27 | MISO | PA18 | | 14 | | | X14 | | 1/02 | | TC5/0 | | | GCLK_IO0 |
|
||||
| 28 | SCK | PA17 | | 13 | | | X13 | | 1/01 | | TC4/1 | TCC0/7 | | GCLK_IO7 |
|
||||
| 29 | CS_NRF | PA09 | | 9 | 17 | | X01 | | 0/01 | 2/1 | TCC0/1 | TCC1/3 | I2S/MCK | |
|
||||
| 30 | CS_RFM | PA12 | | 12 | | | | | 2/00 | 4/0 | TCC2/0 | TCC0/6 | | AC/CMP0 |
|
||||
| 31 | IRQ_NRF | PA14 | | 14 | | | | | 2/02 | 4/2 | TC3/0 | TCC0/4 | | GCLK_IO0 |
|
||||
| 32 | IRQ_RFM | PA13 | | 13 | | | | | 2/01 | 4/1 | TCC2/1 | TCC0/7 | | AC/CMP1 |
|
||||
| 33 | CS_SDCARD | PA27 | | 15 | | | | | | | | | | GCLK_IO0 |
|
||||
| 34 | CE_NRF | PA28 | | 8 | | | | | | | | | | GCLK_IO0 |
|
||||
| 35 | SDCARD_DETECT | PB07 | | 7 | | | | | | | | | | |
|
||||
+------------+------------------+--------+-----------------+--------+-----+-----+-----+-----+---------+---------+--------+--------+----------+----------+
|
||||
*/
|
||||
|
||||
// 22..24 - SPI pins (ICSP:MISO,SCK,MOSI)
|
||||
// ----------------------
|
||||
{ PORTA, 12, PIO_SERCOM_ALT, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_12 }, // MISO: SERCOM4/PAD[0]
|
||||
{ PORTB, 10, PIO_SERCOM_ALT, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_10 }, // MOSI: SERCOM4/PAD[2]
|
||||
{ PORTB, 11, PIO_SERCOM_ALT, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_11 }, // SCK: SERCOM4/PAD[3]
|
||||
{ PORTB, 12, PIO_SERCOM_ALT, (PIN_ATTR_NONE), No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_NONE }, // MOSI: SERCOM4/PAD[0]
|
||||
{ PORTB, 14, PIO_SERCOM_ALT, (PIN_ATTR_NONE), No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_NONE }, // MISO: SERCOM4/PAD[2]
|
||||
{ PORTB, 13, PIO_SERCOM_ALT, (PIN_ATTR_NONE), No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_NONE }, // SS: SERCOM4/PAD[3]
|
||||
{ PORTB, 15, PIO_SERCOM_ALT, (PIN_ATTR_NONE), No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_NONE }, // SCK: SERCOM1/PAD[1]
|
||||
{ PORTB, 11, PIO_OUTPUT, (PIN_ATTR_DIGITAL), No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_NONE }, // Reset line
|
||||
{ PORTA, 16, PIO_SERCOM, (PIN_ATTR_NONE), No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_NONE }, // MOSI: SERCOM4/PAD[0]
|
||||
{ PORTA, 18, PIO_SERCOM, (PIN_ATTR_NONE), No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_NONE }, // MISO: SERCOM4/PAD[2]
|
||||
{ PORTA, 17, PIO_SERCOM, (PIN_ATTR_NONE), No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_NONE }, // SS: SERCOM4/PAD[3]
|
||||
{ PORTA, 9, PIO_OUTPUT, (PIN_ATTR_DIGITAL), No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_9 }, // Reset line
|
||||
{ PORTA, 12, PIO_OUTPUT, (PIN_ATTR_DIGITAL), No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_12 }, // Reset line
|
||||
{ PORTA, 14, PIO_DIGITAL, (PIN_ATTR_DIGITAL), No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_14 }, // Reset line
|
||||
{ PORTA, 13, PIO_DIGITAL, (PIN_ATTR_DIGITAL), No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_13 }, // Reset line
|
||||
{ PORTA, 27, PIO_OUTPUT, (PIN_ATTR_DIGITAL), No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_NONE }, // Reset line
|
||||
{ PORTA, 28, PIO_OUTPUT, (PIN_ATTR_DIGITAL), No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_NONE }, // Reset line
|
||||
{ PORTB, 7, PIO_DIGITAL, (PIN_ATTR_DIGITAL), No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_7 }, // Reset line
|
||||
|
||||
// 25..26 - RX/TX LEDS (PB03/PA27)
|
||||
// --------------------
|
||||
{ PORTB, 3, PIO_OUTPUT, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_NONE }, // used as output only
|
||||
{ PORTA, 27, PIO_OUTPUT, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_NONE }, // used as output only
|
||||
/*
|
||||
+------------+------------------+--------+-----------------+--------+-----------------------+---------+---------+--------+--------+----------+----------+
|
||||
| Pin number | Internal pins | PIN | Notes | Peri.A | Peripheral B | Perip.C | Perip.D | Peri.E | Peri.F | Periph.G | Periph.H |
|
||||
| | | | | EIC | ADC | AC | PTC | DAC | SERCOMx | SERCOMx | TCCx | TCCx | COM | AC/GLCK |
|
||||
| | Peripherals | | |(EXTINT)|(AIN)|(AIN)| | | (x/PAD) | (x/PAD) | (x/WO) | (x/WO) | | |
|
||||
+------------+------------------+--------+-----------------+--------+-----+-----+-----+-----+---------+---------+--------+--------+----------+----------+
|
||||
| 36 | BAT_DET | PB08 | | 8 | 2 | | Y14 | | | 4/0 | TC4/0 | | | |
|
||||
| 37 | SUPPLY_DET | PB09 | | 9 | 3 | | Y15 | | | 4/1 | TC4/1 | | | |
|
||||
| 38 | TESTMODE | PB04 | | 4 | 12 | | Y10 | | | | | | | GCLK_IO7 |
|
||||
| 39 | BOOTMODE | PA15 | | 15 | | | | | 2/03 | 4/3 | TC3/1 | TCC0/5 | | GCLK_IO1 |
|
||||
| 39 | INCL_SW | PB01 | | 1 | 9 | | Y07 | | | 5/3 | TC7/1 | | | GCLK_IO1 |
|
||||
| 39 | SWC1 | PB05 | | 5 | 13 | | Y11 | | | | | | | |
|
||||
| 39 | SWC2 | PB06 | | 6 | 14 | | Y12 | | | | | | | |
|
||||
+------------+------------------+--------+-----------------+--------+-----+-----+-----+-----+---------+---------+--------+--------+----------+----------+
|
||||
*/
|
||||
|
||||
// 27..29 - USB
|
||||
// --------------------
|
||||
{ PORTA, 28, PIO_COM, PIN_ATTR_NONE, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_NONE }, // USB Host enable
|
||||
{ PORTA, 24, PIO_COM, PIN_ATTR_NONE, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_NONE }, // USB/DM
|
||||
{ PORTA, 25, PIO_COM, PIN_ATTR_NONE, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_NONE }, // USB/DP
|
||||
|
||||
// 30..41 - EDBG
|
||||
// ----------------------
|
||||
// 30/31 - EDBG/UART
|
||||
{ PORTB, 22, PIO_SERCOM_ALT, PIN_ATTR_NONE, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_NONE }, // TX: SERCOM5/PAD[2]
|
||||
{ PORTB, 23, PIO_SERCOM_ALT, PIN_ATTR_NONE, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_NONE }, // RX: SERCOM5/PAD[3]
|
||||
|
||||
// 32/33 I2C (SDA/SCL and also EDBG:SDA/SCL)
|
||||
{ PORTA, 22, PIO_SERCOM, PIN_ATTR_NONE, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_NONE }, // SDA: SERCOM3/PAD[0]
|
||||
{ PORTA, 23, PIO_SERCOM, PIN_ATTR_NONE, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_NONE }, // SCL: SERCOM3/PAD[1]
|
||||
|
||||
// 34..37 - EDBG/SPI
|
||||
{ PORTA, 19, PIO_SERCOM, PIN_ATTR_NONE, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_NONE }, // MISO: SERCOM1/PAD[3]
|
||||
{ PORTA, 16, PIO_SERCOM, PIN_ATTR_NONE, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_NONE }, // MOSI: SERCOM1/PAD[0]
|
||||
{ PORTA, 18, PIO_SERCOM, PIN_ATTR_NONE, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_NONE }, // SS: SERCOM1/PAD[2]
|
||||
{ PORTA, 17, PIO_SERCOM, PIN_ATTR_NONE, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_NONE }, // SCK: SERCOM1/PAD[1]
|
||||
|
||||
// 38..41 - EDBG/Digital
|
||||
{ PORTA, 13, PIO_PWM, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), No_ADC_Channel, PWM0_CH5, NOT_ON_TIMER, EXTERNAL_INT_13 }, // EIC/EXTINT[13] *TCC2/WO[1] TCC0/WO[7]
|
||||
{ PORTA, 21, PIO_PWM_ALT, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), No_ADC_Channel, PWM0_CH7, NOT_ON_TIMER, EXTERNAL_INT_NONE }, // Pin 7
|
||||
{ PORTA, 6, PIO_PWM, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), No_ADC_Channel, PWM1_CH0, NOT_ON_TIMER, EXTERNAL_INT_NONE }, // Pin 8
|
||||
{ PORTA, 7, PIO_PWM, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), No_ADC_Channel, PWM1_CH1, NOT_ON_TIMER, EXTERNAL_INT_NONE }, // Pin 9
|
||||
|
||||
// 42 (AREF)
|
||||
{ PORTA, 3, PIO_ANALOG, PIN_ATTR_ANALOG, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_NONE }, // DAC/VREFP
|
||||
|
||||
// ----------------------
|
||||
// 43 - Alternate use of A0 (DAC output)
|
||||
{ PORTA, 2, PIO_ANALOG, PIN_ATTR_ANALOG, DAC_Channel0, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_2 }, // DAC/VOUT
|
||||
// 44 - LED_4 (yellow led)
|
||||
{ PORTB, 16, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_NONE },
|
||||
|
||||
// 45 - CE_NRF
|
||||
{ PORTA, 28, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_NONE },
|
||||
// 46 - 49 NET_SPI (SERCOM4)
|
||||
{ PORTB, 15, PIO_SERCOM, PIN_ATTR_NONE, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_NONE }, // MISO: SERCOM1/PAD[3]
|
||||
{ PORTB, 12, PIO_SERCOM, PIN_ATTR_NONE, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_NONE }, // MOSI: SERCOM1/PAD[0]
|
||||
{ PORTB, 14, PIO_SERCOM, PIN_ATTR_NONE, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_NONE }, // SS: SERCOM1/PAD[2]
|
||||
{ PORTB, 13, PIO_SERCOM, PIN_ATTR_NONE, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_NONE } // SCK: SERCOM1/PAD[1]
|
||||
};
|
||||
{ PORTB, 8, PIO_ANALOG, PIN_ATTR_ANALOG, ADC_Channel2, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_NONE },
|
||||
{ PORTB, 9, PIO_ANALOG, PIN_ATTR_ANALOG, ADC_Channel3, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_NONE },
|
||||
{ PORTB, 4, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_4 },
|
||||
{ PORTA, 15, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_15 },
|
||||
{ PORTB, 1, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_1 },
|
||||
{ PORTB, 5, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_5 },
|
||||
{ PORTA, 6, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_6 }
|
||||
};
|
||||
|
||||
const void* g_apTCInstances[TCC_INST_NUM+TC_INST_NUM]={ TCC0, TCC1, TCC2, TC3, TC4, TC5 } ;
|
||||
|
||||
@@ -218,15 +162,8 @@ SERCOM sercom4( SERCOM4 ) ;
|
||||
SERCOM sercom5( SERCOM5 ) ;
|
||||
|
||||
Uart Serial1( &sercom0, PIN_SERIAL1_RX, PIN_SERIAL1_TX, PAD_SERIAL1_RX, PAD_SERIAL1_TX ) ;
|
||||
//Uart Serial( &sercom5, PIN_SERIAL_RX, PIN_SERIAL_TX, PAD_SERIAL_RX, PAD_SERIAL_TX ) ;
|
||||
|
||||
void SERCOM0_Handler()
|
||||
{
|
||||
Serial1.IrqHandler();
|
||||
}
|
||||
/*
|
||||
void SERCOM5_Handler()
|
||||
{
|
||||
Serial.IrqHandler();
|
||||
}
|
||||
|
||||
*/
|
||||
@@ -16,8 +16,8 @@
|
||||
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
#ifndef _VARIANT_ARDUINO_ZERO_
|
||||
#define _VARIANT_ARDUINO_ZERO_
|
||||
#ifndef _VARIANT_MYSENSORS_GW_
|
||||
#define _VARIANT_MYSENSORS_GW_
|
||||
|
||||
/*----------------------------------------------------------------------------
|
||||
* Definitions
|
||||
@@ -50,10 +50,10 @@ extern "C"
|
||||
*----------------------------------------------------------------------------*/
|
||||
|
||||
// Number of pins defined in PinDescription array
|
||||
#define PINS_COUNT (26u)
|
||||
#define NUM_DIGITAL_PINS (14u)
|
||||
#define NUM_ANALOG_INPUTS (6u)
|
||||
#define NUM_ANALOG_OUTPUTS (1u)
|
||||
#define PINS_COUNT (39u)
|
||||
#define NUM_DIGITAL_PINS (16u)
|
||||
//#define NUM_ANALOG_INPUTS (6u)
|
||||
//#define NUM_ANALOG_OUTPUTS (1u)
|
||||
|
||||
#define digitalPinToPort(P) ( &(PORT->Group[g_APinDescription[P].ulPort]) )
|
||||
#define digitalPinToBitMask(P) ( 1 << g_APinDescription[P].ulPin )
|
||||
@@ -84,20 +84,27 @@ extern "C"
|
||||
#define PIN_LED4 LED_GREEN
|
||||
#define LED_BUILTIN LED_YELLOW
|
||||
|
||||
#define LED_BLUE (12u)
|
||||
#define LED_RED (6u)
|
||||
#define LED_GREEN (7u)
|
||||
#define LED_YELLOW (44u)
|
||||
|
||||
#define LED_1 (16u)
|
||||
#define LED_2 (17u)
|
||||
#define LED_3 (18u)
|
||||
#define LED_4 (19u)
|
||||
#define LED_5 (20u)
|
||||
|
||||
#define LED_BLUE (16u)
|
||||
#define LED_RED (17u)
|
||||
#define LED_GREEN (18u)
|
||||
#define LED_YELLOW (19u)
|
||||
#define LED_ORANGE (20u)
|
||||
/*
|
||||
* Analog pins
|
||||
*/
|
||||
#define PIN_A0 (14ul)
|
||||
#define PIN_A1 (15ul)
|
||||
#define PIN_A2 (16ul)
|
||||
#define PIN_A3 (17ul)
|
||||
#define PIN_A4 (18ul)
|
||||
#define PIN_A5 (19ul)
|
||||
#define PIN_A2 ( 8ul)
|
||||
#define PIN_A3 ( 9ul)
|
||||
#define PIN_A4 (36ul)
|
||||
#define PIN_A5 (37ul)
|
||||
|
||||
static const uint8_t A0 = PIN_A0 ;
|
||||
static const uint8_t A1 = PIN_A1 ;
|
||||
@@ -108,17 +115,17 @@ static const uint8_t A5 = PIN_A5 ;
|
||||
#define ADC_RESOLUTION 12
|
||||
|
||||
// Other pins
|
||||
#define PIN_ATN (38ul)
|
||||
static const uint8_t ATN = PIN_ATN;
|
||||
//#define PIN_ATN (38ul)
|
||||
//static const uint8_t ATN = PIN_ATN;
|
||||
|
||||
/*
|
||||
* Serial interfaces
|
||||
*/
|
||||
// Serial (EDBG)
|
||||
#define PIN_SERIAL_RX (31ul)
|
||||
#define PIN_SERIAL_TX (30ul)
|
||||
#define PAD_SERIAL_TX (UART_TX_PAD_2)
|
||||
#define PAD_SERIAL_RX (SERCOM_RX_PAD_3)
|
||||
//#define PIN_SERIAL_RX (31ul)
|
||||
//#define PIN_SERIAL_TX (30ul)
|
||||
//#define PAD_SERIAL_TX (UART_TX_PAD_2)
|
||||
//#define PAD_SERIAL_RX (SERCOM_RX_PAD_3)
|
||||
|
||||
// Serial1
|
||||
#define PIN_SERIAL1_RX (0ul)
|
||||
@@ -129,8 +136,47 @@ static const uint8_t ATN = PIN_ATN;
|
||||
/*
|
||||
* SPI Interfaces
|
||||
*/
|
||||
#define SPI_INTERFACES_COUNT 1
|
||||
#define SPI_INTERFACES_COUNT 3
|
||||
|
||||
// SPI
|
||||
#define PIN_SPI_MISO (27u)
|
||||
#define PIN_SPI_MOSI (26u)
|
||||
#define PIN_SPI_SCK (28u)
|
||||
#define PIN_SPI_SS (PIN_A2)
|
||||
#define PERIPH_SPI sercom1
|
||||
#define PAD_SPI_TX SPI_PAD_0_SCK_1
|
||||
#define PAD_SPI_RX SERCOM_RX_PAD_2
|
||||
static const uint8_t SS = PIN_SPI_SS; // SPI Slave SS not used. Set here only for reference.
|
||||
static const uint8_t MOSI = PIN_SPI_MOSI;
|
||||
static const uint8_t MISO = PIN_SPI_MISO;
|
||||
static const uint8_t SCK = PIN_SPI_SCK;
|
||||
|
||||
// SPI1: Connected to W5100
|
||||
#define PIN_SPI1_MISO (22u)
|
||||
#define PIN_SPI1_MOSI (21u)
|
||||
#define PIN_SPI1_SCK (23u)
|
||||
#define PERIPH_SPI1 sercom4
|
||||
#define PAD_SPI1_TX SPI_PAD_0_SCK_1
|
||||
#define PAD_SPI1_RX SERCOM_RX_PAD_2
|
||||
static const uint8_t MOSI1 = PIN_SPI1_MOSI;
|
||||
static const uint8_t MISO1 = PIN_SPI1_MISO;
|
||||
static const uint8_t SCK1 = PIN_SPI1_SCK;
|
||||
|
||||
// SPI2: Connected to MysX
|
||||
#define PIN_SPI2_MISO (11u)
|
||||
#define PIN_SPI2_MOSI (10u)
|
||||
#define PIN_SPI2_SCK (12u)
|
||||
#define PERIPH_SPI2 sercom2
|
||||
#define PAD_SPI2_TX SPI_PAD_0_SCK_1
|
||||
#define PAD_SPI2_RX SERCOM_RX_PAD_2
|
||||
static const uint8_t MOSI2 = PIN_SPI2_MOSI;
|
||||
static const uint8_t MISO2 = PIN_SPI2_MISO;
|
||||
static const uint8_t SCK2 = PIN_SPI2_SCK;
|
||||
|
||||
#define SPI_ETH SPI1
|
||||
#define SPI_USER SPI2
|
||||
|
||||
/*
|
||||
#define RADIO_SPI_MISO (36u)
|
||||
#define RADIO_SPI_MOSI (35u)
|
||||
#define RADIO_SPI_SCK (37u)
|
||||
@@ -142,9 +188,9 @@ static const uint8_t ATN = PIN_ATN;
|
||||
#define USR_SPI_MISO (48u)
|
||||
#define USR_SPI_MOSI (47u)
|
||||
#define USR_SPI_SCK (49u)
|
||||
*/
|
||||
|
||||
|
||||
static const uint8_t SS = PIN_A2 ; // SERCOM4 last PAD is present on A2 but HW SS isn't used. Set here only for reference.
|
||||
//static const uint8_t SS = PIN_A2 ; // SERCOM4 last PAD is present on A2 but HW SS isn't used. Set here only for reference.
|
||||
/*static const uint8_t MOSI = PIN_SPI_MOSI ;
|
||||
static const uint8_t MISO = PIN_SPI_MISO ;
|
||||
static const uint8_t SCK = PIN_SPI_SCK ;
|
||||
@@ -154,8 +200,8 @@ static const uint8_t SCK = PIN_SPI_SCK ;
|
||||
*/
|
||||
#define WIRE_INTERFACES_COUNT 1
|
||||
|
||||
#define PIN_WIRE_SDA (20u)
|
||||
#define PIN_WIRE_SCL (21u)
|
||||
#define PIN_WIRE_SDA (07u)
|
||||
#define PIN_WIRE_SCL (06u)
|
||||
|
||||
/*
|
||||
* USB
|
||||
@@ -173,31 +219,31 @@ static const uint8_t SCK = PIN_SPI_SCK ;
|
||||
* MYSX pins
|
||||
*/
|
||||
|
||||
#define MYSX_D1_DFM
|
||||
#define MYSX_D2_DTM
|
||||
#define MYSX_D3_INT
|
||||
#define MYSX_D4_INT
|
||||
#define MYSX_D5_PWM
|
||||
#define MYSX_D6_PWM
|
||||
#define MYSX_D7_SCL
|
||||
#define MYSX_D8_SDA
|
||||
#define MYSX_D9_A3
|
||||
#define MYSX_D10_A4
|
||||
#define MYSX_D11_MOSI
|
||||
#define MYSX_D12_MISO
|
||||
#define MYSX_D13_SCK
|
||||
#define MYSX_D14_CS
|
||||
#define MYSX_A1
|
||||
#define MYSX_A2
|
||||
|
||||
#define MYSX_D1_DFM (00ul)
|
||||
#define MYSX_D2_DTM (01ul)
|
||||
#define MYSX_D3_INT (02ul)
|
||||
#define MYSX_D4_INT (03ul)
|
||||
#define MYSX_D5_PWM (04ul)
|
||||
#define MYSX_D6_PWM (05ul)
|
||||
#define MYSX_D7_SCL (06ul)
|
||||
#define MYSX_D8_SDA (07ul)
|
||||
#define MYSX_D9_A3 (08ul)
|
||||
#define MYSX_D10_A4 (09ul)
|
||||
#define MYSX_D11_MOSI (10ul)
|
||||
#define MYSX_D12_MISO (11ul)
|
||||
#define MYSX_D13_SCK (12ul)
|
||||
#define MYSX_D14_CS (13ul)
|
||||
#define MYSX_A1 (14ul)
|
||||
#define MYSX_A2 (15ul)
|
||||
#define MYSX_SPI SPI2
|
||||
|
||||
#define MY_SIGNING_ATSHA204_PIN 17
|
||||
#define MY_HW_ERR_LED_PIN LED_RED
|
||||
#define MY_HW_RX_LED_PIN LED_YELLOW
|
||||
#define MY_HW_TX_LED_PIN LED_GREEN
|
||||
#define MY_RF69_SPI_CS 22
|
||||
#define MY_RF69_IRQ_PIN 38
|
||||
#define MY_RF69_IRQ_NUM 38
|
||||
#define MY_RF69_SPI_CS 30
|
||||
#define MY_RF69_IRQ_PIN 32
|
||||
#define MY_RF69_IRQ_NUM 32
|
||||
|
||||
/*----------------------------------------------------------------------------
|
||||
* Arduino objects - C++ only
|
||||
@@ -243,5 +289,4 @@ extern Uart Serial1;
|
||||
//#define SERIAL_PORT_HARDWARE_OPEN Serial1
|
||||
|
||||
#define Serial SerialUSB
|
||||
#endif /* _VARIANT_ARDUINO_ZERO_ */
|
||||
|
||||
#endif /* _VARIANT_MYSENSORS_GW_ */
|
||||
|
||||
Reference in New Issue
Block a user