2013年10月30日水曜日

FRDM-KL25Z で ユニバーサルモジュールを使う

ユニバーサル モジュールの使い方について詳細な説明です。
サンプルプログラムでは以下のように設定し動作確認できます。

サンプルプログラムの回路は以下のような物を想定しています。
LEDの回路などを接続し、スイッチに連動して任意のLEDを光らせます。

main.cは以下のように構成されています。
1、実際に関数の使い方
2、マイコンのピン設定(入出力設定など)
3、マイコンからモジュールに接続する配線情報の関数


#include "mbed.h"
//各種ファイルをインクルード
#include "MCUGearBase.h"
#include "MCUGear.h"
#include "common.h"//このファイルの中にある#define  FS_KL25Zを有効、//#defineLPC1768_mbedを無効にする

MCUGear Uni2M(PTE0, PTE1, N_VDD_VDD_VDD,8);//モジュールの定義をUni2Mという名前にし、I2Cピン番号、基板裏面に設定したアドレス、モジュールで使用したい端子数今回は8。II2Cでデジタルスイッチ群を操作しデジタル配線を再構築しています

//IOの設定を記述
DigitalOut Dout1(PTB0);
DigitalOut Dout2(PTB1);
DigitalOut Dout3(PTD4);
DigitalOut Dout4(PTA12);
DigitalOut Dout5(PTA4);
DigitalIn Din1(PTB0);
DigitalIn Din2(PTB1);




//使用する関数をあらかじめ宣言
void IOUni2M(MCUGear *mcugear);                 //IO setting for 2 Connector Universal module 



int main() {

    int SW1,SW2;//スイッチ入力の状態を一旦保存する変数
    initBase(); //ベースボードの初期化    


    IOUni2M(&Uni2M);//ユニバーサルモジュールのIO情報を保存

    while(1) {//以下、ループ

       //2 connector universal module ------------------------------
       //あらかじめ出力端子をHighにしておく
       Dout = 1;
       Dout1 = 1;
       Dout2 = 1;
       Dout3 = 1;
       Dout4 = 1;
       Dout5 = 1;
       
       Uni2M.connectModule();   //connect---//ユニバーサルモジュールに動的に配線します

       //後は普通のデジタル回路として使えます。
       SW1 = Din1.read();//スイッチの状態を読みます。
       SW2 = Din2.read();
       
       if(SW1 == 1){//スイッチの状態に合わせて出力を変化させ、LEDをONOFFします。
            Dout = 1;
            Dout2 = 1;
            Dout3 = 1;
       }else{
            Dout = 0;
            Dout2 = 0;
            Dout3 = 0;
       }
       if(SW2 == 1){
            Dout1 = 1;
            Dout4 = 1;
            Dout5 = 1;
       }else{
            Dout1 = 0;
            Dout4 = 0;
            Dout5 = 0;
       }
       
       Uni2M.disconnectModule();   //disconnect---//ユニバーサルモジュールとの配線を切断します。

    }    
}



//マイコンのどの端子をどのモジュールに当てはめるかを定義し、保存します。

void IOUni2M(MCUGear *mcugear){

    uint8_t fio[12];
    mcugear->detect_module(fio);//モジュールの取り付け位置を把握します

    mcugear->savePinSetting(0, IO_MBED_PTB0, IO_REG_IN_DIR, fio[0]);//input
//ここでは「モジュールの0番端子に、KL25ZのPTB0端子をmbedから見て入力方向に設定する」という意味です

//同様に以下のように設定していきます
    mcugear->savePinSetting(1, IO_MBED_PTB1, IO_REG_IN_DIR, fio[1]);//input
    mcugear->savePinSetting(2, IO_MBED_PTA13, IO_REG_OUT_DIR, fio[2]);
    mcugear->savePinSetting(3, IO_MBED_PTA1, IO_REG_OUT_DIR, fio[3]);
    mcugear->savePinSetting(4, IO_MBED_PTA2, IO_REG_OUT_DIR, fio[4]);
    mcugear->savePinSetting(5, IO_MBED_PTD4, IO_REG_OUT_DIR, fio[5]);
    mcugear->savePinSetting(6, IO_MBED_PTA12, IO_REG_OUT_DIR, fio[6]);
    mcugear->savePinSetting(7, IO_MBED_PTA4, IO_REG_OUT_DIR, fio[7]);

#ifdef BOOST_MODE
    mcugear->makeCircuit();//これは再構築をショートカットするためにベースボードに配線情報を保存する関数です。追々説明していきます。
#endif

}





0 件のコメント:

コメントを投稿