2018-11-07 00:32:36 +01:00
|
|
|
#include "samd_platform.h"
|
|
|
|
|
|
|
|
#ifdef ARDUINO_ARCH_SAMD
|
|
|
|
#include <knx/bits.h>
|
|
|
|
|
|
|
|
#include <Arduino.h>
|
|
|
|
#include <FlashAsEEPROM.h>
|
|
|
|
|
2021-04-01 09:34:26 +02:00
|
|
|
SamdPlatform::SamdPlatform()
|
|
|
|
#ifndef KNX_NO_DEFAULT_UART
|
|
|
|
: ArduinoPlatform(&Serial1)
|
|
|
|
#endif
|
2018-11-07 00:32:36 +01:00
|
|
|
{
|
|
|
|
}
|
|
|
|
|
2019-09-09 18:19:09 +02:00
|
|
|
SamdPlatform::SamdPlatform( HardwareSerial* s) : ArduinoPlatform(s)
|
2019-09-01 20:49:28 +02:00
|
|
|
{
|
|
|
|
}
|
|
|
|
|
2021-04-12 11:40:56 +02:00
|
|
|
uint32_t SamdPlatform::uniqueSerialNumber()
|
|
|
|
{
|
|
|
|
#if defined (__SAMD51__)
|
|
|
|
// SAMD51 from section 9.6 of the datasheet
|
|
|
|
#define SERIAL_NUMBER_WORD_0 *(volatile uint32_t*)(0x008061FC)
|
|
|
|
#define SERIAL_NUMBER_WORD_1 *(volatile uint32_t*)(0x00806010)
|
|
|
|
#define SERIAL_NUMBER_WORD_2 *(volatile uint32_t*)(0x00806014)
|
|
|
|
#define SERIAL_NUMBER_WORD_3 *(volatile uint32_t*)(0x00806018)
|
|
|
|
#else
|
|
|
|
//#elif defined (__SAMD21E17A__) || defined(__SAMD21G18A__) || defined(__SAMD21E18A__) || defined(__SAMD21J18A__)
|
|
|
|
// SAMD21 from section 9.3.3 of the datasheet
|
|
|
|
#define SERIAL_NUMBER_WORD_0 *(volatile uint32_t*)(0x0080A00C)
|
|
|
|
#define SERIAL_NUMBER_WORD_1 *(volatile uint32_t*)(0x0080A040)
|
|
|
|
#define SERIAL_NUMBER_WORD_2 *(volatile uint32_t*)(0x0080A044)
|
|
|
|
#define SERIAL_NUMBER_WORD_3 *(volatile uint32_t*)(0x0080A048)
|
|
|
|
#endif
|
|
|
|
|
2021-04-17 11:12:19 +02:00
|
|
|
return SERIAL_NUMBER_WORD_0 ^ SERIAL_NUMBER_WORD_1 ^ SERIAL_NUMBER_WORD_2 ^ SERIAL_NUMBER_WORD_3;
|
2021-04-12 11:40:56 +02:00
|
|
|
}
|
|
|
|
|
2018-11-07 00:32:36 +01:00
|
|
|
void SamdPlatform::restart()
|
|
|
|
{
|
2019-09-09 20:10:56 +02:00
|
|
|
println("restart");
|
2018-11-07 00:32:36 +01:00
|
|
|
NVIC_SystemReset();
|
|
|
|
}
|
|
|
|
|
|
|
|
uint8_t * SamdPlatform::getEepromBuffer(uint16_t size)
|
|
|
|
{
|
|
|
|
//EEPROM.begin(size);
|
|
|
|
if(size > EEPROM_EMULATION_SIZE)
|
|
|
|
fatalError();
|
|
|
|
|
|
|
|
return EEPROM.getDataPtr();
|
|
|
|
}
|
|
|
|
|
|
|
|
void SamdPlatform::commitToEeprom()
|
|
|
|
{
|
|
|
|
EEPROM.commit();
|
|
|
|
}
|
2019-08-26 21:26:55 +02:00
|
|
|
#endif
|
2018-11-07 00:32:36 +01:00
|
|
|
|
|
|
|
|