Home Page : http://www.mcugear.com/en/ MCU Gear manual mode (circuit quick changer!) You can save 8 schematic(bank 0-7) manually and change it quickly.

Dependents:   MCUGear_Ver2

Fork of MCUGear by mille feuille

This is a MCU Gear manual mode library.

(日本語は英語の次に書いてあります。)

MCU Gear is a digital wiring extension board.(A kind of dynamic circuit changer.)

It can change its wiring dynamically, without the need of rewiring your device.

Your MCU can be connected to a theoretical maximum of 120 devices.

detail : http://mcugear.com/en/

You can save 8 schematics (bank 0-7) on Baseboard.

/media/uploads/Info/bank_2.png

How to use it?

1,include library

1,include library

#include "mbed.h"

#include "MCUGearBaseM.h"
#include "MCUGearM.h"
#include "commonM.h"

2,Declare Module

(! You do not pile up each module if you want to open module gate simultaneously.)

2,Declare Module

MCUGear myModule1(p28, p27, N_***_***_***);
MCUGear myModule2(p28, p27, N_***_***_***);

myModule: Optional name for Module.

p28, p27, : I2C pins (KL25Z is "PTE0, PTE1")

N_*_*_* : Address. You can set it on the reverse side of the Module board.

3,Initialize baseboard

3,Initialize baseboard

initBase();

4,Make wiring data

4,Call wiring register

    startReg(bank);

    myModule1.setWire(IO_MBED_P9, IO_REG_IN_DIR, 5);
    myModule1.setWire(IO_MBED_P15, IO_REG_OUT_DIR, 2);
    myModule1.setWire(IO_MBED_P12, IO_REG_OUT_DIR, 0);

    myModule2.setWire(IO_MBED_P13, IO_REG_OUT_DIR, 1);
    myModule2.setWire(IO_MBED_P14, IO_REG_IN_DIR, 3);
    myModule2.setWire(IO_MBED_P16, IO_REG_IN_DIR, 4);


    endReg(bank);

see the reference on MCUGearBaseboard.h file.

4,Call wiring register

// CPU I/O
typedef enum {

#if defined TARGET_LPC1768
  IO_MBED_P15 = 0x80,
  IO_MBED_P13,
  IO_MBED_P16,
  IO_MBED_P12,
  IO_MBED_P5,
  IO_MBED_P11,
  IO_MBED_P23,
  IO_MBED_P22,
  IO_MBED_P26,
  IO_MBED_P10,
  IO_MBED_P21,
  IO_MBED_P9,
  IO_MBED_P6,
  IO_MBED_P7,
  IO_MBED_P8,
  IO_MBED_P14,
  IO_MBED_P24,
  IO_MBED_P25,
  IO_MBED_P28,
  IO_MBED_P27
#endif

#if defined TARGET_KL25Z

  IO_MBED_PTA5 = 0x80,
  IO_MBED_PTC8,
  IO_MBED_PTC9,
  IO_MBED_PTD5,
  IO_MBED_PTA13,
  IO_MBED_PTD2,
  IO_MBED_PTB1,
  IO_MBED_PTB2,
  IO_MBED_PTA2,
  IO_MBED_PTD4,
  IO_MBED_PTB3,
  IO_MBED_PTA12,
  IO_MBED_PTD0,
  IO_MBED_PTD3,
  IO_MBED_PTD1,
  IO_MBED_PTA4,
  IO_MBED_PTB0,
  IO_MBED_PTA1,
  IO_MBED_PTE0, //SDA
  IO_MBED_PTE1  //SCL
#endif
  
} en_cpu_io;

-

startReg function

void startReg(uint8_t bank);

uint8_t bank : The "bank" is schematic layer. You can select from 0 to 7 bank.

setWire function

uint8_t setWire(uint8_t mcuIO, uint8_t direction, uint8_t moduleIO);

setWire() is wiring data to connect pin of MCU to pin of Module.

uint8_t mcuIO : You can choose 18 IOs.

uint8_t direction: choose signal direction IO_REG_OUT_DIR : output from MCU IO_REG_IN_DIR : input to MCU

uint8_t moduleIO: You can select module pin.

endReg function

void endReg(uint8_t bank);

uint8_t bank : The "bank" is schematic layer. You can select from 0 to 7 bank. Must be same as "starReg()".

You can make other schematic(bank) as with the code 4,.

5,Change the schematic (bank)

5,Change the schematic (bank)

void changeBank(uint8_t bank);

You can select the schematic form 0 to 7.

6,Open or close the module gate

6,Open or close the module gate

   myModule1.connectModule();
   myModule2.connectModule();
   ...
   (same as normal mbed code)
   ...

   myModule1.disconnectModule();
   myModule2.disconnectModule();

Now, you can connect the many modules simultaneously with bank system!

Sample code 1

Universal Module and LCD module test program. This is show you that is possible to connect both modules simultaneously.

I set test function board like the below picture.(Universal module)

/media/uploads/Info/test2.png

Sample code 1


#include "mbed.h"
#include "TextLCD.h"

#include "MCUGearBaseM.h"
#include "MCUGearM.h"
#include "commonM.h"

Serial pc(USBTX, USBRX);


void setIOUni(MCUGear *mcugear);
void setIOLCD(MCUGear *mcugear);

DigitalOut myled(LED1);

MCUGear UniM(p28, p27, N_VDD_VDD_VDD);       //2 Connector Universal Module
MCUGear LCDM(p28, p27, N_VDD_VSS_VSS);        //LCD Module

DigitalOut Dout1(p11);
DigitalOut Dout2(p12);
DigitalOut Dout3(p13);
DigitalOut Dout4(p14);
DigitalOut Dout5(p15);

DigitalIn Din1(p9);
DigitalIn Din2(p10);

int main() {
    
    int sw1 = 0;
    int sw2 = 0;
    int nowBank = 0;
    
    initBase(); //initialize Baseboard
    
    //set schematic select 0-7
    UniM.detectModule();    //save location data in MCUGear class.
    LCDM.detectModule();    //save location data in MCUGear class.
    
    startReg(0);
    setIOUni(&UniM);//make schematic Bank0
    setIOLCD(&LCDM);//make schematic Bank0
    endReg(0);
    
    changeBank(0);//select Bank
    
    
    LCDM.connectModule();
    TextLCD lcd(p21, p22, p23, p24, p25, p26, TextLCD::LCD16x2); // rs, e, d4-d7
    lcd.cls();
    lcd.printf("Hello World!\n");
    wait(1);
    LCDM.disconnectModule();
    
    UniM.connectModule();//open the module gate
    LCDM.connectModule();//open the module gate
    while(1) {
        
        //UniM.connectModule();
        //LCDM.connectModule();
        sw1 = Din1.read();
        sw2 = Din2.read();
        printf("sw1 = %d  sw2 = %d\r\n",sw1,sw2);
        
        lcd.printf(" ");    //set IO as a neutral position
        lcd.cls();   //clear LCD
        lcd.printf("sw1 = %d\nsw2 = %d",sw1,sw2);   //write LCD data
        wait_ms(10);    //delay for view the LCD

        Dout1 = 0;
        Dout2 = 1;
        Dout3 = 1;
        wait(0.3);
        
        Dout1 = 1;
        Dout2 = 0;
        Dout3 = 1;
        wait(0.3);
        
        Dout1 = 1;
        Dout2 = 1;
        Dout3 = 0;
        wait(0.3);
        
      
        //UniM.disconnectModule();//close the module gate
        //LCDM.disconnectModule();//close the module gate
        
        
    }
}


void setIOUni(MCUGear *mcugear){
    mcugear->setWire(IO_MBED_P9, IO_REG_IN_DIR, 0);
    mcugear->setWire(IO_MBED_P10, IO_REG_IN_DIR, 1);
    mcugear->setWire(IO_MBED_P11, IO_REG_OUT_DIR,2);
    mcugear->setWire(IO_MBED_P12, IO_REG_OUT_DIR,3);
    mcugear->setWire(IO_MBED_P13, IO_REG_OUT_DIR,4);
}

void setIOLCD(MCUGear *mcugear){
    mcugear->setWire(IO_MBED_P21, IO_REG_OUT_DIR,0);
    mcugear->setWire(IO_MBED_P22, IO_REG_OUT_DIR,1);
    mcugear->setWire(IO_MBED_P23, IO_REG_OUT_DIR,2);
    mcugear->setWire(IO_MBED_P24, IO_REG_OUT_DIR,3);
    mcugear->setWire(IO_MBED_P25, IO_REG_OUT_DIR,4);
    mcugear->setWire(IO_MBED_P26, IO_REG_OUT_DIR,5);
}


