{"id":6225,"date":"2017-05-05T18:45:23","date_gmt":"2017-05-05T18:45:23","guid":{"rendered":"http:\/\/blog.bachi.net\/?p=6225"},"modified":"2017-05-25T16:05:32","modified_gmt":"2017-05-25T16:05:32","slug":"arduino-zero-feather-m0","status":"publish","type":"post","link":"https:\/\/blog.bachi.net\/?p=6225","title":{"rendered":"SAMD21: Arduino Zero \/ Feather M0"},"content":{"rendered":"<h3>Shop \/ Projects<\/h3>\n<p><a href=\"https:\/\/www.mouser.ch\/ProjectManager\/ProjectDetail.aspx?AccessID=328cc4307e\">Minifigure SAM<\/a><br \/>\n<a href=\"https:\/\/hackaday.io\/project\/7576-sam-dev\">Sam DEV<\/a><br \/>\n<a href=\"https:\/\/hackaday.io\/project\/8007-hack\">HACK-HackAday Cortex Kit<\/a><br \/>\n<a href=\"https:\/\/hackaday.com\/2016\/01\/19\/developed-on-hackaday-hadge-update-its-a-hack\/\">Developed on Hackaday : HaDge update \u2013 it\u2019s a HACK<\/a><br \/>\n<a href=\"https:\/\/github.com\/madvoid\/LEMSv2\">LEMSv2<\/a><br \/>\n<a href=\"https:\/\/hackaday.io\/project\/20470-makernet\">MakerNet<\/a><\/p>\n<h3>Aliexpress<\/h3>\n<p><a href=\"https:\/\/de.aliexpress.com\/item\/SAMD21-M0-32-bit-ARM-Cortex-M0-core-Compatible-with-Arduino-Zero-Arduino-M0-Form-R3\/32780674095.html\">SAMD21 M0. 32-bit ARM Cortex M0 core. kompatibel mit Arduino Null, Arduino M0. Form R3.<\/a><br \/>\n<a href=\"https:\/\/de.aliexpress.com\/item\/SAMD21-M0-Mini-32-bit-ARM-Cortex-M0-core-Pins-UnSoldered-Compatible-with-Arduino-Zero-Arduino\/32779722487.html\">SAMD21 M0-Mini. 32-bit ARM Cortex M0 core. Pins Abgel\u00f6tet. kompatibel mit Arduino Null, Arduino M0. Form Mini.<\/a><br \/>\n<a href=\"http:\/\/www.avdweb.nl\/arduino\/samd21\/zero.html\">Arduino Zero for dummies<\/a><br \/>\n<a href=\"https:\/\/de.aliexpress.com\/item\/Crowduino-M0-SD-Board-for-Arduino-UNO-Micro-Controller-Board-DIY-Kit-Free-Shipping\/32712839065.html\"><\/a><\/p>\n<h3>Library<\/h3>\n<p><a href=\"https:\/\/github.com\/adafruit\/Adafruit_ASFcore\">github.com\/adafruit\/Adafruit_ASFcore: ASF core files for Zero<\/a><\/p>\n<h3>Debugging<\/h3>\n<p><a href=\"https:\/\/learn.adafruit.com\/proper-step-debugging-atsamd21-arduino-zero-m0\/lets-go\">Proper Debugging of ATSAMD21 Processors<\/a><\/p>\n<h3>I2C<\/h3>\n<p><a href=\"https:\/\/www.arduino.cc\/en\/Tutorial\/SamdSercom\">Adding more Serial Interfaces to SAMD microcontrollers (SERCOM)<\/a> (VERX USEFUL!)<br \/>\n<a href=\"https:\/\/github.com\/arduino\/ArduinoCore-samd\/issues\/194\">Wire lib hangs when scanning i2c in Wire.endTransmission()<\/a><\/p>\n<h3>Timer<\/h3>\n<p><a href=\"http:\/\/www.avdweb.nl\/arduino\/libraries\/samd21-timer.html\">AMD21 Timer library for the SAM15x15 and Arduino Zero<\/a><br \/>\n<a href=\"https:\/\/forum.arduino.cc\/index.php?topic=332275.0\">Arduino ZERO timer interrupts<\/a><br \/>\n<a href=\"https:\/\/github.com\/adafruit\/Adafruit_ZeroTimer\">happy wrappers for TC modules 3,4,5 on SAMD21 <\/a><br \/>\n<a href=\"https:\/\/github.com\/nebs\/arduino-zero-timer-demo\">github.com\/nebs\/arduino-zero-timer-demo: A simple demo of the Arduino Zero timer frequency being smoothly changed in real time.<\/a><br \/>\n<a href=\"https:\/\/github.com\/maxbader\/arduino_tools\">github.com\/maxbader\/arduino_tools: Arduino libraries and samples<\/a><\/p>\n<h3>Code<\/h3>\n<pre class=\"brush: plain; title: Path; notranslate\" title=\"Path\">\r\n\/c\/Users\/bachman0\/AppData\/Local\/Arduino15\r\n\/c\/Users\/bachman0\/Documents\/Arduino\/libraries\/\r\n<\/pre>\n<pre class=\"brush: plain; title: Main Loop; notranslate\" title=\"Main Loop\">\r\nC:\\Users\\bachman0\\AppData\\Local\\Arduino15\\packages\\arduino\\hardware\\samd\\1.6.12\\cores\\arduino\\main.cpp\r\n\/c\/Users\/bachman0\/AppData\/Local\/Arduino15\/packages\/arduino\/hardware\/samd\/1.6.12\/cores\/arduino\/main.cpp\r\n\r\n\/*\r\n * \\brief Main entry point of Arduino application\r\n *\/\r\nint main( void )\r\n{\r\n  init();\r\n\r\n  __libc_init_array();\r\n\r\n  initVariant();\r\n\r\n  delay(1);\r\n#if defined(USBCON)\r\n  USBDevice.init();\r\n  USBDevice.attach();\r\n#endif\r\n\r\n  setup();\r\n\r\n  for (;;)\r\n  {\r\n    loop();\r\n    if (serialEventRun) serialEventRun();\r\n  }\r\n\r\n  return 0;\r\n}\r\n<\/pre>\n<pre class=\"brush: plain; title: Exception Table; notranslate\" title=\"Exception Table\">\r\nC:\\Users\\bachman0\\AppData\\Local\\Arduino15\\packages\\arduino\\hardware\\samd\\1.6.12\r\ncores\\arduino\\cortex_handlers.c\r\n\r\n\/* Exception Table *\/\r\n__attribute__ ((section(&quot;.isr_vector&quot;))) const DeviceVectors exception_table =\r\n{\r\n  \/* Configure Initial Stack Pointer, using linker-generated symbols *\/\r\n  (void*) (&amp;__StackTop),\r\n\r\n  (void*) Reset_Handler,\r\n  (void*) NMI_Handler,\r\n  (void*) HardFault_Handler,\r\n  (void*) (0UL), \/* Reserved *\/\r\n  (void*) (0UL), \/* Reserved *\/\r\n  (void*) (0UL), \/* Reserved *\/\r\n  (void*) (0UL), \/* Reserved *\/\r\n  (void*) (0UL), \/* Reserved *\/\r\n  (void*) (0UL), \/* Reserved *\/\r\n  (void*) (0UL), \/* Reserved *\/\r\n  (void*) SVC_Handler,\r\n  (void*) (0UL), \/* Reserved *\/\r\n  (void*) (0UL), \/* Reserved *\/\r\n  (void*) PendSV_Handler,\r\n  (void*) SysTick_Handler,\r\n\r\n  \/* Configurable interrupts *\/\r\n  (void*) PM_Handler,             \/*  0 Power Manager *\/\r\n  (void*) SYSCTRL_Handler,        \/*  1 System Control *\/\r\n  (void*) WDT_Handler,            \/*  2 Watchdog Timer *\/\r\n  (void*) RTC_Handler,            \/*  3 Real-Time Counter *\/\r\n  (void*) EIC_Handler,            \/*  4 External Interrupt Controller *\/\r\n  (void*) NVMCTRL_Handler,        \/*  5 Non-Volatile Memory Controller *\/\r\n  (void*) DMAC_Handler,           \/*  6 Direct Memory Access Controller *\/\r\n  (void*) USB_Handler,            \/*  7 Universal Serial Bus *\/\r\n  (void*) EVSYS_Handler,          \/*  8 Event System Interface *\/\r\n  (void*) SERCOM0_Handler,        \/*  9 Serial Communication Interface 0 *\/\r\n  (void*) SERCOM1_Handler,        \/* 10 Serial Communication Interface 1 *\/\r\n  (void*) SERCOM2_Handler,        \/* 11 Serial Communication Interface 2 *\/\r\n  (void*) SERCOM3_Handler,        \/* 12 Serial Communication Interface 3 *\/\r\n  (void*) SERCOM4_Handler,        \/* 13 Serial Communication Interface 4 *\/\r\n  (void*) SERCOM5_Handler,        \/* 14 Serial Communication Interface 5 *\/\r\n  (void*) TCC0_Handler,           \/* 15 Timer Counter Control 0 *\/\r\n  (void*) TCC1_Handler,           \/* 16 Timer Counter Control 1 *\/\r\n  (void*) TCC2_Handler,           \/* 17 Timer Counter Control 2 *\/\r\n  (void*) TC3_Handler,            \/* 18 Basic Timer Counter 0 *\/\r\n  (void*) TC4_Handler,            \/* 19 Basic Timer Counter 1 *\/\r\n  (void*) TC5_Handler,            \/* 20 Basic Timer Counter 2 *\/\r\n  (void*) TC6_Handler,            \/* 21 Basic Timer Counter 3 *\/\r\n  (void*) TC7_Handler,            \/* 22 Basic Timer Counter 4 *\/\r\n  (void*) ADC_Handler,            \/* 23 Analog Digital Converter *\/\r\n  (void*) AC_Handler,             \/* 24 Analog Comparators *\/\r\n  (void*) DAC_Handler,            \/* 25 Digital Analog Converter *\/\r\n  (void*) PTC_Handler,            \/* 26 Peripheral Touch Controller *\/\r\n  (void*) I2S_Handler,            \/* 27 Inter-IC Sound Interface *\/\r\n  (void*) (0UL),                  \/* Reserved *\/\r\n};\r\n<\/pre>\n<pre class=\"brush: plain; title: Core Library; notranslate\" title=\"Core Library\">\r\ndigitalRead()\r\nArduino15\/packages\/arduino\/hardware\/samd\/1.6.12\/cores\/arduino\/wiring_digital.c:int digitalRead( uint32_t ulPin )\r\nArduino15\/packages\/arduino\/hardware\/samd\/1.6.12\/cores\/arduino\/wiring_digital.h:extern int digitalRead( uint32_t ulPin ) ;\r\n\r\nmillis()\r\nArduino15\/packages\/arduino\/hardware\/samd\/1.6.12\/cores\/arduino\/delay.c:uint32_t millis( void )\r\nArduino15\/packages\/arduino\/hardware\/samd\/1.6.12\/cores\/arduino\/delay.h:extern uint32_t millis( void ) ;\r\n\r\nyield()\r\nArduino15\/packages\/arduino\/hardware\/samd\/1.6.12\/cores\/arduino\/Arduino.h:void yield( void ) ;\r\nArduino15\/packages\/arduino\/hardware\/samd\/1.6.12\/cores\/arduino\/hooks.c:void yield(void) __attribute__ ((weak, alias(&quot;__empty&quot;)));\r\n\r\ndtostrf()\r\nArduino15\/packages\/arduino\/hardware\/samd\/1.6.12\/cores\/arduino\/avr\/dtostrf.c:char *dtostrf (double val, signed char width, unsigned char prec, char *sout) {\r\nArduino15\/packages\/arduino\/hardware\/samd\/1.6.12\/cores\/arduino\/avr\/dtostrf.h:char *dtostrf(double val, signed char width, unsigned char prec, char *sout);\r\n\r\nString \/ StringObject\r\nArduino15\/packages\/arduino\/hardware\/samd\/1.6.12\/cores\/arduino\/WString.cpp:String::String(const char *cstr)\r\nArduino15\/packages\/arduino\/hardware\/samd\/1.6.12\/cores\/arduino\/WString.h:class String\r\n\r\n<\/pre>\n<pre class=\"brush: plain; title: Stream; notranslate\" title=\"Stream\">\r\nStream::readStringUntil()\r\nArduino15\/packages\/arduino\/hardware\/samd\/1.6.12\/cores\/arduino\/Stream.cpp:String Stream::readStringUntil(char terminator)\r\nArduino15\/packages\/arduino\/hardware\/samd\/1.6.12\/cores\/arduino\/Stream.h:  String readStringUntil(char terminator);\r\n<\/pre>\n<pre class=\"brush: plain; title: SERCOM; notranslate\" title=\"SERCOM\">\r\nC:\\Users\\bachman0\\AppData\\Local\\Arduino15\\packages\\arduino\\hardware\\samd\\1.6.12\r\ncores\\arduino\\SERCOM.h\r\n\r\n<\/pre>\n<pre class=\"brush: plain; title: Wire Library \/ TwoWire; notranslate\" title=\"Wire Library \/ TwoWire\">\r\n\/c\/Users\/bachman0\/AppData\/Local\/Arduino15\/packages\/arduino\/hardware\/samd\/1.6.12\/libraries\/Wire\r\n\r\nTwoWire::TwoWire(SERCOM * s, uint8_t pinSDA, uint8_t pinSCL)\r\n{\r\n  this-&gt;sercom = s;\r\n  this-&gt;_uc_pinSDA=pinSDA;\r\n  this-&gt;_uc_pinSCL=pinSCL;\r\n  transmissionBegun = false;\r\n}\r\n\r\nvoid TwoWire::begin(void) {\r\n  \/\/Master Mode\r\n  sercom-&gt;initMasterWIRE(TWI_CLOCK);\r\n  sercom-&gt;enableWIRE();\r\n\r\n  pinPeripheral(_uc_pinSDA, g_APinDescription&#x5B;_uc_pinSDA].ulPinType);\r\n  pinPeripheral(_uc_pinSCL, g_APinDescription&#x5B;_uc_pinSCL].ulPinType);\r\n}\r\n\r\nvoid TwoWire::begin(uint8_t address) {\r\n  \/\/Slave mode\r\n  sercom-&gt;initSlaveWIRE(address);\r\n  sercom-&gt;enableWIRE();\r\n\r\n  pinPeripheral(_uc_pinSDA, g_APinDescription&#x5B;_uc_pinSDA].ulPinType);\r\n  pinPeripheral(_uc_pinSCL, g_APinDescription&#x5B;_uc_pinSCL].ulPinType);\r\n}\r\n\r\n<\/pre>\n<pre class=\"brush: plain; title: TwoWire ISR (Interrupt Service Routine); notranslate\" title=\"TwoWire ISR (Interrupt Service Routine)\">\r\n\r\nvoid (*onReceiveCallback)(int);\r\nvoid TwoWire::onService(void)\r\nvoid SERCOM3_Handler(void); \/\/ Interrupt Handler\r\n\r\n#if WIRE_INTERFACES_COUNT &gt; 0\r\n  \/* In case new variant doesn't define these macros,\r\n   * we put here the ones for Arduino Zero.\r\n   *\r\n   * These values should be different on some variants!\r\n   *\/\r\n  #ifndef PERIPH_WIRE\r\n    #define PERIPH_WIRE          sercom3\r\n    #define WIRE_IT_HANDLER      SERCOM3_Handler\r\n  #endif \/\/ PERIPH_WIRE\r\n  TwoWire Wire(&amp;PERIPH_WIRE, PIN_WIRE_SDA, PIN_WIRE_SCL);\r\n\r\n  void WIRE_IT_HANDLER(void) {\r\n    Wire.onService();\r\n  }\r\n#endif\r\n<\/pre>\n<pre class=\"brush: plain; title: SD Card Library; notranslate\" title=\"SD Card Library\">\r\n\/c\/Program\\ Files\\ \\(x86\\)\/Arduino\/libraries\/SD\r\n\r\nFile\r\nArduino\/libraries\/SD\/src\/File.cpp:File::File(SdFile f, const char *n)\r\nArduino\/libraries\/SD\/src\/SD.h:class File : public Stream\r\n\r\nFile::openNextFile\r\nArduino\/libraries\/SD\/src\/SD.cpp:File File::openNextFile(uint8_t mode)\r\n\r\nSdFile\r\nArduino\/libraries\/SD\/src\/utility\/SdFat.h:class SdFile : public Print {\r\nArduino\/libraries\/SD\/src\/utility\/SdFat.h:  uint8_t open(SdFile&amp; dirFile, const char* fileName) {  \/\/ NOLINT\r\nArduino\/libraries\/SD\/src\/utility\/SdFile.cpp:uint8_t SdFile::open(SdFile* dirFile, const char* fileName, uint8_t oflag) {\r\n\r\nSdFile::openRoot\r\nArduino\/libraries\/SD\/src\/utility\/SdFile.cpp:uint8_t SdFile::openRoot(SdVolume* vol) {\r\nArduino\/libraries\/SD\/src\/utility\/SdFile.cpp:uint8_t SdFile::openRoot(SdVolume* vol, Stream* stream) {\r\n\r\n<\/pre>\n<pre class=\"brush: plain; title: SparkFun 9DoF M0; notranslate\" title=\"SparkFun 9DoF M0\">\r\n\/c\/Users\/bachman0\/AppData\/Local\/Arduino15\r\npackages\/SparkFun\/hardware\/samd\/1.3.2\/variants\/SparkFun_9DoF_M0\/variant.cpp\r\n\r\n&#x5B;...]\r\n\r\n\/\/ Multi-serial objects instantiation\r\nSERCOM sercom0( SERCOM0 ) ;\r\nSERCOM sercom1( SERCOM1 ) ;\r\nSERCOM sercom2( SERCOM2 ) ;\r\nSERCOM sercom3( SERCOM3 ) ;\r\nSERCOM sercom4( SERCOM4 ) ;\r\nSERCOM sercom5( SERCOM5 ) ;\r\n\r\nUart Serial1( &amp;sercom0, PIN_SERIAL1_RX, PIN_SERIAL1_TX, PAD_SERIAL1_RX, PAD_SERIAL1_TX ) ;\r\nUart Serial( &amp;sercom5, PIN_SERIAL_RX, PIN_SERIAL_TX, PAD_SERIAL_RX, PAD_SERIAL_TX ) ;\r\n\r\n\/**\r\n * SERCOM0_Handler is mapped to Serial1\r\n * How can I remap it to I2C??\r\n *\/\r\nvoid SERCOM0_Handler()\r\n{\r\n  Serial1.IrqHandler();\r\n}\r\n\r\nvoid SERCOM5_Handler()\r\n{\r\n  Serial.IrqHandler();\r\n}\r\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Shop \/ Projects Minifigure SAM Sam DEV HACK-HackAday Cortex Kit Developed on Hackaday : HaDge update \u2013 it\u2019s a HACK LEMSv2 MakerNet Aliexpress SAMD21 M0. 32-bit ARM Cortex M0 core. kompatibel mit Arduino Null, Arduino M0. Form R3. SAMD21 M0-Mini. 32-bit ARM Cortex M0 core. Pins Abgel\u00f6tet. kompatibel mit Arduino Null, Arduino M0. Form Mini. [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-6225","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/blog.bachi.net\/index.php?rest_route=\/wp\/v2\/posts\/6225","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.bachi.net\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.bachi.net\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.bachi.net\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.bachi.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=6225"}],"version-history":[{"count":23,"href":"https:\/\/blog.bachi.net\/index.php?rest_route=\/wp\/v2\/posts\/6225\/revisions"}],"predecessor-version":[{"id":6282,"href":"https:\/\/blog.bachi.net\/index.php?rest_route=\/wp\/v2\/posts\/6225\/revisions\/6282"}],"wp:attachment":[{"href":"https:\/\/blog.bachi.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=6225"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.bachi.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=6225"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.bachi.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=6225"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}