detail : http://www.mcugear.com/
You need lib of mbed and textLCD.
mbed と textLCDのライブラリが必要です。
main.cpp
- Committer:
- Info
- Date:
- 2013-10-03
- Revision:
- 1:bbcba1a79e7b
File content as of revision 1:bbcba1a79e7b:
/* 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----------------------------------------------------