がれすたさんのDIY日記

電子回路、Python、組み込みシステム開発、自作エフェクターを語るblog

MCUXpresso IDEのペリフェラルコンフィグツールを使ってみる



MCUXPresso IDEがアップデートされてペリフェラルコンフィグツールが実装されたのでそれを使っていろいろやってみたいと思います。
STM32でいうCubeMXみたいなもんですね。

今回のシステム要件は以下の通り

  • MCUXpressoIDE v10.3.0 - Windows
  • MCUXpresso SDK EVK-MIMXRT1020 Ver2.5

ハードウエアは公式の評価ボードを用いることとする。

f:id:gsmcustomeffects:20190130214336p:plain
MIMXRT1020-EVK low cost evaluation kit for Cortex-M7

今回の目的およびスキームは

である。
とりあえずARMマイコンの基礎を一通りやってみるという感じです。

プロジェクトを作成する。

まずMCUXpressoIDEを立ち上げます。

SDKの読み込み

SDKの読み込みがまだなら読み込んでおきます。

f:id:gsmcustomeffects:20190130222853p:plain
SDKリストの表示
SDKが入っているとこのようになります。

新規プロジェクト

次にプロジェクトの作成をします。

f:id:gsmcustomeffects:20190130223620p:plain
プロジェクトの作成

ドライバの設定

以下の画像を参考にドライバ画面を設定する。

初期設定のままでgpioとlpuartが選択されているので何も変えないでNextに行って構わない。

f:id:gsmcustomeffects:20190130224636p:plain
ドライバ選択

次にメモリーマップとかの設定をする

f:id:gsmcustomeffects:20190131001546p:plain
Advanced setting

図にも書いてあるが今回はXIPで起動するだけなので特にいじる必要ない。

最後にFinishを押して作成は終了。

プロジェクトの設定

先ほどのプロジェクト作成が済んだら一回ビルドしておこう。

f:id:gsmcustomeffects:20190131002525p:plain
ビルド結果

次に作業画面をペリフェラルツールに変える

f:id:gsmcustomeffects:20190131011716p:plain
作業タブの変更
右上のメニューカスタマイズは上部メニューのWindow/perspective/open perspectiveより行うことが可能。
通常メインコードディング画面とペリフェラルとピンツールとクロックツールがあればOKなはず

次に上のプロジェクトを選択

f:id:gsmcustomeffects:20190131011803p:plain
ペリフェラル設定の選択

ここまでで半分ぐらい終了

GPIO 割り込みの設定

f:id:gsmcustomeffects:20190131022022p:plain
スイッチの説明
次にスキームの1個のうちであるピン割り込みを設定していく
上記の画像よりユーザースイッチはSW4でGPIO5_0につながっているみたいなのでそれを参考に設定する。

まず左のメニューからGPIO5を選びます。

f:id:gsmcustomeffects:20190131022621p:plain
GPIOの設定

次にピンマッピングを設定します。

f:id:gsmcustomeffects:20190131031442p:plain
ピン設定画面
まずICの書いてある画面の中央のGPIO5をクリックします。
そうするとピン一覧が出てきますので0ピンをルーティングします。
成功すると下に詳細設定ができる画面が出てきます。
詳細設定はここでもできるのですが初期のままでもOKです。

設定しましたら上部の更新ボタンを押しておきます。

f:id:gsmcustomeffects:20190131031928p:plain
Update setting

尚吐きだされるコードは右側のタブに表示されるので確認しながら行うと良い

f:id:gsmcustomeffects:20190131032252p:plain
コードプレビュー

コードを書く

書くとは言ってもハンドラの追加と割り込みフラグのクリアをするだけ

void GPIO_5_GPIO_COMB_0_15_IRQHANDLER(void){

    /* clear the interrupt status */
    GPIO_PortClearInterruptFlags(GPIO5, 1U << (0U));//GPIO5の0ピンってこと
    /* Add for ARM errata 838869, affects Cortex-M4, Cortex-M4F Store immediate overlapping
      exception return operation might vector to incorrect interrupt */
#if defined __CORTEX_M && (__CORTEX_M == 4U)
    __DSB();
#endif
}

int main(void) {
	
    gpio_pin_config_t sw_config = {
        kGPIO_DigitalInput, 0,
        kGPIO_IntRisingEdge,
    };
    BOARD_InitBootPins();
    BOARD_InitBootClocks();
    BOARD_InitBootPeripherals();
    BOARD_InitDebugConsole();
    //GPIOの割り込み設定
    GPIO_PinInit(GPIO5, (0U), &sw_config);
    GPIO_PortEnableInterrupts(GPIO5, 1U << (0U));
    while(1) {
    }
    return 0 ;
}

デバッグしていく

f:id:gsmcustomeffects:20190131033439p:plain
ピン割り込み

SW4を押してブレークポイントで止まれば成功

まとめ

新規ペリフェラルツールにてペリフェラルの設定を行うことができた。
次回はUARTだったりI2Cだったりもやって行きたい

解説

gpio_pin_config_tってのがちょいと新しいので解説しておく

typedef struct _gpio_pin_config
{
    gpio_pin_direction_t direction; /*!< Specifies the pin direction. */
    uint8_t outputLogic;            /*!< Set a default output logic, which has no use in input */
    gpio_interrupt_mode_t
        interruptMode; /*!< Specifies the pin interrupt mode, a value of @ref gpio_interrupt_mode_t. */
} gpio_pin_config_t;

こいつに設定入れてあげると同じ設定を適用したいピンにまとめて設定できるっていうわけ