Sample code 2

Universal Module test program. This is show you that is possible to change schematic(bank).

Sample code 2

#include "mbed.h"
#include "TextLCD.h"

#include "MCUGearBaseM.h"
#include "MCUGearM.h"
#include "commonM.h"

Serial pc(USBTX, USBRX);


void setIOBank0(MCUGear *mcugear);
void setIOBank1(MCUGear *mcugear);
void setIOBank2(MCUGear *mcugear);
void setIOBank3(MCUGear *mcugear);
void setIOBank4(MCUGear *mcugear);
void setIOBank5(MCUGear *mcugear);
void setIOBank6(MCUGear *mcugear);
void setIOBank7(MCUGear *mcugear);

DigitalOut myled(LED1);

MCUGear UniM(p28, p27, N_VDD_VDD_VDD);       //2 Connector Universal Module

DigitalOut Dout1(p16);
DigitalOut Dout2(p21);
DigitalOut Dout3(p22);
DigitalOut Dout4(p23);
DigitalOut Dout5(p24);

DigitalIn Din1(p9);
DigitalIn Din2(p10);

int main() {
    
    int sw1 = 0;
    int sw2 = 0;
    int nowBank = 0;
    
    initBase(); //initialize Baseboard
    
    //set schematic select 0-7
    int location = UniM.detectModule();    //save location data in MCUGear class and you can check return data.Baseboard has 0-47 pin.
    printf("location = %d\n", &location);
    
    startReg(0);
    setIOBank0(&UniM);//make schematic Bank0
    endReg(0);
    
    
    startReg(1);
    setIOBank1(&UniM);//make schematic Bank1
    endReg(1);
    
    startReg(2);
    setIOBank2(&UniM);//make schematic Bank2
    endReg(2);
    
    startReg(3);
    setIOBank3(&UniM);//make schematic Bank3
    endReg(3);
    
    startReg(4);
    setIOBank4(&UniM);//make schematic Bank4
    endReg(4);
    
    startReg(5);
    setIOBank5(&UniM);//make schematic Bank5
    endReg(5);
    
    startReg(6);
    setIOBank6(&UniM);//make schematic Bank6
    endReg(6);
    
    startReg(7);
    setIOBank7(&UniM);//make schematic Bank7
    endReg(7);

    changeBank(0);//select Bank
    
    while(1) {
        
        UniM.connectModule();
        sw1 = Din1.read();
        sw2 = Din2.read();
        printf("sw1 = %d  sw2 = %d\r\n",sw1,sw2);

        Dout1 = 0;
        Dout2 = 1;
        Dout3 = 1;
        wait(0.3);
        
        Dout1 = 1;
        Dout2 = 0;
        Dout3 = 1;
        wait(0.3);
        
        Dout1 = 1;
        Dout2 = 1;
        Dout3 = 0;
        wait(0.3);
      
        UniM.disconnectModule();
        
        if(sw1==0){//chage Bank
            ++nowBank;
            if(nowBank >= 8){
                nowBank = 0;
            }
            changeBank(nowBank);
            printf("nowBank = %d\r\n",nowBank);
        }
        
        
    }
}


void setIOBank0(MCUGear *mcugear){
    mcugear->setWire(IO_MBED_P9, IO_REG_IN_DIR, 0);
    mcugear->setWire(IO_MBED_P10, IO_REG_IN_DIR, 1);
}

void setIOBank1(MCUGear *mcugear){
    mcugear->setWire(IO_MBED_P10, IO_REG_IN_DIR, 0);
    mcugear->setWire(IO_MBED_P9, IO_REG_IN_DIR, 1);
}

void setIOBank2(MCUGear *mcugear){
    mcugear->setWire(IO_MBED_P9, IO_REG_IN_DIR, 0);
    mcugear->setWire(IO_MBED_P10, IO_REG_IN_DIR, 1);
    mcugear->setWire(IO_MBED_P16, IO_REG_OUT_DIR, 4);
    mcugear->setWire(IO_MBED_P21, IO_REG_OUT_DIR, 3);
    mcugear->setWire(IO_MBED_P22, IO_REG_OUT_DIR, 2);
}

void setIOBank3(MCUGear *mcugear){
    mcugear->setWire(IO_MBED_P10, IO_REG_IN_DIR, 0);
    mcugear->setWire(IO_MBED_P9, IO_REG_IN_DIR, 1);
    mcugear->setWire(IO_MBED_P16, IO_REG_OUT_DIR, 2);
    mcugear->setWire(IO_MBED_P21, IO_REG_OUT_DIR, 3);
    mcugear->setWire(IO_MBED_P22, IO_REG_OUT_DIR, 4);
}

void setIOBank4(MCUGear *mcugear){
    mcugear->setWire(IO_MBED_P9, IO_REG_IN_DIR, 0);
    mcugear->setWire(IO_MBED_P10, IO_REG_IN_DIR, 1);
    mcugear->setWire(IO_MBED_P16, IO_REG_OUT_DIR, 4);
    mcugear->setWire(IO_MBED_P21, IO_REG_OUT_DIR, 3);
    mcugear->setWire(IO_MBED_P22, IO_REG_OUT_DIR, 2);
}


void setIOBank5(MCUGear *mcugear){
    mcugear->setWire(IO_MBED_P10, IO_REG_IN_DIR, 0);
    mcugear->setWire(IO_MBED_P9, IO_REG_IN_DIR, 1);
    mcugear->setWire(IO_MBED_P16, IO_REG_OUT_DIR, 2);
    mcugear->setWire(IO_MBED_P21, IO_REG_OUT_DIR, 3);
    mcugear->setWire(IO_MBED_P22, IO_REG_OUT_DIR, 4);
}

void setIOBank6(MCUGear *mcugear){
    mcugear->setWire(IO_MBED_P9, IO_REG_IN_DIR, 0);
    mcugear->setWire(IO_MBED_P10, IO_REG_IN_DIR, 1);
    mcugear->setWire(IO_MBED_P16, IO_REG_OUT_DIR, 4);
    mcugear->setWire(IO_MBED_P21, IO_REG_OUT_DIR, 3);
    mcugear->setWire(IO_MBED_P22, IO_REG_OUT_DIR, 2);
}

void setIOBank7(MCUGear *mcugear){
    mcugear->setWire(IO_MBED_P10, IO_REG_IN_DIR, 0);
    mcugear->setWire(IO_MBED_P9, IO_REG_IN_DIR, 1);
    mcugear->setWire(IO_MBED_P16, IO_REG_OUT_DIR, 2);
    mcugear->setWire(IO_MBED_P21, IO_REG_OUT_DIR, 3);
    mcugear->setWire(IO_MBED_P22, IO_REG_OUT_DIR, 4);
}


日本語説明

MCU Gearのマニュアルモードライブラリです。

detail : http://mcugear.com/en/ 8つの回路図(Bank 0~7 )をベースボードに保存できます。

/media/uploads/Info/bank_2.png

使い方

1,ライブラリをインクルード

1,include library

#include "mbed.h"

#include "MCUGearBaseM.h"
#include "MCUGearM.h"
#include "commonM.h"

2,モジュールを定義します。

(! 同じ回路図(Bank)で使うモジュールは積層しないでください。)

2,Declare Module

MCUGear myModule1(p28, p27, N_***_***_***);
MCUGear myModule2(p28, p27, N_***_***_***);

myModule: モジュールに好きな名前を付けてください。

p28, p27, : I2C pins (KL25Z is "PTE0, PTE1")

N_*_*_* : Address. モジュールの裏面に設定したアドレスです。

3,ベースボードの初期化

3,Initialize baseboard

initBase();

4,配線データの作成

4,Call wiring register

    startReg(bank);

    myModule1.setWire(IO_MBED_P9, IO_REG_IN_DIR, 5);
    myModule1.setWire(IO_MBED_P15, IO_REG_OUT_DIR, 2);
    myModule1.setWire(IO_MBED_P12, IO_REG_OUT_DIR, 0);

    myModule2.setWire(IO_MBED_P13, IO_REG_OUT_DIR, 1);
    myModule2.setWire(IO_MBED_P14, IO_REG_IN_DIR, 3);
    myModule2.setWire(IO_MBED_P16, IO_REG_IN_DIR, 4);


    endReg(bank);

