· 

SAMD21 Mini BreakoutでSPI 1

グラフィックLCDをペリヘラルのSPIで動かしたい。で、まず

graphicstest.inoで、SPIの設定をこうやってみる。

SPIClass mySPI (&sercom1, TFT_MISO, TFT_CLK, TFT_MOSI, SPI_PAD_0_SCK_1, SERCOM_RX_PAD_3);

Adafruit_ILI9341 tft = Adafruit_ILI9341(&mySPI,TFT_DC,TFT_CS,TFT_RST);

 

が、動かないTT

 

まず、この記述があっているのかどうかを確認する。

参考はこちら。

で、こういうスケッチ。

  1. #include "SPI.h"
  2.  
  3. #define SPI_CS   10
  4. #define SPI_MOSI 11
  5. #define SPI_CLK  13
  6. #define SPI_MISO 12
  7.  
  8. SPIClass mySPI(&sercom1,SPI_MISO,SPI_CLK,SPI_MOSI,SPI_PAD_0_SCK_1,SERCOM_RX_PAD_3);
  9.  
  10. void setup() {
  11. //  pinMode(SPI_MOSI,OUTPUT);
  12. //  pinMode(SPI_CLK,OUTPUT);
  13.   pinMode(SPI_CS,OUTPUT);
  14.   mySPI.begin();
  15. }
  16.  
  17. uint8_t i=0;
  18. void loop() {
  19.   digitalWrite(SPI_CS,LOW);
  20.   mySPI.beginTransaction(SPISettings(8000000, MSBFIRST, SPI_MODE0));
  21.   mySPI.transfer(i++);
  22.   mySPI.endTransaction();
  23.   digitalWrite(SPI_CS,HIGH);
  24. }

う~ん。たぶんちゃんと動いている。ビットレートもだいたい8M。

そして、いろいろ、下回りのソースコードを見まくって気が付いた、、、

beginの中に

mySPI.begin();

が必要だった。で、こすればよかったのであります。

  1. #include "SPI.h"
  2. #include "Adafruit_GFX.h"
  3. #include "Adafruit_ILI9341.h"
  4.  
  5. #define TFT_DC 9
  6. #define TFT_CS 10
  7. #define TFT_MOSI  11
  8. #define TFT_CLK    13
  9. #define TFT_RST      2
  10. #define TFT_MISO  12
  11.  
  12. SPIClass mySPI (&sercom1, TFT_MISO, TFT_CLK, TFT_MOSI, SPI_PAD_0_SCK_1, SERCOM_RX_PAD_3);
  13. Adafruit_ILI9341 tft = Adafruit_ILI9341(&mySPI,TFT_DC,TFT_CS,TFT_RST);
  14.  
  15. void setup() {
  16.   Serial.begin(9600);
  17.   Serial.println("ILI9341 Test!"); 
  18.  
  19.   mySPI.begin();// It is necessary to use SPI peripheral
  20.   tft.begin();
  21.  

 

ソフト制御で1Mbpsくらいだったのが、12Mbpsになりました。ヽ(´□`。)ノ・゚