商品説明ページの説明を読むと(Native hardware SPI, I2C and Serial available on two pads so you can
connect to any I2C or Serial device with true hardware support (no
annoying bit-banging). You can have either one SPI device or both I2C
and Serial.)、簡単にできそうに思えたのに、やってみたら 4-5 時間かかったのでメモ。
#include <Arduino.h> // required before wiring_private.h
#include "wiring_private.h" // pinPeripheral() function
#define PIN_SERIAL2_RX (2ul) // PA09
#define PAD_SERIAL2_RX (SERCOM_RX_PAD_1)
#define PIN_SERIAL2_TX (0ul) // PA08
#define PAD_SERIAL2_TX (UART_TX_PAD_0)
Uart Serial2( &sercom2, PIN_SERIAL2_RX, PIN_SERIAL2_TX, PAD_SERIAL2_RX, PAD_SERIAL2_TX ) ;
void setup() {
Serial2.begin(9600);
pinPeripheral(0, PIO_SERCOM_ALT);
pinPeripheral(2, PIO_SERCOM_ALT);
}
void SERCOM2_Handler() {
Serial2.IrqHandler();
}
パラメータの変更ができるところはほぼ無し。転送速度と、多分 TX/RX ピンの入れ替えぐらい。
・大元(Arduino ZERO, MKRZero, MKR1000)の説明は
こちら
・Arafruit xxx Mx 向けの追加資料は
こちら
・PA08, PA09 を使っている理由
こちらの図にある通り、Trinket M0 で外部に引き出されているポートは PA02, PA06, PA07, PA08, PA09, PA18。このうち PA06, PA07 はオリジナルの Serial で使用。
こちらの図(
説明はこちら)にある通り、PA02 に SERCOM のピンを割り当てることは不可。
・sercom2 を使っている理由
この pdf の Available SERCOM & Pins の項目にあるが、PA08, PA09 を使えるのは sercom2 だけ。
追記
サンプルプログラムを
gihub に置いた
追記2
ちょっと整理して
qiita にも投げた