IOの定義番号などは MCUGearBaseboard.h ファイルを参考にしてください。

4,Call wiring register

// CPU I/O
typedef enum {

#if defined TARGET_LPC1768
  IO_MBED_P15 = 0x80,
  IO_MBED_P13,
  IO_MBED_P16,
  IO_MBED_P12,
  IO_MBED_P5,
  IO_MBED_P11,
  IO_MBED_P23,
  IO_MBED_P22,
  IO_MBED_P26,
  IO_MBED_P10,
  IO_MBED_P21,
  IO_MBED_P9,
  IO_MBED_P6,
  IO_MBED_P7,
  IO_MBED_P8,
  IO_MBED_P14,
  IO_MBED_P24,
  IO_MBED_P25,
  IO_MBED_P28,
  IO_MBED_P27
#endif

#if defined TARGET_KL25Z

  IO_MBED_PTA5 = 0x80,
  IO_MBED_PTC8,
  IO_MBED_PTC9,
  IO_MBED_PTD5,
  IO_MBED_PTA13,
  IO_MBED_PTD2,
  IO_MBED_PTB1,
  IO_MBED_PTB2,
  IO_MBED_PTA2,
  IO_MBED_PTD4,
  IO_MBED_PTB3,
  IO_MBED_PTA12,
  IO_MBED_PTD0,
  IO_MBED_PTD3,
  IO_MBED_PTD1,
  IO_MBED_PTA4,
  IO_MBED_PTB0,
  IO_MBED_PTA1,
  IO_MBED_PTE0, //SDA
  IO_MBED_PTE1  //SCL
#endif
  
} en_cpu_io;

-

startReg function

void startReg(uint8_t bank);

uint8_t bank : bankは回路図の事で、0~7まで設定できます。動作中にも何度も書き換えも可能です。

setWire function

uint8_t setWire(uint8_t mcuIO, uint8_t direction, uint8_t moduleIO);

setWire()関数はmbedの端子とモジュールの端子の割り振り方を決める関数です。

uint8_t mcuIO : mbedの18端子がアダプターボード(MCUボード)を介してベースボードに接続されています。(残りの端子はアダプターボード(MCUボード)から端子が出ています。)

uint8_t direction: mbedから見て入力か出力かを設定します。 IO_REG_OUT_DIR : output from MCU IO_REG_IN_DIR : input to MCU

uint8_t moduleIO: モジュールの出口の端子をどれにするかを決めます。

endReg function

void endReg(uint8_t bank);

uint8_t bank : bankは回路図の事で、0~7まで設定できます。動作中にも何度も書き換えも可能です。必ず "starReg()"のBankと同じ値にしてください。

上記と同様に、他の回路図(Bank)も作ることができます。

5,回路図(Bank)の切替

5,Change the schematic (bank)

void changeBank(uint8_t bank);

回路図は上記の関数で、Bankの値を0~7を入れれば、すぐに切り替えることができます。 (実行前にモジュールのゲートは閉じておくと安全です。)

6,モジュールのゲート開閉

6,Open or close the module gate

   myModule1.connectModule();
   myModule2.connectModule();
   ...
   (same as normal mbed code)
   ...

   myModule1.disconnectModule();
   myModule2.disconnectModule();

モジュールのゲートを開けるにはconnectModule()関数、閉じるにはdisconnectModule()関数です。

回路図(Bank)を保存して、複数のモジュールゲートを開いたまま動作させることができます!

Sample code 1

ユニバーサルモジュールとLCDモジュールを同時に接続したまま使うテストプログラムです。

ユニバーサルモジュールは以下の図のように接続します。

/media/uploads/Info/test2.png

Sample code 1


#include "mbed.h"
#include "TextLCD.h"

#include "MCUGearBase.h"
#include "MCUGear.h"
#include "common.h"

Serial pc(USBTX, USBRX);


void setIOUni(MCUGear *mcugear);
void setIOLCD(MCUGear *mcugear);

DigitalOut myled(LED1);

MCUGear UniM(p28, p27, N_VDD_VDD_VDD);       //2 Connector Universal Module
MCUGear LCDM(p28, p27, N_VDD_VSS_VSS);        //LCD Module

DigitalOut Dout1(p11);
DigitalOut Dout2(p12);
DigitalOut Dout3(p13);
DigitalOut Dout4(p14);
DigitalOut Dout5(p15);

DigitalIn Din1(p9);
DigitalIn Din2(p10);

int main() {
    
    int sw1 = 0;
    int sw2 = 0;
    int nowBank = 0;
    
    initBase(); //initialize Baseboard
    
    //set schematic select 0-7
    UniM.detectModule();    //save location data in MCUGear class.
    LCDM.detectModule();    //save location data in MCUGear class.
    
    startReg(0);
    setIOUni(&UniM);//make schematic Bank0
    setIOLCD(&LCDM);//make schematic Bank0
    endReg(0);
    
    changeBank(0);//select Bank
    
    
    LCDM.connectModule();
    TextLCD lcd(p21, p22, p23, p24, p25, p26, TextLCD::LCD16x2); // rs, e, d4-d7
    lcd.cls();
    lcd.printf("Hello World!\n");
    wait(1);
    LCDM.disconnectModule();
    
    UniM.connectModule();//open the module gate
    LCDM.connectModule();//open the module gate
    while(1) {
        
        //UniM.connectModule();
        //LCDM.connectModule();
        sw1 = Din1.read();
        sw2 = Din2.read();
        printf("sw1 = %d  sw2 = %d\r\n",sw1,sw2);
        
        lcd.printf(" ");    //set IO as a neutral position
        lcd.cls();   //clear LCD
        lcd.printf("sw1 = %d\nsw2 = %d",sw1,sw2);   //write LCD data
        wait_ms(10);    //delay for view the LCD

        Dout1 = 0;
        Dout2 = 1;
        Dout3 = 1;
        wait(0.3);
        
        Dout1 = 1;
        Dout2 = 0;
        Dout3 = 1;
        wait(0.3);
        
        Dout1 = 1;
        Dout2 = 1;
        Dout3 = 0;
        wait(0.3);
        
      
        //UniM.disconnectModule();//close the module gate
        //LCDM.disconnectModule();//close the module gate
        
        
    }
}


void setIOUni(MCUGear *mcugear){
    mcugear->setWire(IO_MBED_P9, IO_REG_IN_DIR, 0);
    mcugear->setWire(IO_MBED_P10, IO_REG_IN_DIR, 1);
    mcugear->setWire(IO_MBED_P11, IO_REG_OUT_DIR,2);
    mcugear->setWire(IO_MBED_P12, IO_REG_OUT_DIR,3);
    mcugear->setWire(IO_MBED_P13, IO_REG_OUT_DIR,4);
}

void setIOLCD(MCUGear *mcugear){
    mcugear->setWire(IO_MBED_P21, IO_REG_OUT_DIR,0);
    mcugear->setWire(IO_MBED_P22, IO_REG_OUT_DIR,1);
    mcugear->setWire(IO_MBED_P23, IO_REG_OUT_DIR,2);
    mcugear->setWire(IO_MBED_P24, IO_REG_OUT_DIR,3);
    mcugear->setWire(IO_MBED_P25, IO_REG_OUT_DIR,4);
    mcugear->setWire(IO_MBED_P26, IO_REG_OUT_DIR,5);
}


Sample code 2

ユニバーサルモジュールに、沢山の回路図(Bank)を設定して、スイッチ1(sw1)に当たる端子が押されたときにバンクを切り替えて動きます。

Sample code 2

#include "mbed.h"
#include "TextLCD.h"

#include "MCUGearBaseM.h"
#include "MCUGearM.h"
#include "commonM.h"

Serial pc(USBTX, USBRX);

void setIOBank0(MCUGear *mcugear);
void setIOBank1(MCUGear *mcugear);
void setIOBank2(MCUGear *mcugear);
void setIOBank3(MCUGear *mcugear);
void setIOBank4(MCUGear *mcugear);
void setIOBank5(MCUGear *mcugear);
void setIOBank6(MCUGear *mcugear);
void setIOBank7(MCUGear *mcugear);

DigitalOut myled(LED1);

MCUGear UniM(p28, p27, N_VDD_VDD_VDD);       //2 Connector Universal Module

