CQ出版 Interface 2014年10月号のC027(MAX7-Q)GPSテスト記事のプログラム。 CQ publishing Interface 2014.10 issue, C027 GPS(MAX-7Q) test program.

Dependencies:   C027 C027_Support mbed

Committer:
ntaka206
Date:
Mon Jul 28 15:51:53 2014 +0000
Revision:
3:002503ab7199
Parent:
0:1ababa0d0c42
C027_SupportTest_xively_location????????C027_Support?????????????; http://mbed.org/users/ntaka206/code/C027_Support/;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ntaka206 0:1ababa0d0c42 1 /* Platform source file, for the u-blox C27-C20/U20/G35
ntaka206 0:1ababa0d0c42 2 * mbed Internet of Things Starter Kit
ntaka206 0:1ababa0d0c42 3 * http://mbed.org/platforms/u-blox-C027/
ntaka206 0:1ababa0d0c42 4 *
ntaka206 0:1ababa0d0c42 5 */
ntaka206 0:1ababa0d0c42 6 #if defined(TARGET_UBLOX_C027)
ntaka206 0:1ababa0d0c42 7
ntaka206 0:1ababa0d0c42 8 #include "C027.h"
ntaka206 0:1ababa0d0c42 9
ntaka206 0:1ababa0d0c42 10 C027::C027() :
ntaka206 0:1ababa0d0c42 11 // Modem
ntaka206 0:1ababa0d0c42 12 mdmEn(MDMEN, 0), // LDO off
ntaka206 0:1ababa0d0c42 13 mdmRst(MDMRST, 1), // not reset
ntaka206 0:1ababa0d0c42 14 mdmPwrOn(MDMPWRON, 1), // Power On idle
ntaka206 0:1ababa0d0c42 15 mdmLvlOe(MDMLVLOE, 1), // GPIO/Serial velel shifters off
ntaka206 0:1ababa0d0c42 16 mdmILvlOe(MDMILVLOE, 0), // I2C Level shifter off
ntaka206 0:1ababa0d0c42 17 mdmUsbDet(MDMUSBDET, 0), // USB not used
ntaka206 0:1ababa0d0c42 18 // GPS
ntaka206 0:1ababa0d0c42 19 gpsEn(GPSEN, 0), // LDO off
ntaka206 0:1ababa0d0c42 20 gpsRst(GPSRST, 1) // not reset
ntaka206 0:1ababa0d0c42 21 {
ntaka206 0:1ababa0d0c42 22 DigitalOut led(LED, 0); // start with leds off
ntaka206 0:1ababa0d0c42 23 DigitalOut mdmRts(MDMRTS, 0); // make sure that rts is low
ntaka206 0:1ababa0d0c42 24
ntaka206 0:1ababa0d0c42 25 gpsIsEnabled = false;
ntaka206 0:1ababa0d0c42 26 mdmIsEnabled = false;
ntaka206 0:1ababa0d0c42 27 mdmUseUsb = false;
ntaka206 0:1ababa0d0c42 28 }
ntaka206 0:1ababa0d0c42 29
ntaka206 0:1ababa0d0c42 30 void C027::mdmPower(bool enable)
ntaka206 0:1ababa0d0c42 31 {
ntaka206 0:1ababa0d0c42 32 if (!mdmIsEnabled && enable) // enable modem
ntaka206 0:1ababa0d0c42 33 {
ntaka206 0:1ababa0d0c42 34 #ifdef C027_REVA
ntaka206 0:1ababa0d0c42 35 // we need the gps ldo for the level shifters of the modem
ntaka206 0:1ababa0d0c42 36 if (!gpsIsEnabled)
ntaka206 0:1ababa0d0c42 37 gpsEn = 1; // LDOEN(gps): 0=off -> 1=on
ntaka206 0:1ababa0d0c42 38 #endif
ntaka206 0:1ababa0d0c42 39 mdmLvlOe = 1; // LVLEN: 1=disabled
ntaka206 0:1ababa0d0c42 40 mdmILvlOe = 0; // ILVLEN: 0=disabled
ntaka206 0:1ababa0d0c42 41 // turn on the mode by enabling power with power on pin low and correct USB detect level
ntaka206 0:1ababa0d0c42 42 mdmUsbDet = mdmUseUsb ? 1 : 0; // USBDET: 0=disabled, 1=enabled
ntaka206 0:1ababa0d0c42 43 mdmPwrOn = 0; // PWRON: 0=turn on
ntaka206 0:1ababa0d0c42 44 mdmEn = 1; // LDOEN: 1=on
ntaka206 0:1ababa0d0c42 45 wait_ms( 1); // wait until supply switched off
ntaka206 0:1ababa0d0c42 46 // mnake sure reset is also off
ntaka206 0:1ababa0d0c42 47 mdmRst = 1; // RESET: 0=not reset
ntaka206 0:1ababa0d0c42 48 wait_ms(300); // power on sequence is triggered by keeping reset 50ms-300ms low
ntaka206 0:1ababa0d0c42 49 mdmPwrOn = 1; // PWRON: 0=turn on -> 1=idle
ntaka206 0:1ababa0d0c42 50 mdmIsEnabled = true;
ntaka206 0:1ababa0d0c42 51 // the interfaces of the modem should be fully ready after a certain period
ntaka206 0:1ababa0d0c42 52 // LISA-U200 5000ms
ntaka206 0:1ababa0d0c42 53 // SARA-G350 3000ms
ntaka206 0:1ababa0d0c42 54 // LISA-C200
ntaka206 0:1ababa0d0c42 55 wait_ms(1000);
ntaka206 0:1ababa0d0c42 56 // now we can safely enable the level shifters
ntaka206 0:1ababa0d0c42 57 mdmLvlOe = 0; // LVLEN: 0=enabled (uart/gpio)
ntaka206 0:1ababa0d0c42 58 if (gpsIsEnabled)
ntaka206 0:1ababa0d0c42 59 mdmILvlOe = 1; // ILVLEN: 1=enabled (i2c)
ntaka206 0:1ababa0d0c42 60 }
ntaka206 0:1ababa0d0c42 61 else if (mdmIsEnabled && !enable) // disable modem
ntaka206 0:1ababa0d0c42 62 {
ntaka206 0:1ababa0d0c42 63 mdmIsEnabled = false;
ntaka206 0:1ababa0d0c42 64 // diable all level shifters
ntaka206 0:1ababa0d0c42 65 mdmILvlOe = 0; // ILVLEN: 0=disabled (i2c)
ntaka206 0:1ababa0d0c42 66 mdmLvlOe = 1; // LVLEN: 1=disabled (uart/gpio)
ntaka206 0:1ababa0d0c42 67 mdmUsbDet = 0; // USBDET: 0=disabled
ntaka206 0:1ababa0d0c42 68 // initiate power off sequence by setting PwnOn low for >1s
ntaka206 0:1ababa0d0c42 69 mdmPwrOn = 0; // PWRON: 0=active
ntaka206 0:1ababa0d0c42 70 wait_ms(1000); // send to sleep
ntaka206 0:1ababa0d0c42 71 mdmPwrOn = 1; // PWRON: 0=active -> 1=idle
ntaka206 0:1ababa0d0c42 72 // now we can savely switch off the ldo
ntaka206 0:1ababa0d0c42 73 mdmEn = 0; // LDOEN: 1=on -> 0=off
ntaka206 0:1ababa0d0c42 74 #ifdef C027_REVA
ntaka206 0:1ababa0d0c42 75 // the gps ldo may no longer be needed level shifters of the modem
ntaka206 0:1ababa0d0c42 76 // so we switch it off if the gps is not enabled
ntaka206 0:1ababa0d0c42 77 if (!gpsIsEnabled)
ntaka206 0:1ababa0d0c42 78 gpsEn = 0; // LDOEN(gps): 1=on -> 0=off
ntaka206 0:1ababa0d0c42 79 #endif
ntaka206 0:1ababa0d0c42 80 }
ntaka206 0:1ababa0d0c42 81
ntaka206 0:1ababa0d0c42 82 }
ntaka206 0:1ababa0d0c42 83
ntaka206 0:1ababa0d0c42 84 void C027::mdmUsbEnable(bool enable)
ntaka206 0:1ababa0d0c42 85 {
ntaka206 0:1ababa0d0c42 86 mdmUseUsb = enable;
ntaka206 0:1ababa0d0c42 87 if (mdmIsEnabled)
ntaka206 0:1ababa0d0c42 88 mdmUsbDet = mdmUseUsb ? 1 : 0;
ntaka206 0:1ababa0d0c42 89 }
ntaka206 0:1ababa0d0c42 90
ntaka206 0:1ababa0d0c42 91 void C027::mdmReset(void)
ntaka206 0:1ababa0d0c42 92 {
ntaka206 0:1ababa0d0c42 93 if (mdmIsEnabled)
ntaka206 0:1ababa0d0c42 94 {
ntaka206 0:1ababa0d0c42 95 mdmRst = 0; // RESET: 0=reset
ntaka206 0:1ababa0d0c42 96 // power on sequence is triggered by reset low
ntaka206 0:1ababa0d0c42 97 // LISA-U200 50ms
ntaka206 0:1ababa0d0c42 98 // SARA-G350 50ms
ntaka206 0:1ababa0d0c42 99 // LISA-C200 300ms
ntaka206 0:1ababa0d0c42 100 wait_ms(300);
ntaka206 0:1ababa0d0c42 101 mdmRst = 1; // RESET: 0=reset -> 1=operating
ntaka206 0:1ababa0d0c42 102 }
ntaka206 0:1ababa0d0c42 103 }
ntaka206 0:1ababa0d0c42 104
ntaka206 0:1ababa0d0c42 105 void C027::mdmWakeup(void)
ntaka206 0:1ababa0d0c42 106 {
ntaka206 0:1ababa0d0c42 107 if (mdmIsEnabled)
ntaka206 0:1ababa0d0c42 108 {
ntaka206 0:1ababa0d0c42 109 mdmPwrOn = 0;
ntaka206 0:1ababa0d0c42 110 // wakeup the device by low pulse:
ntaka206 0:1ababa0d0c42 111 // LISA-U200 50-80us
ntaka206 0:1ababa0d0c42 112 // SARA-G350 5ms
ntaka206 0:1ababa0d0c42 113 // LISA-C200 300ms
ntaka206 0:1ababa0d0c42 114 wait_ms(300);
ntaka206 0:1ababa0d0c42 115 mdmPwrOn = 1;
ntaka206 0:1ababa0d0c42 116 }
ntaka206 0:1ababa0d0c42 117 }
ntaka206 0:1ababa0d0c42 118
ntaka206 0:1ababa0d0c42 119 void C027::mdmSleep(void)
ntaka206 0:1ababa0d0c42 120 {
ntaka206 0:1ababa0d0c42 121 if (mdmIsEnabled)
ntaka206 0:1ababa0d0c42 122 {
ntaka206 0:1ababa0d0c42 123 mdmPwrOn = 0;
ntaka206 0:1ababa0d0c42 124 // going to sleep is triggerd by low pulse:
ntaka206 0:1ababa0d0c42 125 // LISA-U200 1000ms
ntaka206 0:1ababa0d0c42 126 // SARA-G350 n/a
ntaka206 0:1ababa0d0c42 127 // LISA-C200 n/a
ntaka206 0:1ababa0d0c42 128 wait_ms(1000);
ntaka206 0:1ababa0d0c42 129 mdmPwrOn = 1;
ntaka206 0:1ababa0d0c42 130 }
ntaka206 0:1ababa0d0c42 131 }
ntaka206 0:1ababa0d0c42 132
ntaka206 0:1ababa0d0c42 133 void C027::gpsPower(bool enable)
ntaka206 0:1ababa0d0c42 134 {
ntaka206 0:1ababa0d0c42 135 if (!gpsIsEnabled && enable) // enable gps
ntaka206 0:1ababa0d0c42 136 {
ntaka206 0:1ababa0d0c42 137 // switch on power supply
ntaka206 0:1ababa0d0c42 138 gpsEn = 1; // LDOEN: 0=off -> 1=on
ntaka206 0:1ababa0d0c42 139 wait_ms(1); // wait until stable
ntaka206 0:1ababa0d0c42 140 // make sure we are not in reset
ntaka206 0:1ababa0d0c42 141 gpsRst = 1; // RESET: 0=reset -> 1=operating
ntaka206 0:1ababa0d0c42 142 gpsIsEnabled = true;
ntaka206 0:1ababa0d0c42 143 // the gps schould be fully ready after 50ms
ntaka206 0:1ababa0d0c42 144 if (mdmIsEnabled)
ntaka206 0:1ababa0d0c42 145 mdmILvlOe = 1; // ILVLEN: 0=enabled (i2c)
ntaka206 0:1ababa0d0c42 146 }
ntaka206 0:1ababa0d0c42 147 else if (gpsIsEnabled && !enable) // diasble gps
ntaka206 0:1ababa0d0c42 148 {
ntaka206 0:1ababa0d0c42 149 gpsIsEnabled = false;
ntaka206 0:1ababa0d0c42 150 mdmILvlOe = 0; // ILVLEN: 0=disabled (i2c)
ntaka206 0:1ababa0d0c42 151 #ifdef C027_REVA
ntaka206 0:1ababa0d0c42 152 // the gps ldo may have to remain enabled for the level shifters of the modem
ntaka206 0:1ababa0d0c42 153 if (!mdmIsEnabled)
ntaka206 0:1ababa0d0c42 154 gpsEn = 0; // LDOEN: 1=on -> 0=off
ntaka206 0:1ababa0d0c42 155 #else
ntaka206 0:1ababa0d0c42 156 gpsEn = 0; // LDOEN: 1=on -> 0=off
ntaka206 0:1ababa0d0c42 157 #endif
ntaka206 0:1ababa0d0c42 158 }
ntaka206 0:1ababa0d0c42 159 }
ntaka206 0:1ababa0d0c42 160
ntaka206 0:1ababa0d0c42 161 void C027::gpsReset(void)
ntaka206 0:1ababa0d0c42 162 {
ntaka206 0:1ababa0d0c42 163 if (gpsIsEnabled)
ntaka206 0:1ababa0d0c42 164 {
ntaka206 0:1ababa0d0c42 165 gpsRst = 0; // RESET: 0=reset,1=operating
ntaka206 0:1ababa0d0c42 166 wait_ms(1);
ntaka206 0:1ababa0d0c42 167 gpsRst = 1; // RESET: 1=operating,0=reset
ntaka206 0:1ababa0d0c42 168 }
ntaka206 0:1ababa0d0c42 169 }
ntaka206 0:1ababa0d0c42 170 #endif