aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Eoin Meadows2014-08-24 15:25:59 +0100
committerGareth McMullin2014-09-03 21:17:48 +1200
commit091389b982477bb96624b51f59930f304813bca8 (patch)
tree5bbe04c4421e183900d803657fb1b2d081b1382f
parentf4e20d0d04f1e250ac93acf5bfc02fb20e33ee61 (diff)
SAMD20 prints die revision
-rw-r--r--src/samd20.c15
1 files changed, 12 insertions, 3 deletions
diff --git a/src/samd20.c b/src/samd20.c
index 73baf6f..fec0180 100644
--- a/src/samd20.c
+++ b/src/samd20.c
@@ -134,6 +134,9 @@ static const char samd20_xml_memory_map[] = "<?xml version=\"1.0\"?>"
#define SAMD20_DID_MASK 0xFFBF0000
#define SAMD20_DID_CONST_VALUE 0x10000000
#define SAMD20_DID_DEVSEL_MASK 0x0F
+#define SAMD20_DID_DEVSEL_POS 0
+#define SAMD20_DID_REVISION_MASK 0x0F
+#define SAMD20_DID_REVISION_POS 8
/* Peripheral ID */
#define SAMD20_PID_MASK 0x00F7FFFF
@@ -299,7 +302,10 @@ bool samd20_probe(struct target_s *target)
/* If the Device ID matches */
if ((did & SAMD20_DID_MASK) == SAMD20_DID_CONST_VALUE) {
- uint8_t devsel = did & SAMD20_DID_DEVSEL_MASK;
+ uint8_t devsel = (did >> SAMD20_DID_DEVSEL_POS)
+ & SAMD20_DID_DEVSEL_MASK;
+ uint8_t revision = (did >> SAMD20_DID_REVISION_POS)
+ & SAMD20_DID_REVISION_MASK;
/* Pin Variant */
char pin_variant;
@@ -313,9 +319,12 @@ bool samd20_probe(struct target_s *target)
/* Mem Variant */
uint8_t mem_variant = 18 - (devsel % 5);
+ /* Revision */
+ char revision_variant = 'A' + revision;
+
/* Part String */
- sprintf(variant_string, "Atmel SAMD20%c%dA",
- pin_variant, mem_variant);
+ sprintf(variant_string, "Atmel SAMD20%c%dA (rev %c)",
+ pin_variant, mem_variant, revision_variant);
/* Setup Target */
target->driver = variant_string;