DigitalOut Dout1(p16);
DigitalOut Dout2(p21);
DigitalOut Dout3(p22);
DigitalOut Dout4(p23);
DigitalOut Dout5(p24);

DigitalIn Din1(p9);
DigitalIn Din2(p10);

int main() {
    
    int sw1 = 0;
    int sw2 = 0;
    int nowBank = 0;
    
    initBase(); //initialize Baseboard
    
    //set schematic select 0-7
    int location = UniM.detectModule();    //save location data in MCUGear class and you can check return data.Baseboard has 0-47 pin.
    printf("location = %d\n", &location);
    
    startReg(0);
    setIOBank0(&UniM);//make schematic Bank0
    endReg(0);
    
    
    startReg(1);
    setIOBank1(&UniM);//make schematic Bank1
    endReg(1);
    
    startReg(2);
    setIOBank2(&UniM);//make schematic Bank2
    endReg(2);
    
    startReg(3);
    setIOBank3(&UniM);//make schematic Bank3
    endReg(3);
    
    startReg(4);
    setIOBank4(&UniM);//make schematic Bank4
    endReg(4);
    
    startReg(5);
    setIOBank5(&UniM);//make schematic Bank5
    endReg(5);
    
    startReg(6);
    setIOBank6(&UniM);//make schematic Bank6
    endReg(6);
    
    startReg(7);
    setIOBank7(&UniM);//make schematic Bank7
    endReg(7);

    changeBank(0);//select Bank
    
    while(1) {
        
        UniM.connectModule();
        sw1 = Din1.read();
        sw2 = Din2.read();
        printf("sw1 = %d  sw2 = %d\r\n",sw1,sw2);

        Dout1 = 0;
        Dout2 = 1;
        Dout3 = 1;
        wait(0.3);
        
        Dout1 = 1;
        Dout2 = 0;
        Dout3 = 1;
        wait(0.3);
        
        Dout1 = 1;
        Dout2 = 1;
        Dout3 = 0;
        wait(0.3);
      
        UniM.disconnectModule();
        
        if(sw1==0){//chage Bank
            ++nowBank;
            if(nowBank >= 8){
                nowBank = 0;
            }
            changeBank(nowBank);
            printf("nowBank = %d\r\n",nowBank);
        }
        
        
    }
}


void setIOBank0(MCUGear *mcugear){
    mcugear->setWire(IO_MBED_P9, IO_REG_IN_DIR, 0);
    mcugear->setWire(IO_MBED_P10, IO_REG_IN_DIR, 1);
}

void setIOBank1(MCUGear *mcugear){
    mcugear->setWire(IO_MBED_P10, IO_REG_IN_DIR, 0);
    mcugear->setWire(IO_MBED_P9, IO_REG_IN_DIR, 1);
}

void setIOBank2(MCUGear *mcugear){
    mcugear->setWire(IO_MBED_P9, IO_REG_IN_DIR, 0);
    mcugear->setWire(IO_MBED_P10, IO_REG_IN_DIR, 1);
    mcugear->setWire(IO_MBED_P16, IO_REG_OUT_DIR, 4);
    mcugear->setWire(IO_MBED_P21, IO_REG_OUT_DIR, 3);
    mcugear->setWire(IO_MBED_P22, IO_REG_OUT_DIR, 2);
}

void setIOBank3(MCUGear *mcugear){
    mcugear->setWire(IO_MBED_P10, IO_REG_IN_DIR, 0);
    mcugear->setWire(IO_MBED_P9, IO_REG_IN_DIR, 1);
    mcugear->setWire(IO_MBED_P16, IO_REG_OUT_DIR, 2);
    mcugear->setWire(IO_MBED_P21, IO_REG_OUT_DIR, 3);
    mcugear->setWire(IO_MBED_P22, IO_REG_OUT_DIR, 4);
}

void setIOBank4(MCUGear *mcugear){
    mcugear->setWire(IO_MBED_P9, IO_REG_IN_DIR, 0);
    mcugear->setWire(IO_MBED_P10, IO_REG_IN_DIR, 1);
    mcugear->setWire(IO_MBED_P16, IO_REG_OUT_DIR, 4);
    mcugear->setWire(IO_MBED_P21, IO_REG_OUT_DIR, 3);
    mcugear->setWire(IO_MBED_P22, IO_REG_OUT_DIR, 2);
}


void setIOBank5(MCUGear *mcugear){
    mcugear->setWire(IO_MBED_P10, IO_REG_IN_DIR, 0);
    mcugear->setWire(IO_MBED_P9, IO_REG_IN_DIR, 1);
    mcugear->setWire(IO_MBED_P16, IO_REG_OUT_DIR, 2);
    mcugear->setWire(IO_MBED_P21, IO_REG_OUT_DIR, 3);
    mcugear->setWire(IO_MBED_P22, IO_REG_OUT_DIR, 4);
}

void setIOBank6(MCUGear *mcugear){
    mcugear->setWire(IO_MBED_P9, IO_REG_IN_DIR, 0);
    mcugear->setWire(IO_MBED_P10, IO_REG_IN_DIR, 1);
    mcugear->setWire(IO_MBED_P16, IO_REG_OUT_DIR, 4);
    mcugear->setWire(IO_MBED_P21, IO_REG_OUT_DIR, 3);
    mcugear->setWire(IO_MBED_P22, IO_REG_OUT_DIR, 2);
}

void setIOBank7(MCUGear *mcugear){
    mcugear->setWire(IO_MBED_P10, IO_REG_IN_DIR, 0);
    mcugear->setWire(IO_MBED_P9, IO_REG_IN_DIR, 1);
    mcugear->setWire(IO_MBED_P16, IO_REG_OUT_DIR, 2);
    mcugear->setWire(IO_MBED_P21, IO_REG_OUT_DIR, 3);
    mcugear->setWire(IO_MBED_P22, IO_REG_OUT_DIR, 4);
}


