@@ -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
|
License along with this library; if not, write to the Free Software
|
||||||
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
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"
|
#include "variant.h"
|
||||||
|
|
||||||
@@ -111,101 +23,133 @@
|
|||||||
*/
|
*/
|
||||||
const PinDescription g_APinDescription[]=
|
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 },
|
| Pin number | MysX pin | PIN | Notes | Peri.A | Peripheral B | Perip.C | Perip.D | Peri.E | Peri.F | Periph.G | Periph.H |
|
||||||
{ 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]
|
| | | | | EIC | ADC | AC | PTC | DAC | SERCOMx | SERCOMx | TCCx | TCCx | COM | AC/GLCK |
|
||||||
{ 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]
|
| | | | |(EXTINT)|(AIN)|(AIN)| | | (x/PAD) | (x/PAD) | (x/WO) | (x/WO) | | |
|
||||||
{ 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]
|
| 00 | D1_DFM | PA10 | | 10 | 10 | | X02 | | 0/02 | 2/02 |*TCC1/0 | TCC0/2 | I2S/SCK0 | GCLK_IO4 |
|
||||||
{ PORTA, 21, PIO_DIGITAL, (PIN_ATTR_DIGITAL), No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_5 },
|
| 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, 10, PIO_SERCOM, (PIN_ATTR_DIGITAL), No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_11 },
|
||||||
{ 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, 8, PIO_SERCOM, (PIN_ATTR_DIGITAL), No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_NMI },
|
||||||
{ 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, 5, PIO_DIGITAL, (PIN_ATTR_DIGITAL), No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_14 },
|
||||||
{ 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, 7, PIO_DIGITAL, (PIN_ATTR_DIGITAL), No_ADC_Channel, PWM0_CH1, TCC0_CH1, EXTERNAL_INT_9 },
|
||||||
{ 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, 4, PIO_TIMER, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM|PIN_ATTR_TIMER), No_ADC_Channel, PWM0_CH0, TCC0_CH0, EXTERNAL_INT_NMI},
|
||||||
{ 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, 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, 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, 2, PIO_ANALOG, PIN_ATTR_ANALOG, ADC_Channel0, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_2 }, // ADC/AIN[0]
|
{ PORTA, 21, PIO_OUTPUT, (PIN_ATTR_DIGITAL), No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, NOT_AN_INTERRUPT },
|
||||||
{ PORTB, 8, PIO_ANALOG, PIN_ATTR_ANALOG, ADC_Channel2, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_8 }, // ADC/AIN[2]
|
{ PORTB, 16, PIO_OUTPUT, (PIN_ATTR_DIGITAL), No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, NOT_AN_INTERRUPT },
|
||||||
{ PORTB, 9, PIO_ANALOG, PIN_ATTR_ANALOG, ADC_Channel3, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_9 }, // ADC/AIN[3]
|
{ PORTB, 17, PIO_OUTPUT, (PIN_ATTR_DIGITAL), No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, NOT_AN_INTERRUPT },
|
||||||
{ 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]
|
|
||||||
|
|
||||||
// 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]
|
| Pin number | Internal pins | PIN | Notes | Peri.A | Peripheral B | Perip.C | Perip.D | Peri.E | Peri.F | Periph.G | Periph.H |
|
||||||
{ PORTA, 23, PIO_SERCOM, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_7 }, // SCL: SERCOM3/PAD[1]
|
| | | | | 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)
|
{ 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]
|
||||||
{ 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, 13, PIO_SERCOM_ALT, (PIN_ATTR_NONE), No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_NONE }, // SS: SERCOM4/PAD[3]
|
||||||
{ 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, 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_SERCOM_ALT, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_11 }, // SCK: SERCOM4/PAD[3]
|
{ 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
|
| Pin number | Internal pins | PIN | Notes | Peri.A | Peripheral B | Perip.C | Perip.D | Peri.E | Peri.F | Periph.G | Periph.H |
|
||||||
{ PORTA, 27, PIO_OUTPUT, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_NONE }, // used as output only
|
| | | | | 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
|
{ 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 },
|
||||||
{ PORTA, 28, PIO_COM, PIN_ATTR_NONE, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_NONE }, // USB Host enable
|
{ PORTB, 4, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_4 },
|
||||||
{ PORTA, 24, PIO_COM, PIN_ATTR_NONE, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_NONE }, // USB/DM
|
{ PORTA, 15, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_15 },
|
||||||
{ PORTA, 25, PIO_COM, PIN_ATTR_NONE, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_NONE }, // USB/DP
|
{ 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 },
|
||||||
// 30..41 - EDBG
|
{ PORTA, 6, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_6 }
|
||||||
// ----------------------
|
};
|
||||||
// 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]
|
|
||||||
};
|
|
||||||
|
|
||||||
const void* g_apTCInstances[TCC_INST_NUM+TC_INST_NUM]={ TCC0, TCC1, TCC2, TC3, TC4, TC5 } ;
|
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 ) ;
|
SERCOM sercom5( SERCOM5 ) ;
|
||||||
|
|
||||||
Uart Serial1( &sercom0, PIN_SERIAL1_RX, PIN_SERIAL1_TX, PAD_SERIAL1_RX, PAD_SERIAL1_TX ) ;
|
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()
|
void SERCOM0_Handler()
|
||||||
{
|
{
|
||||||
Serial1.IrqHandler();
|
Serial1.IrqHandler();
|
||||||
}
|
}
|
||||||
/*
|
|
||||||
void SERCOM5_Handler()
|
|
||||||
{
|
|
||||||
Serial.IrqHandler();
|
|
||||||
}
|
|
||||||
|
|
||||||
*/
|
|
||||||
@@ -16,8 +16,8 @@
|
|||||||
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef _VARIANT_ARDUINO_ZERO_
|
#ifndef _VARIANT_MYSENSORS_GW_
|
||||||
#define _VARIANT_ARDUINO_ZERO_
|
#define _VARIANT_MYSENSORS_GW_
|
||||||
|
|
||||||
/*----------------------------------------------------------------------------
|
/*----------------------------------------------------------------------------
|
||||||
* Definitions
|
* Definitions
|
||||||
@@ -50,10 +50,10 @@ extern "C"
|
|||||||
*----------------------------------------------------------------------------*/
|
*----------------------------------------------------------------------------*/
|
||||||
|
|
||||||
// Number of pins defined in PinDescription array
|
// Number of pins defined in PinDescription array
|
||||||
#define PINS_COUNT (26u)
|
#define PINS_COUNT (39u)
|
||||||
#define NUM_DIGITAL_PINS (14u)
|
#define NUM_DIGITAL_PINS (16u)
|
||||||
#define NUM_ANALOG_INPUTS (6u)
|
//#define NUM_ANALOG_INPUTS (6u)
|
||||||
#define NUM_ANALOG_OUTPUTS (1u)
|
//#define NUM_ANALOG_OUTPUTS (1u)
|
||||||
|
|
||||||
#define digitalPinToPort(P) ( &(PORT->Group[g_APinDescription[P].ulPort]) )
|
#define digitalPinToPort(P) ( &(PORT->Group[g_APinDescription[P].ulPort]) )
|
||||||
#define digitalPinToBitMask(P) ( 1 << g_APinDescription[P].ulPin )
|
#define digitalPinToBitMask(P) ( 1 << g_APinDescription[P].ulPin )
|
||||||
@@ -84,20 +84,27 @@ extern "C"
|
|||||||
#define PIN_LED4 LED_GREEN
|
#define PIN_LED4 LED_GREEN
|
||||||
#define LED_BUILTIN LED_YELLOW
|
#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
|
* Analog pins
|
||||||
*/
|
*/
|
||||||
#define PIN_A0 (14ul)
|
#define PIN_A0 (14ul)
|
||||||
#define PIN_A1 (15ul)
|
#define PIN_A1 (15ul)
|
||||||
#define PIN_A2 (16ul)
|
#define PIN_A2 ( 8ul)
|
||||||
#define PIN_A3 (17ul)
|
#define PIN_A3 ( 9ul)
|
||||||
#define PIN_A4 (18ul)
|
#define PIN_A4 (36ul)
|
||||||
#define PIN_A5 (19ul)
|
#define PIN_A5 (37ul)
|
||||||
|
|
||||||
static const uint8_t A0 = PIN_A0 ;
|
static const uint8_t A0 = PIN_A0 ;
|
||||||
static const uint8_t A1 = PIN_A1 ;
|
static const uint8_t A1 = PIN_A1 ;
|
||||||
@@ -108,17 +115,17 @@ static const uint8_t A5 = PIN_A5 ;
|
|||||||
#define ADC_RESOLUTION 12
|
#define ADC_RESOLUTION 12
|
||||||
|
|
||||||
// Other pins
|
// Other pins
|
||||||
#define PIN_ATN (38ul)
|
//#define PIN_ATN (38ul)
|
||||||
static const uint8_t ATN = PIN_ATN;
|
//static const uint8_t ATN = PIN_ATN;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Serial interfaces
|
* Serial interfaces
|
||||||
*/
|
*/
|
||||||
// Serial (EDBG)
|
// Serial (EDBG)
|
||||||
#define PIN_SERIAL_RX (31ul)
|
//#define PIN_SERIAL_RX (31ul)
|
||||||
#define PIN_SERIAL_TX (30ul)
|
//#define PIN_SERIAL_TX (30ul)
|
||||||
#define PAD_SERIAL_TX (UART_TX_PAD_2)
|
//#define PAD_SERIAL_TX (UART_TX_PAD_2)
|
||||||
#define PAD_SERIAL_RX (SERCOM_RX_PAD_3)
|
//#define PAD_SERIAL_RX (SERCOM_RX_PAD_3)
|
||||||
|
|
||||||
// Serial1
|
// Serial1
|
||||||
#define PIN_SERIAL1_RX (0ul)
|
#define PIN_SERIAL1_RX (0ul)
|
||||||
@@ -129,8 +136,47 @@ static const uint8_t ATN = PIN_ATN;
|
|||||||
/*
|
/*
|
||||||
* SPI Interfaces
|
* 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_MISO (36u)
|
||||||
#define RADIO_SPI_MOSI (35u)
|
#define RADIO_SPI_MOSI (35u)
|
||||||
#define RADIO_SPI_SCK (37u)
|
#define RADIO_SPI_SCK (37u)
|
||||||
@@ -142,9 +188,9 @@ static const uint8_t ATN = PIN_ATN;
|
|||||||
#define USR_SPI_MISO (48u)
|
#define USR_SPI_MISO (48u)
|
||||||
#define USR_SPI_MOSI (47u)
|
#define USR_SPI_MOSI (47u)
|
||||||
#define USR_SPI_SCK (49u)
|
#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 MOSI = PIN_SPI_MOSI ;
|
||||||
static const uint8_t MISO = PIN_SPI_MISO ;
|
static const uint8_t MISO = PIN_SPI_MISO ;
|
||||||
static const uint8_t SCK = PIN_SPI_SCK ;
|
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 WIRE_INTERFACES_COUNT 1
|
||||||
|
|
||||||
#define PIN_WIRE_SDA (20u)
|
#define PIN_WIRE_SDA (07u)
|
||||||
#define PIN_WIRE_SCL (21u)
|
#define PIN_WIRE_SCL (06u)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* USB
|
* USB
|
||||||
@@ -173,31 +219,31 @@ static const uint8_t SCK = PIN_SPI_SCK ;
|
|||||||
* MYSX pins
|
* MYSX pins
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define MYSX_D1_DFM
|
#define MYSX_D1_DFM (00ul)
|
||||||
#define MYSX_D2_DTM
|
#define MYSX_D2_DTM (01ul)
|
||||||
#define MYSX_D3_INT
|
#define MYSX_D3_INT (02ul)
|
||||||
#define MYSX_D4_INT
|
#define MYSX_D4_INT (03ul)
|
||||||
#define MYSX_D5_PWM
|
#define MYSX_D5_PWM (04ul)
|
||||||
#define MYSX_D6_PWM
|
#define MYSX_D6_PWM (05ul)
|
||||||
#define MYSX_D7_SCL
|
#define MYSX_D7_SCL (06ul)
|
||||||
#define MYSX_D8_SDA
|
#define MYSX_D8_SDA (07ul)
|
||||||
#define MYSX_D9_A3
|
#define MYSX_D9_A3 (08ul)
|
||||||
#define MYSX_D10_A4
|
#define MYSX_D10_A4 (09ul)
|
||||||
#define MYSX_D11_MOSI
|
#define MYSX_D11_MOSI (10ul)
|
||||||
#define MYSX_D12_MISO
|
#define MYSX_D12_MISO (11ul)
|
||||||
#define MYSX_D13_SCK
|
#define MYSX_D13_SCK (12ul)
|
||||||
#define MYSX_D14_CS
|
#define MYSX_D14_CS (13ul)
|
||||||
#define MYSX_A1
|
#define MYSX_A1 (14ul)
|
||||||
#define MYSX_A2
|
#define MYSX_A2 (15ul)
|
||||||
|
#define MYSX_SPI SPI2
|
||||||
|
|
||||||
#define MY_SIGNING_ATSHA204_PIN 17
|
#define MY_SIGNING_ATSHA204_PIN 17
|
||||||
#define MY_HW_ERR_LED_PIN LED_RED
|
#define MY_HW_ERR_LED_PIN LED_RED
|
||||||
#define MY_HW_RX_LED_PIN LED_YELLOW
|
#define MY_HW_RX_LED_PIN LED_YELLOW
|
||||||
#define MY_HW_TX_LED_PIN LED_GREEN
|
#define MY_HW_TX_LED_PIN LED_GREEN
|
||||||
#define MY_RF69_SPI_CS 22
|
#define MY_RF69_SPI_CS 30
|
||||||
#define MY_RF69_IRQ_PIN 38
|
#define MY_RF69_IRQ_PIN 32
|
||||||
#define MY_RF69_IRQ_NUM 38
|
#define MY_RF69_IRQ_NUM 32
|
||||||
|
|
||||||
/*----------------------------------------------------------------------------
|
/*----------------------------------------------------------------------------
|
||||||
* Arduino objects - C++ only
|
* Arduino objects - C++ only
|
||||||
@@ -243,5 +289,4 @@ extern Uart Serial1;
|
|||||||
//#define SERIAL_PORT_HARDWARE_OPEN Serial1
|
//#define SERIAL_PORT_HARDWARE_OPEN Serial1
|
||||||
|
|
||||||
#define Serial SerialUSB
|
#define Serial SerialUSB
|
||||||
#endif /* _VARIANT_ARDUINO_ZERO_ */
|
#endif /* _VARIANT_MYSENSORS_GW_ */
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user