MPLAB X IDEでSAMD21 Xplained ProのHello World

SAMD21XplainedProのUSB CDCでMPLABXを使ってHello, world Embedded
SAMD21XplainedProのUSB CDCでMPLABXを使ってHello, world

概要

これまでAtmel Studio / Microchip Studioでプロジェクトを作ってきたが、今後はMPLAB X IDE(以下MPLAB)が主流になるらしい。ということでMPLABでプロジェクトを作ってみた。

USB CDC サンプルアプリケーション

MPLABを開いてみた。初めてなのでOpen Sampleを実行してみよう。ちなみにUsers Guideは ここ にあった。

検索窓で SAM D21 USB CDC と入力するとそれらしいのが出てきた。”USB Device CDC COM Port Single Example (cdc_com_port_single) Example for SAM D21/DA1 Family” を選択。

すると結局MPLAB® DISCOVER というサイトに飛んで、そこからgithubのリポジトリ Microchip-MPLAB-Harmony/usb_apps_device: Harmony 3 USB Device application examples に来た。これをcloneしろということのようだ。

git clone https://github.com/Microchip-MPLAB-Harmony/usb_apps_device.git

MPLABの[File]-[Open Project]で usb_apps_device\apps\cdc_com_port_single\firmware\sam_d21_xpro.X を開く。

[Production]-[Build Project]を実行。

XC32がないと怒られたのでインストール。ダウンロードサイト からMPLAB XC32 Compilerをダウンロードしインストール。

BUILD

インストール完了後MPLABを再起動するとBuildができるようになった。 build button のボタンでもビルドできた。

PROGRAM

XPROボードのDEBUG USBポートとPCをUSBケーブルで接続して program button をクリックすると、書き込むことができる。初回はTool選択が必要だったのでXPROのポートを選択した。

RUN

USBケーブルをTARGET USBポートに差し替えてTeraTermでCOMポートを開いてみた。COM4になっていた。

abcdefgと入力するとbcdefghと返ってきた。とりあえず動作しているようだ。また、SW0を押すとメッセージが表示された。

Hello, world!

さてソースコードを見てみる。cdc_com_port_single_sam_d21_xpro\Source Files\app.c の中のAPP_Tasks(void)のswitchの中。case APP_STATE_SCHEDULE_WRITEの中。下記のソースコードが文字列を出力している部分だ。

if(appData.isSwitchPressed)
{
   /* If the switch was pressed, then send the switch prompt*/
   appData.isSwitchPressed = false;
   USB_DEVICE_CDC_Write(USB_DEVICE_CDC_INDEX_0,
           &appData.writeTransferHandle, switchPromptUSB,
           sizeof(switchPromptUSB),
           USB_DEVICE_CDC_TRANSFER_FLAGS_DATA_COMPLETE);
}
else
{
   /* Else echo each received character by adding 1 */
   for(i = 0; i < appData.numBytesRead; i++)
  {
       if((appData.cdcReadBuffer[i] != 0x0A)
          && (appData.cdcReadBuffer[i] != 0x0D))
      {
           appData.cdcWriteBuffer[i] = appData.cdcReadBuffer[i] + 1;
      }
  }
   USB_DEVICE_CDC_Write(USB_DEVICE_CDC_INDEX_0,
           &appData.writeTransferHandle,
           appData.cdcWriteBuffer, appData.numBytesRead,
           USB_DEVICE_CDC_TRANSFER_FLAGS_DATA_COMPLETE);
}

break;

ということは、65行目の中身をHello, world!にすればボタンを押してメッセージが流れるようにできるわけだ。

uint8_t CACHE_ALIGN switchPromptUSB[] = "\r\nHello, world!";

ソースを書き換えてビルドしてDEBUG USBに接続してプログラム。TARGET USBに戻してSW0をプッシュ。

Hello, worldが、できた。

まとめ

今回はサンプルをビルドするまでだったが、MPLABを使った開発のさわりの部分がわかった。あとはソースをいじってアプリケーションを作っていくだけだ。他のサンプルもひととおり眺めてみよう。

コメント

タイトルとURLをコピーしました