Revision:
2:7b4657c7b996
Parent:
1:bbcba1a79e7b
Child:
3:4bb3814d4255
--- a/main.cpp	Thu Oct 03 09:21:14 2013 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,944 +0,0 @@
-/* MCU Gear Library, only for testing MCUGear without any circuit you connected.
- * Copyright (c) 2013, NestEgg Inc., http://www.mcugear.com/
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-#include "mbed.h"
-#include "TextLCD.h"
-
-#include "MCUGearBase.h"
-#include "MCUGear.h"
-#include "common.h"
-
-Serial pc(USBTX, USBRX); // tx, rx Set BaudRate = 115200 in main()
-
- //Make instance. Set I2C pins, Module address and Connector numnber of Modules.
-
-#ifdef LPC1768_mbed
-//caution: Do not use I2C(p28 & p27). It is reserved in this system with high speed 1.5MHz I2C.
-//If you want to use I2C, you should change I2C clock.
-// or use multi-function module.
-
-//Address setting:you can see the detail on common.h file.
-//address format : (Type of device)_AD2pin_AD1pin_AD0pin
-//N(PCA9674) A(PCA9674A) (VDD = +3V3  VSS = GND)
-
-//Initialize modules-----------------------------------------------------------------------
-MCUGear AD12M(p28, p27, N_SCL_SCL_VSS,4);       //AD(MCP3202) 12bit Module : Set number of module pin 
-MCUGear AD8ch12M(p28, p27, N_SDA_SDA_SDA,4);    //AD(MCP3208) 12bit 8ch Module
-MCUGear DA12M(p28, p27, N_SCL_SCL_SCL,4);       //DA(MCP4901) 12bit Module
-MCUGear LCDM(p28, p27, N_VDD_VSS_VSS,6);        //LCD Module
-MCUGear SHM(p28, p27, N_VDD_VSS_VDD,8);         //Signal Hold Module
-MCUGear Uni2M(p28, p27, N_VDD_VDD_VDD,8);       //2 Connector Universal Module
-MCUGear MFM(p28, p27, N_VSS_VSS_VSS,4);         //Multifunction Module
-//-----------------------------------------------------------------------------------------
-
-//Sample setting-----------------------------------------------------------------------
-//TextLCD lcd(p21, p22, p23, p24, p25, p26, TextLCD::LCD16x2); // rs, e, d4-d7
-SPI spi(p5, p6, p7); // mosi, miso, sclk
-DigitalOut cs(p8); //for SPI communications
-DigitalOut Dout(p15);//for 12bit DA module
-BusOut SignalHold (p16,p21,p22,p23,p24,p25,p26);
-
-DigitalOut Dout1(p16);
-DigitalOut Dout2(p21);
-DigitalOut Dout3(p22);
-DigitalOut Dout4(p23);
-DigitalOut Dout5(p24);
-DigitalIn Din1(p9);
-DigitalIn Din2(p10);
-
-//-------------------------------------------------------------------------------------
-#endif
-
-
-#ifdef FS_KL25Z
-//Initialize modules-----------------------------------------------------------------------
-MCUGear AD12M(PTE0, PTE1, N_SCL_SCL_VSS,4);       //AD(MCP3202) 12bit Module : Set number of module pin 
-MCUGear AD8ch12M(PTE0, PTE1, N_SDA_SDA_SDA,4);    //AD(MCP3208) 12bit 8ch Module
-MCUGear DA12M(PTE0, PTE1, N_SCL_SCL_SCL,4);       //DA(MCP4901) 12bit Module
-MCUGear LCDM(PTE0, PTE1, N_VDD_VSS_VSS,6);        //LCD Module
-MCUGear SHM(PTE0, PTE1, N_VDD_VSS_VDD,8);         //Signal Hold Module
-MCUGear Uni2M(PTE0, PTE1, N_VDD_VDD_VDD,8);       //2 Connector Universal Module
-MCUGear MFM(PTE0, PTE1, N_VSS_VSS_VSS,4);         //Multifunction Module
-//-----------------------------------------------------------------------------------------
-
-//Sample setting-----------------------------------------------------------------------
-//TextLCD lcd(PTA1, PTA2, PTD4, PTA12, PTA4, PTA5, TextLCD::LCD16x2); // rs, e, d4-d7
-SPI spi(PTD2,PTD3,PTD1); // mosi, miso, sclk
-DigitalOut cs(PTD0); //for SPI communications
-DigitalOut Dout(PTA13);//for 12bit DA module
-BusOut SignalHold (PTB0, PTB1, PTD4, PTA12, PTA4, PTA5, PTC8);
-
-DigitalOut Dout1(PTB0);
-DigitalOut Dout2(PTB1);
-DigitalOut Dout3(PTD4);
-DigitalOut Dout4(PTA12);
-DigitalOut Dout5(PTA4);
-DigitalIn Din1(PTB0);
-DigitalIn Din2(PTB1);
-#endif
-
-//sample functions------------------------------------------------------------
-void IOSimpleSPI(MCUGear *mcugear);             //IO setting for Simple SPI module
-void IO12bitDA(MCUGear *mcugear);               //IO setting for DA 12bit module
-void IOLCD(MCUGear *mcugear);                   //IO setting for LCD module
-void IOSHM(MCUGear *mcugear);                   //IO setting for Signal Hold module
-void IOUni2M(MCUGear *mcugear);                 //IO setting for 2 Connector Universal module 
-
-int read12bitAD(MCUGear *mcugear, char ch);     //simple ADC 
-void write12bitDA(MCUGear *mcugear, int data);  //simple DA
-int read12bit8chAD(MCUGear *mcugear, char ch);  //simple ADC 8ch
-
-#ifdef AD_MODE //for Multifunction Module
-int read10bitAD(MCUGear *mcugear, int ch);
-#endif
-
-#ifdef PWM_MODE //for Multifunction Module
-void initPWM(MCUGear *mcugear, unsigned int Divider, unsigned int friquency, unsigned int duty0, unsigned int duty1, unsigned int duty2);
-void PWMfriq(MCUGear *mcugear, unsigned int friquency);
-void PWMDuty(MCUGear *mcugear, int ch, unsigned int Duty);
-void StopPWM(MCUGear *mcugear);
-void StartPWM(MCUGear *mcugear);
-#endif
-//----------------------------------------------------------------------------
-
-
-//***************************************************************************************
-int main() {
-
-    int SW1,SW2;
-
-//    pc.printf("hello world!!!");
-    
-    initBase(); //initialize Baseboard
-    
-
-   //Set IO --------------------------------------------------------------
-
-    IOSimpleSPI(&AD12M);
-    IOSimpleSPI(&AD8ch12M);
-    IO12bitDA(&DA12M);
-    IOLCD(&LCDM);
-    IOSHM(&SHM);
-    IOUni2M(&Uni2M);
-    IOSimpleSPI(&MFM);    //IO setting for Multifunction module
-
-   //---------------------------------------------------------------------
-   wait(1);
-   
-    LCDM.connectModule();
- #ifdef LPC1768_mbed
-    TextLCD lcd(p21, p22, p23, p24, p25, p26, TextLCD::LCD16x2); // rs, e, d4-d7
- #endif
- 
- #ifdef FS_KL25Z
-    TextLCD lcd(PTB0, PTB1, PTD4, PTA12, PTA4, PTA5, TextLCD::LCD16x2); // rs, e, d4-d7
- #endif
- 
-    lcd.cls();
-    lcd.printf("Hello World!\n");
-    wait(1);
-    LCDM.disconnectModule();
-
-
-
-    int data1[2];
-    int data2[8];
-    int data3[3];
-    uint8_t busData = 0;
-
-#ifdef PWM_MODE
-
-    uint32_t PWM_data = 0x7FF;
-    uint32_t PWM_data_old = 0;
-    
-    MFM.connectModule();   //connect---
-    initPWM(&MFM, 24, 40950, 10, 10, 10);// 0-2msec 12bit 20msec for RC servosetting 
-    //initPWM(&MFM, 120, 4095, 20, 50, 80);//Simple 10msec PWM
-    //initPWM(&MFM, 48, 26, 70, 70, 70);//38kHz 26usec for IR LED
-    MFM.disconnectModule();   //disconnect---
-
-#endif    
-    
-    while(1) {
-       //12bit AD Mobdule-------------------------------------------------
-
-       cs = 1; //reset CS pin
-       AD12M.connectModule();   //connect---
-       data1[0] = read12bitAD(&AD12M, 0);
-       data1[1] = read12bitAD(&AD12M, 1);
-       AD12M.disconnectModule();   //disconnect---
-       
-       //12bit 8ch AD Module
-       
-       cs = 1; //reset CS pin
-       AD8ch12M.connectModule();   //connect---
-       data2[0] = read12bit8chAD(&AD8ch12M, 0);    //0ch
-       data2[1] = read12bit8chAD(&AD8ch12M, 1);    //1ch
-       data2[2] = read12bit8chAD(&AD8ch12M, 2);    //2ch
-       data2[3] = read12bit8chAD(&AD8ch12M, 3);    //3ch
-       data2[4] = read12bit8chAD(&AD8ch12M, 4);    //4ch
-       data2[5] = read12bit8chAD(&AD8ch12M, 5);    //5ch
-       data2[6] = read12bit8chAD(&AD8ch12M, 6);    //6ch
-       data2[7] = read12bit8chAD(&AD8ch12M, 7);    //7ch
-       AD8ch12M.disconnectModule();   //disconnect---
-       
-#ifdef AD_MODE //for Multifunction Module
-       cs = 1; //reset CS pin
-       MFM.connectModule();   //connect---
-       data3[0] = read10bitAD(&MFM, 1); //1ch
-       data3[1] = read10bitAD(&MFM, 2); //2ch
-       data3[2] = read10bitAD(&MFM, 3); //3ch
-       MFM.disconnectModule();   //disconnect---
-#endif
-
-#ifdef PWM_MODE //for Multifunction Module
-
-        cs = 1; //reset CS pin
-        MFM.connectModule();   //connect---
-        
-        //RC Servo and Simple PWM
-/*        PWMDuty(&MFM, 1, 0x7FF);    //duty 50%
-        PWMDuty(&MFM, 2, 0x7FF);
-        PWMDuty(&MFM, 3, 0x7FF);
-*/
- 
-        if(PWM_data > 0xFFF){
-            PWM_data = 0x7FF;
-        }
-        
-        //RC Servo and Simple PWM
-        PWMDuty(&MFM, 1, 0x7FF);    //duty 50%
-        
-        if(PWM_data_old != PWM_data){
-            PWMDuty(&MFM, 2, PWM_data);
-            PWM_data_old = PWM_data;
-            
-        }
-        
-        //PWMDuty(&MFM, 3, PWM_data);
-        PWMDuty(&MFM, 3, data1[0]+0x7FF);
-        //mwait01(10000);   //If the system is heavy or not, you should adjust the value.
-
-        PWM_data = PWM_data + 0x0FF;
-
-        //Sample for IR LED 
-/*
-        StopPWM(&MFM);
-        wait_us(10);
-        StartPWM(&MFM);
-        wait_us(10);        
-        StopPWM(&MFM);
-        wait_us(10);
-        StartPWM(&MFM);
-        wait_us(10);        
-        StopPWM(&MFM);
-*/
-        MFM.disconnectModule();   //disconnect---
-
-#endif        
-       
-
-       //LCD Module------------------------------------------------------
-       LCDM.connectModule();   //connect---
-       lcd.printf(" ");    //set IO as a neutral position
-       lcd.cls();   //clear LCD
-       lcd.printf("A%d B%d\nC%d D%d",data1[0],data1[1],data2[0],data2[6]);   //write LCD data
-       wait_ms(10);    //delay for view the LCD
-       LCDM.disconnectModule();   //disconnect---
-
-       //12bit 2ch AD
-       //pc.printf("0ch%d, 1ch%d,  ",data1[0],data1[1]);
-       //12bit 8ch AD
-       pc.printf("0ch%d, 1ch%d, 2ch%d, 3ch%d, 4ch%d, 5ch%d, 6ch%d, 7ch%d,  ",data2[0],data2[1],data2[2],data2[3],data2[4],data2[5],data2[6],data2[7]);
-#ifdef AD_MODE //for Multifunction Module
-       pc.printf("0ch%d, 1ch%d, 2ch%d",data3[0],data3[1],data3[2]);
-#endif
-       pc.printf("\r\n");
-
-
-       //12bit SPI DA module---------------------------------------------
-       cs = 1; //reset CS pin
-       Dout=1;    //reset ratch signal
-       DA12M.connectModule();   //connect---
-       write12bitDA(&DA12M, data1[0]);
-       DA12M.disconnectModule();   //disconnect---
-
-
-       //Signal Hold module (TC74VHCT540AF)------------------------------
-       Dout = 0;    //ratch standby
-       SHM.connectModule();   //connect---
-       
-       SignalHold = busData;   //set 7bit bus out
-       Dout = 1;    //ratch
-       Dout = 0;    //ratch standby
-       SHM.disconnectModule();   //disconnect---
-       
-       //2 connector universal module ------------------------------
-       
-       Dout = 1;
-       Dout1 = 1;
-       Dout2 = 1;
-       Dout3 = 1;
-       Dout4 = 1;
-       Dout5 = 1;
-       
-       Uni2M.connectModule();   //connect---
-       
-       SW1 = Din1.read();
-       SW2 = Din2.read();
-       
-       if(SW1 == 1){
-            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---
-
-       /*++busData;
-       if(busData >= 0x80)
-            busData = 0x00;
-       */
-       
-       if(busData == 0x00)
-            busData = 0x7F;
-       
-       --busData;
-    }    
-}
-//***************************************************************************************
-
-
-//Smple functions
-//----------------------------------------------------------------------------------
-//Simple read 12bit 2ch AD module
-//----------------------------------------------------------------------------------
-int read12bitAD(MCUGear *mcugear, char ch){
-
-    char sendData;
-    int whoami[3];
-    
-#ifdef LPC1768_mbed
-    spi.frequency(1000000);//1MHz
-    if(ch == 0){
-        sendData = 0x06;
-    }else if(ch == 1){
-        sendData = 0x07;
-    }else{
-        return -1;
-    }
-    //12bit AD Mobdule----------------
-//    cs = 1; //reset CS pin
-//    mcugear->connectModule();   //connect---
-    spi.format(14,0);    //Change SPI format mbed only
-    cs = 0;
-    spi.write(sendData);
-    wait_us(1);
-    whoami[0] = spi.write(0x2000)-0x2000;   //get data from AD device
-    cs = 1;
-//    mcugear->disconnectModule();   //disconnect---
-    return whoami[0];
-#endif
-
-#ifdef FS_KL25Z
-    spi.frequency(2000000); //1MHz for KL25Z
-    if(ch == 0){
-        sendData = 0x80;
-    }else if(ch == 1){
-        sendData = 0xC0;
-    }else{
-        return -1;
-    }
-    
-    //12bit AD Mobdule----------------
- //   cs = 1; //reset CS pin
- //   mcugear->connectModule();   //connect---
-    
-    cs = 0; 
-    //FRDM KL25Z is 8-bit format.
-    whoami[2] = spi.write(0x01);//0000 0001
-    whoami[2] = spi.write(sendData);
-    whoami[0] = whoami[2]<<8;
-    whoami[0] = whoami[0] + spi.write(0x00) - 0xE000;//0000 0000
-//    whoami[2] = 0;//clear buffer
-    cs = 1;
- //   mcugear->disconnectModule();   //disconnect---
-    return whoami[0];
-#endif
-}
-
-//----------------------------------------------------------------------------------
-//IO setting for LCD module
-//----------------------------------------------------------------------------------
-void IOLCD(MCUGear *mcugear){
-    uint8_t fio[12];
-    mcugear->detect_module(fio);    // detect LCDM
-
-#ifdef LPC1768_mbed
-    mcugear->savePinSetting(0, IO_MBED_P21, IO_REG_OUT_DIR, fio[0]);
-    mcugear->savePinSetting(1, IO_MBED_P22, IO_REG_OUT_DIR, fio[1]);
-    mcugear->savePinSetting(2, IO_MBED_P23, IO_REG_OUT_DIR, fio[2]);
-    mcugear->savePinSetting(3, IO_MBED_P24, IO_REG_OUT_DIR, fio[3]);
-    mcugear->savePinSetting(4, IO_MBED_P25, IO_REG_OUT_DIR, fio[4]);
-    mcugear->savePinSetting(5, IO_MBED_P26, IO_REG_OUT_DIR, fio[5]);
-#endif
-
-#ifdef FS_KL25Z
-    mcugear->savePinSetting(0, IO_MBED_PTB0, IO_REG_OUT_DIR, fio[0]);
-    mcugear->savePinSetting(1, IO_MBED_PTB1, IO_REG_OUT_DIR, fio[1]);
-    mcugear->savePinSetting(2, IO_MBED_PTD4, IO_REG_OUT_DIR, fio[2]);
-    mcugear->savePinSetting(3, IO_MBED_PTA12, IO_REG_OUT_DIR, fio[3]);
-    mcugear->savePinSetting(4, IO_MBED_PTA4, IO_REG_OUT_DIR, fio[4]);
-    mcugear->savePinSetting(5, IO_MBED_PTA5, IO_REG_OUT_DIR, fio[5]);
-#endif
-
-#ifdef BOOST_MODE
-    mcugear->makeCircuit();
-#endif
-}
-
-
-//----------------------------------------------------------------------------------
-//IO setting for 12bit DA module
-//----------------------------------------------------------------------------------
-void IO12bitDA(MCUGear *mcugear){
-    uint8_t fio[12];
-   //---------------------
-    mcugear->detect_module(fio);
-    //Dout(p15),mosi(p5),sck(p7),cs(p8)
-#ifdef LPC1768_mbed
-    mcugear->savePinSetting(0, IO_MBED_P15, IO_REG_OUT_DIR, fio[0]);
-    mcugear->savePinSetting(1, IO_MBED_P5, IO_REG_OUT_DIR, fio[1]);
-    mcugear->savePinSetting(2, IO_MBED_P7, IO_REG_OUT_DIR, fio[2]);
-    mcugear->savePinSetting(3, IO_MBED_P8, IO_REG_OUT_DIR, fio[3]);
-#endif
-
-#ifdef FS_KL25Z
-    //Dout(PTA13),mosi(PTD2),sck(PTD1),cs(PTD0)
-    mcugear->savePinSetting(0, IO_MBED_PTA13, IO_REG_OUT_DIR, fio[0]);
-    mcugear->savePinSetting(1, IO_MBED_PTD2, IO_REG_OUT_DIR, fio[1]);
-    mcugear->savePinSetting(2, IO_MBED_PTD1, IO_REG_OUT_DIR, fio[2]);
-    mcugear->savePinSetting(3, IO_MBED_PTD0, IO_REG_OUT_DIR, fio[3]);
-#endif
-
-#ifdef BOOST_MODE
-    mcugear->makeCircuit();
-#endif
-}
-
-//----------------------------------------------------------------------------------
-//Simple write for 12bit DA module
-//----------------------------------------------------------------------------------
-void write12bitDA(MCUGear *mcugear, int data){
-
-       //12bit SPI DA module----------------
-       
-#ifdef LPC1768_mbed
-//       spi.frequency(1000000); //1MHz
-       spi.frequency(20000000); //20MHz
-       spi.format(16,0);        //Change SPI format
-//       mcugear->connectModule();   //connect---
-       cs = 0;
-       spi.write((0x3000)+(data)); //write 0011 1000 0000 0000
-#endif
-
-       //12bit SPI DA module----------------
-#ifdef FS_KL25Z
-       //spi.frequency(2000000); //1MHz for KL25Z
-       spi.frequency(20000000); //10MHz
-       //connection
- //      mcugear->connectModule();   //connect---
-       cs = 0;
-       spi.write((0x30)+((data>>8)&0x0F));//write 0011 0000
-       spi.write(data&0xFF);//write 0011 1000 0000 0000
-#endif
-
-       wait_us(1);  //over 15nsec
-       cs = 1;      //CS high
-       wait_us(1);  //over 40nsec
-       Dout=0;      //ratch for DA out enable
-       wait_us(1);  //over 100nsec
-       Dout=1;      //reset ratch signal
-//       mcugear->disconnectModule();   //disconnect---
-//       wait_us(1);  //wait after disconnect
-}
-
-//----------------------------------------------------------------------------------
-//Simple write for 12bit 8ch AD module
-//----------------------------------------------------------------------------------
-int read12bit8chAD(MCUGear *mcugear, char ch){
-
-    char sendData;
-    int whoami[3];
-    
-#ifdef LPC1768_mbed
-//    if((ch >= 0 )&&(ch < 8)){
-    if(ch < 8){
-        sendData = 0x18+ch; //0001 1000
-    }else{
-        return -1;
-    }
-    
-    //12bit AD Mobdule----------------
-    spi.frequency(1000000); //1MHz
- //   cs = 1; //reset CS pin
- //   mcugear->connectModule();   //connect---
-    spi.format(14,0);    //Change SPI format mbed only
-    cs = 0;
-    spi.write(sendData);
-    whoami[0] = spi.write(0x0000)-0x2000;   //get data from AD device
-    cs = 1;
-//    mcugear->disconnectModule();   //disconnect---
-    return whoami[0];
-#endif
-
-#ifdef FS_KL25Z
-    char sendData2;
-//0000 0000 0110 00 00 [0000 0000 0000]
-//    if((ch >= 0 )&&(ch < 8)){
-    if(ch < 8){
-        sendData = 0x18+ch; //0001 1000
-        sendData2 = sendData >> 2;
-        sendData = sendData << 6;
-        
-    }else{
-        return -1;
-    }
-    
-    //12bit AD Mobdule----------------
-    spi.frequency(2000000); //1MHz for KL25Z
-//    cs = 1; //reset CS pin
-//    mcugear->connectModule();   //connect---
-    cs = 0;
-    spi.write(sendData2);
-    whoami[2] = spi.write(sendData);
-    whoami[0] = whoami[2]<<8;
-    whoami[0] = whoami[0] + spi.write(0x00)-0xE000;   //get data from AD device
-    cs = 1;
-//    mcugear->disconnectModule();   //disconnect---
-    return whoami[0];
-
-
-#endif
-}
-
-
-//----------------------------------------------------------------------------------
-//Simple universal module
-//----------------------------------------------------------------------------------
-void IOSHM(MCUGear *mcugear){
-
-    uint8_t fio[12];
-    // detect SHM
-    mcugear->detect_module(fio);
-    //CLK for ratch(1), DigialOut(2-8)
-
-#ifdef LPC1768_mbed
-    mcugear->savePinSetting(0, IO_MBED_P15, IO_REG_OUT_DIR, fio[0]);
-    mcugear->savePinSetting(1, IO_MBED_P16, IO_REG_OUT_DIR, fio[1]);
-    mcugear->savePinSetting(2, IO_MBED_P21, IO_REG_OUT_DIR, fio[2]);
-    mcugear->savePinSetting(3, IO_MBED_P22, IO_REG_OUT_DIR, fio[3]);
-    mcugear->savePinSetting(4, IO_MBED_P23, IO_REG_OUT_DIR, fio[4]);
-    mcugear->savePinSetting(5, IO_MBED_P24, IO_REG_OUT_DIR, fio[5]);
-    mcugear->savePinSetting(6, IO_MBED_P25, IO_REG_OUT_DIR, fio[6]);
-    mcugear->savePinSetting(7, IO_MBED_P26, IO_REG_OUT_DIR, fio[7]);
-#endif
-
-#ifdef FS_KL25Z
-    //PTA1, PTA2, PTD4, PTA12, PTA4, PTA5, PTC8
-    mcugear->savePinSetting(0, IO_MBED_PTA13, IO_REG_OUT_DIR, fio[0]);
-    mcugear->savePinSetting(1, IO_MBED_PTA1, IO_REG_OUT_DIR, fio[1]);
-    mcugear->savePinSetting(2, IO_MBED_PTA2, IO_REG_OUT_DIR, fio[2]);
-    mcugear->savePinSetting(3, IO_MBED_PTD4, IO_REG_OUT_DIR, fio[3]);
-    mcugear->savePinSetting(4, IO_MBED_PTA12, IO_REG_OUT_DIR, fio[4]);
-    mcugear->savePinSetting(5, IO_MBED_PTA4, IO_REG_OUT_DIR, fio[5]);
-    mcugear->savePinSetting(6, IO_MBED_PTA5, IO_REG_OUT_DIR, fio[6]);
-    mcugear->savePinSetting(7, IO_MBED_PTC8, IO_REG_OUT_DIR, fio[7]);
-#endif
- 
-#ifdef BOOST_MODE
-    mcugear->makeCircuit();
-#endif
-
-}
-
-//----------------------------------------------------------------------------------
-//Simple universal module
-//----------------------------------------------------------------------------------
-void IOUni2M(MCUGear *mcugear){
-
-    uint8_t fio[12];
-    // detect SHM
-    mcugear->detect_module(fio);
-    //CLK for ratch(1), DigialOut(2-8)
-
-#ifdef LPC1768_mbed
-    mcugear->savePinSetting(0, IO_MBED_P9, IO_REG_IN_DIR, fio[0]);  //input
-    mcugear->savePinSetting(1, IO_MBED_P10, IO_REG_IN_DIR, fio[1]); //input
-    mcugear->savePinSetting(2, IO_MBED_P15, IO_REG_OUT_DIR, fio[2]);
-    mcugear->savePinSetting(3, IO_MBED_P16, IO_REG_OUT_DIR, fio[3]);
-    mcugear->savePinSetting(4, IO_MBED_P21, IO_REG_OUT_DIR, fio[4]);
-    mcugear->savePinSetting(5, IO_MBED_P22, IO_REG_OUT_DIR, fio[5]);
-    mcugear->savePinSetting(6, IO_MBED_P23, IO_REG_OUT_DIR, fio[6]);
-    mcugear->savePinSetting(7, IO_MBED_P24, IO_REG_OUT_DIR, fio[7]);
- 
-#endif
-
-#ifdef FS_KL25Z
-    //PTA1, PTA2, PTD4, PTA12, PTA4, PTA5, PTC8
-    mcugear->savePinSetting(0, IO_MBED_PTB0, IO_REG_IN_DIR, fio[0]);
-    mcugear->savePinSetting(1, IO_MBED_PTB1, IO_REG_IN_DIR, fio[1]);
-    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]);
- 
-#endif
- 
-#ifdef BOOST_MODE
-    mcugear->makeCircuit();
-#endif
-
-}
-
-
-
-//----------------------------------------------------------------------------------
-//Read from Multifunction module for 10bit AD mode
-//----------------------------------------------------------------------------------
-int read10bitAD(MCUGear *mcugear, int ch){
-    //Multi-function module
-    int setCh = 0;
-    int getData;
-    
- //   mcugear->connectModule();
-    
-    switch(ch){
-        case 1:
-            setCh = 3;
-            break;
-        case 2:
-            setCh = 1;
-            break;
-        case 3:
-            setCh = 2;
-            break;
-        
-        default:
-            return -1;
-    }
-    
-#ifdef LPC1768_mbed
-    spi.frequency(1000000); //1MHz
-    spi.format(16,0);
-    cs = 0;
-    spi.write(setCh);
-    cs = 1;
-    wait_us(1);
-    cs = 0;
-    getData = spi.write(0);
-    cs = 1;
-    wait_us(1);
-#endif
-        
-#ifdef FS_KL25Z
-    spi.frequency(2000000); //1MHz for KL25Z
-    cs = 0;
-    spi.write(0x00);
-    spi.write(setCh);
-    cs = 1;
-    wait_us(1);
-    cs = 0;
-    getData = spi.write(0);
-    getData = (getData<<8)+spi.write(0);
-    cs = 1;
-    wait_us(1);
-#endif
-
-
- //   mcugear->disconnectModule();
- //   wait_ms(1);
-    return getData;
-}
-
-#ifdef PWM_MODE
-//----------------------------------------------------------------------------------
-// Initialize PWM
-//----------------------------------------------------------------------------------
-void initPWM(MCUGear *mcugear, unsigned int Divider, unsigned int friquency, unsigned int duty0, unsigned int duty1, unsigned int duty2){
-
- //   mcugear->connectModule();
-
-#ifdef LPC1768_mbed
-    spi.frequency(1000000); //1MHz
-    spi.format(16,0);
-    cs = 0;
-    //spi.write(4800);//Divider
-    spi.write(Divider);//Divider
-    cs = 1;
-    wait_us(1);
-
-    cs = 0;
-    //spi.write(100);//friquency
-    spi.write(friquency);//friquency
-    cs = 1;
-    wait_us(1);
-
-    cs = 0;
-    spi.write(duty0);//Duty0
-    cs = 1;
-    wait_us(1);
-        
-    cs = 0;
-    spi.write(duty1);//Duty1
-    cs = 1;
-    wait_us(1);
-        
-    cs = 0;
-    spi.write(duty2);//Duty2
-    cs = 1;
-    wait_us(1);        
-#endif
-
-
-#ifdef FS_KL25Z
-    spi.frequency(2000000); //1MHz for KL25Z
-    cs = 0;
-    spi.write(Divider >> 8);//Divider
-    spi.write(0x00FF & Divider);//Divider
-    cs = 1;
-    wait_us(1);
-
-    cs = 0;
-    spi.write(friquency >> 8);//friquency
-    spi.write(0x00FF & friquency);//friquency
-    cs = 1;
-    wait_us(1);
-
-    cs = 0;
-    spi.write(duty0 >> 8);//Duty0
-    spi.write(0x00FF & duty0);//Duty0
-    cs = 1;
-    wait_us(1);
-        
-    cs = 0;
-    spi.write(duty1 >> 8);//Duty1
-    spi.write(0x00FF & duty1);//Duty1
-    cs = 1;
-    wait_us(1);
-        
-    cs = 0;
-    spi.write(duty2 >> 8);//Duty2
-    spi.write(0x00FF & duty2);//Duty2
-    cs = 1;
-    wait_us(1);        
-#endif
-
-//    mcugear->disconnectModule();
-}
-
-//----------------------------------------------------------------------------------
-// changing PWM friquency
-//----------------------------------------------------------------------------------
-void PWMfriq(MCUGear *mcugear, unsigned int friquency){
-
- //   mcugear->connectModule();
-#ifdef LPC1768_mbed
-    spi.frequency(1000000); //1MHz
-    spi.format(16,0);
-    cs = 0;
-    spi.write(friquency);//friquency
-    cs = 1;
-    wait_us(1);
-#endif
-
-#ifdef FS_KL25Z
-    spi.frequency(2000000); //1MHz for KL25Z
-    cs = 0;
-    spi.write(friquency >> 8);//Divider
-    spi.write(0x00FF & friquency);//Divider
-    cs = 1;
-    wait_us(1);
-#endif
-
- //   mcugear->disconnectModule();
-}
-
-void PWMDuty(MCUGear *mcugear, int ch, unsigned int Duty){
-
-    //data format
-    //15-12:setting(Header)
-    //  0 :stop PWM out
-    //  1 :start PWM out
-    //  2 :Frequency setting
-    //  3 :Duty0 setting
-    //  4 :Duty1 setting
-    //  5 :Duty2 setting
-    //  other :stop PWM out
-    //11-0:Data
-    
- //   mcugear->connectModule();
-    
-#ifdef LPC1768_mbed
-    spi.frequency(1000000); //1MHz
-    spi.format(16,0);
-    cs = 0;
-    switch (ch){
-        case 1:
-            spi.write(0x3000 + Duty);   //Duty0
-        case 2:
-            spi.write(0x4000 + Duty);   //Duty0
-        case 3:
-            spi.write(0x5000 + Duty);   //Duty0
-        default:
-            break;
-    }
-    
-    cs = 1;    
-#endif
-
-#ifdef FS_KL25Z
-    spi.frequency(2000000); //1MHz for KL25Z
-    cs = 0;
-    switch (ch){
-        case 1:
-            spi.write((0x3000 + Duty) >> 8);//Divider
-            spi.write(0x00FF & (0x3000 + Duty));//Divider
-        case 2:
-            spi.write((0x4000 + Duty) >> 8);//Divider
-            spi.write(0x00FF & (0x4000 + Duty));//Divider
-        case 3:
-            spi.write((0x5000 + Duty) >> 8);//Divider
-            spi.write(0x00FF & (0x5000 + Duty));//Divider
-        default:
-            break;
-    }
-    
-    cs = 1;    
-#endif
-
- //   mcugear->disconnectModule();
-
-}
-
-
-//----------------------------------------------------------------------------------
-// Stop PWM
-//----------------------------------------------------------------------------------
-void StopPWM(MCUGear *mcugear){
-
-//    mcugear->connectModule();
-    
-#ifdef LPC1768_mbed
-    spi.frequency(1000000); //1MHz
-    spi.format(16,0);
-    cs = 0;
-    spi.write(0x1000);//stop
-    cs = 1;
-#endif
-
-#ifdef FS_KL25Z
-    spi.frequency(2000000); //1MHz for KL25Z
-    cs = 0;
-    spi.write(0x10);//Duty1
-    spi.write(0x00);//Duty1
-    cs = 1;
-#endif
-
-//    mcugear->disconnectModule();
-}
-
-//----------------------------------------------------------------------------------
-// Start PWM
-//----------------------------------------------------------------------------------
-void StartPWM(MCUGear *mcugear){
-
- //   mcugear->connectModule();
-    
-#ifdef LPC1768_mbed
-    spi.frequency(1000000); //1MHz
-    spi.format(16,0);
-    cs = 0;
-    spi.write(0x6000);//start
-    cs = 1;
-#endif
-
-#ifdef FS_KL25Z
-    spi.frequency(2000000); //1MHz for KL25Z
-    cs = 0;
-    spi.write(0x60);//start
-    spi.write(0x00);//start
-    cs = 1;
-#endif
-
-//    mcugear->disconnectModule();
-}
-
-
-#endif
-
-//----------------------------------------------------------------------------------
-//IO setting for Multifunction module
-//----------------------------------------------------------------------------------
-void IOSimpleSPI(MCUGear *mcugear){
-    uint8_t fio[12];
-    mcugear->detect_module(fio);
-    
-#ifdef LPC1768_mbed
-    //miso(p6),mosi(p5),sck(p7),cs(p8)
-    mcugear->savePinSetting(0, IO_MBED_P6, IO_REG_IN_DIR, fio[0]);
-    mcugear->savePinSetting(1, IO_MBED_P5, IO_REG_OUT_DIR, fio[1]);
-    mcugear->savePinSetting(2, IO_MBED_P7, IO_REG_OUT_DIR, fio[2]);
-    mcugear->savePinSetting(3, IO_MBED_P8, IO_REG_OUT_DIR, fio[3]);
-#endif
-
-#ifdef FS_KL25Z
-    //miso(PTD3),mosi(PTD2),sck(PTD1),cs(PTD0)
-    mcugear->savePinSetting(0, IO_MBED_PTD3, IO_REG_IN_DIR, fio[0]);
-    mcugear->savePinSetting(1, IO_MBED_PTD2, IO_REG_OUT_DIR, fio[1]);
-    mcugear->savePinSetting(2, IO_MBED_PTD1, IO_REG_OUT_DIR, fio[2]);
-    mcugear->savePinSetting(3, IO_MBED_PTD0, IO_REG_OUT_DIR, fio[3]);
-#endif
-
-#ifdef BOOST_MODE
-    mcugear->makeCircuit();
-#endif
-}
-
-//end of sample functions----------------------------------------------------
-
-