2020年3月19日木曜日

adafruit Trinket M0 に serial port を追加する方法

 商品説明ページの説明を読むと(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 にも投げた



0 件のコメント:

コメントを投稿