Data logger: Sensors -> Barometer & temperature (BMP180), Humidity & temp. (RHT03), Sunshine (Cds): Display -> 20 chracters x 4 lines: Strage -> EEPROM (AT24C1024): Special functions -> Enter sleep mode to save current, reading the logging data via serial line

Dependencies:   AT24C1024 BMP180 M41T62 RHT03 TextLCD WakeUp mbed

Fork of LPC1114_barometer_with_data_logging by Kenji Arai

Please refer following Notebook.
http://mbed.org/users/kenjiArai/notebook/mbed-lpc1114fn28-data-logger/

Files at this revision

API Documentation at this revision

Comitter:
kenjiArai
Date:
Mon Aug 11 21:56:18 2014 +0000
Parent:
17:f81a6c9e5f7b
Child:
19:19dd6332d729
Commit message:
Data logger for enviromental information using BMP180, RHT03 and Cds // redesign a hardware circuit

Changed in this revision

WakeUp.lib Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
mon.cpp Show annotated file Show diff for this revision Revisions of this file
mon_hw.cpp Show diff for this revision Revisions of this file
mon_hw_config.h Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/WakeUp.lib	Mon Aug 11 21:56:18 2014 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/Sissors/code/WakeUp/#6bf547e1e62d
--- a/main.cpp	Thu Jul 03 23:07:13 2014 +0000
+++ b/main.cpp	Mon Aug 11 21:56:18 2014 +0000
@@ -6,7 +6,7 @@
  *  http://www.page.sannet.ne.jp/kenjia/index.html
  *  http://mbed.org/users/kenjiArai/
  *      Created: May       21st, 2014
- *      Revised: July       3rd, 2014
+ *      Revised: August    12th, 2014
  *
  * 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
@@ -17,7 +17,7 @@
 /*
  * Function
  *  measure atmospheric pressure and temprerature using Bosch BMP180 pressure sensor
- *  show measured data on AQM0802A LCD and logging such data in EEPROM
+ *  show measured data on a LCD and logging such data in I2C EEPROM
  */
 
 //  Include ---------------------------------------------------------------------------------------
@@ -26,20 +26,11 @@
 #include "RHT03.h"              // Std. lib./ Humidity sensor
 #include "TextLCD.h"            // Std. lib./ LCD control
 #include "m41t62_rtc.h"         // Own lib. / RTC control
+#include "WakeUp.h"
+#include "WakeInterruptIn.h"
 #include "dt_log.h"
 
 //  Definition ------------------------------------------------------------------------------------
-#define USE_MON                 1
-#define USE_BARO                0
-
-#define BOUND                   5       // chattering
-
-// Define cyclic period
-#define SHOW_LED                1       // Time for LED on x mS
-#define CNV_WAIT_T              25      // Waiting time for temp. conversion
-#define CNV_WAIT_P              50      // Waiting time for pressure conversion
-#define LOOP_WAIT               (1000 - (SHOW_LED + CNV_WAIT_T +CNV_WAIT_P))
-
 // ADC related definition
 #define VREF_VOLT               2.482   // TA76431F Vref real measued data
 #define R_FIX                   9930    // 10K ohm <- real measued data
@@ -47,34 +38,36 @@
 #define CDS_TBL_SIZE            13
 
 // Waiting time
-#define STATE_CHANGE_TIME       3
-#define TIME_INTERVAL           600     // 10 minutes
+//#define TIME_INTERVAL           600     // 10 minutes
+#define TIME_INTERVAL           60     // 1 minutes
 
 typedef enum {CDS = 0, VREF, VOL} ADC_Select;
 
+#define BAUD(x)                 pcx.baud(x)
+#define GETC(x)                 pcx.getc(x)
+#define PUTC(x)                 pcx.putc(x)
+#define PRINTF(...)             pcx.printf(__VA_ARGS__)
+#define READABLE(x)             pcx.readable(x)
+
 //  Object ----------------------------------------------------------------------------------------
-Timeout     to;                // wake-up from sleep()
+Serial      pcx(dp16,dp15);
 I2C         i2c(dp5,dp27);      // SDA, SCL
-DigitalOut  myled0(dp28);       // LED for Debug
-DigitalOut  myled1(dp14);       // Indicate state transition
+WakeInterruptIn event(dp25);    // wake-up from deepsleep mode by this interrupt
+DigitalOut  myled(dp14);        // LED for Debug
 DigitalOut  analog_pwr(dp6);    // VCC for analog interface (vol, cds and vref)
 DigitalOut  vref_pwr(dp4);      // VCC for Vref
-DigitalIn   sw_chng(dp1,PullUp);// SW for select
-DigitalIn   sw_mode(dp2,PullUp);// SW for Mode change
 AnalogIn    cds(dp11);          // Input / CDS data
 AnalogIn    vref(dp9);          // Input / Bandgap 2.5V
 AnalogIn    vol(dp10);          // Input / contrast volume
 RHT03       humtemp(dp26);      // RHT03 interface
 BMP180      bmp180(i2c);        // Bosch sensor
 M41T62      m41t62(i2c);        // STmicro RTC(M41T62)
-TextLCD_I2C_N i2clcd(&i2c, 0x7c, TextLCD::LCD8x2);  // LCD(Akizuki AQM0802A)
+TextLCD     lcd(dp1, dp28, dp17, dp18, dp2, dp13, TextLCD::LCD20x4); // rs, e, d4-d7
 
 //  Function prototypes ---------------------------------------------------------------------------
 extern int mon( void);          // only use for debug purpose
 
 //  RAM -------------------------------------------------------------------------------------------
-int flag;
-
 //  ADC
 float av_cds, av_vref, av_vol, cal_vcc;
 float r_cds, lux;
@@ -90,9 +83,6 @@
 float baro;
 float baro_temp;
 
-// EEPROM
-//extern xEeprom_ptr log_inf;
-
 //  ROM / Constant data ---------------------------------------------------------------------------
 // Cds GL5528 (Dark Resistance 1 Mohm type) SENBA OPTICAL & ELECTRONIC CO.,LTD.
 //      Table value referrence: http://homepage3.nifty.com/skomo/f35/hp35_20.htm
@@ -100,31 +90,15 @@
     {{50,21194},{100,8356},{200,3294},{400,1299},{800,512},{1600,202},{3200,79.6},{6400,31.4},
     {12800,12.4},{25600,4.88},{51200,1.92},{102400,0.758},{409600,0.118}};
 
-// LCD screen data
-enum Screen{
-    SCRN_Clear=0, SCRN_Opening, SCRN_Goto_mon, SCRN_Backto_normal
-};
-//                        Clear       Opening      Goto_mon     Backto_normal 
-char scrn_1st[4][10] = { "        ", "LPC1114F",  "GOTO MON",  "Back to"};
-char scrn_2nd[4][10] = { "        ", " JH1PJL ",  " 9600BPS",  " Normal"};
-
-// Disply on LCD
-enum Disp_num{
-    DSP_INIT=0, DSP_BARO, DSP_HUMD, DSP_LUX, DSP_TIME, DSP_LOG, DSP_RTURN
-};
+//                              12345678901234567890
+static char *const msg_clear = "                    ";
+static char *const msg_msg0  = "  mbed LPC1114FN28  ";
+static char *const msg_msg1  = "   by JH1PJL K.Arai ";
+static char *const msg_msg2  = "  Barometer Logger  ";
+static char *const msg_msg3  = "                    ";
+static char *const msg_msg4  = "Goto Monitor/9600bps";
+static char *const msg_msg5  = "  Back to main      ";
 
-// loop time = STATE_CHANGE_TIME * 20 = 3 * 20 = 60 sec (current)
-// rule 1) DSP_INIT is top position, 2)DSP_RTURN is end position, 3) Total number 20
-const uint8_t lcd_disp_tbl[20]
-//         1,        2,        3,        4,        5,
- = {DSP_INIT, DSP_BARO, DSP_BARO, DSP_BARO, DSP_TIME,
-//         6,        7,        8,        9,       10, 
-    DSP_TIME, DSP_HUMD, DSP_HUMD,  DSP_LUX,  DSP_LUX,
-//        11,       12,       13,       14,       15,
-    DSP_BARO, DSP_BARO, DSP_TIME, DSP_TIME, DSP_HUMD,
-//        16,      17,        18,       19,        20 
-    DSP_HUMD, DSP_LUX,   DSP_LUX,  DSP_LOG, DSP_RTURN};
- 
 //-------------------------------------------------------------------------------------------------
 //  Control Program
 //-------------------------------------------------------------------------------------------------
@@ -190,155 +164,129 @@
     }
 }
 
-void set_lcd_screen(int n){
-    i2clcd.locate(0, 0);
-    i2clcd.printf("%s", scrn_1st[n]);
-    i2clcd.locate(0, 1);
-    i2clcd.printf("%s", scrn_2nd[n]);
-}
-
 //-------------------------------------------------------------------------------------------------
 // Application program
 //-------------------------------------------------------------------------------------------------
-// Nothing is done but just wake-up from sleep condition
-void wakeup() {
-    flag = 1;
-    myled1 = !myled1;
-}
-
 // Measure pressure and show it on LCD
 void conv_and_disp(void) {
 tm t;
 time_t seconds = 0;
 time_t old_seconds = 0;
-uint32_t step = 0, dt;
-uint8_t num;
+uint32_t dt;
 
+    // Wakeup from deep sleep
+    WakeUp::calibrate();
+    // Initialize data
+    av_cds = 0;
+    av_vref = 0;
+    av_vol = 0;
+    humidity_temp = 0;
+    humidity = 0;
+    // RTC
+    m41t62.set_sq_wave(RTC_SQW_NONE);
+    m41t62.read_rtc_std(&t);
+    old_seconds = mktime(&t);
     while (true) {          // infinit loop for measure and display
-        // Call wakeup()function after specific time
-        to.attach(&wakeup, STATE_CHANGE_TIME);    // this is for wake-up
-//---- State Control ----
-        num = lcd_disp_tbl[step++];
-        switch (num){
-    //  ---------- Initialize data ----------------------------------------------------------------
-        case DSP_INIT:
-            av_cds = 0;
-            av_vref = 0;
-            av_vol = 0;
-            humidity_temp = 0;
-            humidity = 0;
-            // RTC
-            m41t62.set_sq_wave(RTC_SQW_NONE);
-            m41t62.read_rtc_std(&t);
-            old_seconds = mktime(&t); 
-            break;
-    //  ---------- Cds Sensor, Vref, Volume -------------------------------------------------------
-        case DSP_LUX:
-            // Power on / Analog sensor
-            analog_pwr = 1;
-            vref_pwr = 1;
-            wait(0.2);
-            adc_all_read();
-            // Power off / Analog sensor
-            analog_pwr = 0; 
-            // Normalize
-            adc_normalize(CDS);
-            adc_normalize(VREF);
-            adc_normalize(VOL);
-            set_lcd_screen(SCRN_Clear);
-            i2clcd.locate(0, 0);    // 1st line top
-            //             12345678
-            i2clcd.printf("L:%.1f", lux);
-            i2clcd.locate(0, 1);    // 2nd line top
-            i2clcd.printf("V:%.3f", cal_vcc);
-            break;
     //  ---------- Barometer Sensor / BMP180 ------------------------------------------------------
-        case DSP_BARO:
-            bmp180.normalize();
-            baro = bmp180.read_pressure();
-            baro_temp = bmp180.read_temperature();
-            set_lcd_screen(SCRN_Clear);
-            i2clcd.locate(0, 0);    // 1st line top
-            i2clcd.printf("P:%.1f", baro);
-            i2clcd.locate(0, 1);    // 2nd line top
-            i2clcd.printf("T:%\+-6.1f", baro_temp);
-            break;
+        bmp180.normalize();
+        baro = bmp180.read_pressure();
+        baro_temp = bmp180.read_temperature();
     //  ---------- Humidity Sensor / RHT03 --------------------------------------------------------
-        case DSP_HUMD:
-            hum_RHT03_read();       // Read Humidity data then avaraging
-            set_lcd_screen(SCRN_Clear);
-            i2clcd.locate(0, 0);    // 1st line top
-            i2clcd.printf("H:%.1f", humidity);
-            i2clcd.locate(0, 1);    // 2nd line top
-            i2clcd.printf("T:%\+-6.1f", humidity_temp);
-            break;
+        hum_RHT03_read();       // Read Humidity data then avaraging
+    //  ---------- Cds Sensor, Vref, Volume -------------------------------------------------------
+        wait(0.2);
+        adc_all_read();
+        // Normalize
+        adc_normalize(CDS);
+        adc_normalize(VREF);
+        adc_normalize(VOL);
     //  ---------- RTC ----------------------------------------------------------------------------
-        case DSP_TIME:
-            m41t62.read_rtc_std(&t);
-            seconds = mktime(&t);
-            set_lcd_screen(SCRN_Clear);
-            i2clcd.locate(0, 0);    // 1st line top
-            i2clcd.printf("%02d/%02d/%02d", t.tm_year % 100, t.tm_mon + 1, t.tm_mday);
-            i2clcd.locate(0, 1);    // 2nd line top
-            i2clcd.printf("%02d:%02d:%02d", t.tm_hour, t.tm_min, t.tm_sec);
-            break;
+        m41t62.read_rtc_std(&t);
+        seconds = mktime(&t);
     //  ---------- EEPROM Logging -----------------------------------------------------------------
-        case DSP_LOG:
-            if (seconds >= old_seconds + TIME_INTERVAL){
-                // Data Logging action
-                old_seconds += TIME_INTERVAL;
-                dtlog_data_pack();  // Get EEPROM resource
-                dtlog_one_write();  // Write data to EEPROM
-                dt = (uint32_t)dtlog_buf_occupation();
-                dt = (dt * 1000)/ BLK_NO;
-            }     
-            set_lcd_screen(SCRN_Clear);
-            i2clcd.locate(0, 0);    // 1st line top
-            i2clcd.printf("Logging");
-            i2clcd.locate(0, 1);    // 2nd line top
-            i2clcd.printf("%d.%01d%%", dt / 10, dt % 10);
-            break;
-    //  ---------- return (loop) ------------------------------------------------------------------
-        case DSP_RTURN:
-        default:
-            //  <State> State change 
-            step = 1;   // if something wrong, go to reset condition
+        if (seconds >= old_seconds + TIME_INTERVAL){
+            // Data Logging action
+            old_seconds += TIME_INTERVAL;
+            dtlog_data_pack();  // Get EEPROM resource
+            dtlog_one_write();  // Write data to EEPROM
         }
+        dt = (uint32_t)dtlog_buf_occupation();
+        dt = (dt * 1000)/ BLK_NO;
+    //  ---------- Display all data on a LCD ------------------------------------------------------      
+        //  Printf:: Barometer Sensor / BMP180
+        lcd.locate(0, 0);    // 1st line top
+        lcd.printf("%s", msg_clear);
+        lcd.locate(0, 0);    // 1st line top
+        lcd.printf("%6.1fhPa    %\+-5.1f%cC", baro, baro_temp, 0xdf);
+        //  Printf:: Humidity Sensor / RHT03 + Vcc
+        lcd.locate(0, 1);    // 2nd line top
+        lcd.printf("%s", msg_clear);
+        lcd.locate(0, 1);    // 2nd line top
+#if 0
+        lcd.printf("%4.1f%%(%\+-4.1f%cC) %.2fV", humidity, humidity_temp, 0xdf, cal_vcc);
+#else
+        lcd.printf("%.2fV  %4.1f%% %\+-4.1f%cC", cal_vcc, humidity, humidity_temp, 0xdf);
+#endif
+        //  Printf:: Cds Sensor + EEPROM Logging
+        lcd.locate(0, 2);    // 3rd line top
+        lcd.printf("%s", msg_clear);
+        lcd.locate(0, 2);    // 3rd line top
+        if (dt <= 998){
+            lcd.printf("%8.1fLx Log:%2d.%01d%%", lux,  dt / 10, dt % 10);
+        } else {
+            lcd.printf("%8.1fLx Log: full", lux);
+        }
+        //  Printf:: RTC (Date & Time)
+        lcd.locate(0, 3);    // 4th line top
+        lcd.printf("%s", msg_clear);
+        lcd.locate(0, 3);    // 4th line top
+#if 0
+        lcd.printf("20%02d/%02d/%02d  %02d:%02d:%02d",
+                    t.tm_year % 100, t.tm_mon + 1, t.tm_mday, t.tm_hour, t.tm_min, t.tm_sec);
+#else
+        lcd.printf("20%02d/%02d/%02d %02d:%02d PJL",
+                    t.tm_year % 100, t.tm_mon + 1, t.tm_mday, t.tm_hour, t.tm_min);
+#endif
     //  ---------- back to top --------------------------------------------------------------------
-        myled0 = !myled0;
-        while (flag == 0){ wait(0.01);}
-        wait(0.1);
-        myled1 = !myled1;
-        flag = 0;
+        myled = 1;
+        wait(0.001);
+        myled = 0;
+        // Power off - Analog sensor
+        analog_pwr = 0;
+        vref_pwr = 0;
+        // Wait with sleep
+        WakeUp::set(10);
+        wait(0.001);    // looks important for works well
+        myled = 1;
+        wait(0.001);
+        myled = 0;
+        // Power on - Analog sensor
+        analog_pwr = 1;
+        vref_pwr = 1;
     }
 }
 
 // Application program starts here
 int main() {
-    flag = 0;
-    i2clcd.setContrast(25);
-    set_lcd_screen(SCRN_Opening);
-    if (sw_chng == 0){  // SW ON
+    // Initial screen
+    lcd.locate(0, 0);
+    lcd.printf(msg_msg0);
+    lcd.printf(msg_msg1);
+    lcd.printf(msg_msg2);
+    lcd.printf(msg_msg3);
+    myled = 1;
+    wait(3);    // show initial screen and wait serial input
+    myled = 0;
     //--  Enter Monitor Mode  --
-        myled1 = 1;     wait(0.5);
-        myled1 = 0;     wait(0.5);
-        myled1 = 1;     wait(0.5);
-        if (sw_chng == 0){  // Still SW ON
-            myled1 = 0;     wait(0.5);
-            myled1 = 1;     wait(0.5);
-            if (sw_mode == 0){ // SW ON
-                set_lcd_screen(SCRN_Clear);
-                set_lcd_screen(SCRN_Goto_mon);
-                myled1 = 0;
-                mon();          // mon.cpp
-            }
-            set_lcd_screen(SCRN_Clear);
-            set_lcd_screen(SCRN_Backto_normal);
-        }
+    if (READABLE()){
+        lcd.locate(0, 0);
+        lcd.printf(msg_msg4);
+        mon();          // mon.cpp
+        lcd.locate(0, 0);
+        lcd.printf(msg_msg5);
+        wait(0.5);
     }
     //--  Enter Normal Mode  --
-    myled0 = 1;
-    myled1 = 0;
     while (true) {  // Start main program
         conv_and_disp();
     }
--- a/mbed.bld	Thu Jul 03 23:07:13 2014 +0000
+++ b/mbed.bld	Mon Aug 11 21:56:18 2014 +0000
@@ -1,1 +1,1 @@
-http://mbed.org/users/mbed_official/code/mbed/builds/024bf7f99721
\ No newline at end of file
+http://mbed.org/users/mbed_official/code/mbed/builds/6213f644d804
\ No newline at end of file
--- a/mon.cpp	Thu Jul 03 23:07:13 2014 +0000
+++ b/mon.cpp	Mon Aug 11 21:56:18 2014 +0000
@@ -7,7 +7,7 @@
  *  http://mbed.org/users/kenjiArai/
  *      Created:  May  	    15th, 2010
  *		Spareted: June		25th, 2014		mon() & mon_hw()
- *      Revised: July        3rd, 2014
+ *      Revised:  August    12th, 2014
  *
  * 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
@@ -224,7 +224,6 @@
         inf.buf_pointer[i]  = at24c1024.read((int)addr);
         wait(0.002);
     }
-// PRINTF("head %d, Tail %d\r\n", inf.log_inf.head, inf.log_inf.tail);
 }
 
 //  Write one packet
@@ -238,7 +237,6 @@
         inf.buf_pointer[i]  = at24c1024.read((int)addr);
         wait(0.002);
     }
- //PRINTF("head %d, Tail %d\r\n", inf.log_inf.head, inf.log_inf.tail);
     // Write data_pack[] into  EEPROM
     for (i = 0; i < PKT_SIZE; i++){
         addr = (uint8_t *)(EEP_TOP + (inf.log_inf.tail * PTR_SIZE) + i); 
@@ -401,7 +399,9 @@
     PRINTF(mon_msg);						put_rn();
     PRINTF("d - Data logger");				put_rn();
     PRINTF("t - Check and set RTC");		put_rn();
+#if 0
     PRINTF("x - Goto HW monitor");			put_rn();
+#endif
     PRINTF("q - Return to main");			put_rn();
 }
 
@@ -558,6 +558,7 @@
 			    PRINTF("q - Exit DL mode");				put_rn();  
 				break;
 			default:
+				put_r();
 				PUTC('?');
 				put_rn();
 				break;
@@ -601,6 +602,7 @@
         	put_r(); 
             msg_hlp();                 
             break;
+#if 0
     //---------------------------------------------------------------------------------
     //  Go to special command
     //---------------------------------------------------------------------------------
@@ -608,6 +610,7 @@
             mon_hw();
             PRINTF("->Came back monitor\r\n");            
             break;
+#endif
     //---------------------------------------------------------------------------------
     //  Go back to main()
     //---------------------------------------------------------------------------------
--- a/mon_hw.cpp	Thu Jul 03 23:07:13 2014 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1806 +0,0 @@
-/*
- * mbed Application program for the mbed LPC1114FN28
- * Monitor program Ver.2 for only LPC1114FN28 
- *
- *  Copyright (c) 2010-2014 Kenji Arai / JH1PJL
- *  http://www.page.sannet.ne.jp/kenjia/index.html
- *  http://mbed.org/users/kenjiArai/
- *      Created:  May  	    15th, 2010
- *		Spareted: June		25th, 2014		mon() & mon_hw()
- *      Revised: July       3rd, 2014
- *
- * 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.
- */
-/*
- * Function
- *  Show Memory contents, Digital port, Analog input port, CPU clock and others in the mbed board
- *      Connection
- *          uart            USB Vertual com
- */
-
-//  Include ---------------------------------------------------------------------------------------
-#include "mbed.h"
-#include "AT24C1024.h"		// Own lib. / EEPROM control
-#include "mon_hw_config.h"
-
-//  Object ----------------------------------------------------------------------------------------
-extern Serial pcx(dp16,dp15);
-extern I2C    xxi2c(dp5,dp27);			// SDA, SCL
-extern AT24C1024   xat24c1024(xxi2c);	// Atmel 1Mbit EE-PROM
-
-//  Definition ------------------------------------------------------------------------------------
-// Define clocks
-#define __XTAL				(12000000UL)    // Oscillator frequency
-#define __SYS_OSC_CLK		(    __XTAL)    // Main oscillator frequency
-#define __IRC_OSC_CLK		(12000000UL)    // Internal RC oscillator frequency
-
-// Range check status
-#define ERR_NOTHING         0
-#define ERR_MODIFY_SIZ      1
-#define ERR_OUT_OF_RANGE    2
-
-// Reg. Size
-#define SIZE8				32
-#define SIZE16				16
-#define SIZE_FULL			32
-#define SIZE_X				32
-
-// IO Cinfig
-#define IO_ALL				0
-#define IO_I2C				1
-
-#define BAUD(x)         	pcx.baud(x)
-#define GETC(x)         	pcx.getc(x)
-#define PUTC(x)				pcx.putc(x)
-#define PRINTF(...)     	pcx.printf(__VA_ARGS__)
-#define READABLE(x)     	pcx.readable(x)
-
-typedef struct {
-    unsigned long mstr;
-    unsigned long msiz;
-    unsigned long mtmp;
-    unsigned long mold;
-    unsigned char mflg;
-    unsigned char mbhw;
-} MEMO;
-
-#define DW_CHAR				sizeof(char)
-#define DW_SHORT			sizeof(short)
-#define DW_LONG				sizeof(long)
-
-typedef unsigned long	DWORD;
-typedef unsigned short	WORD;
-typedef unsigned char	BYTE;
-typedef unsigned int	UINT;
-
-//  RAM -------------------------------------------------------------------------------------------
-//  Memory management
-unsigned long SystemFrequency;
-
-#if USE_MEM
-//  RAM -------------------------------------------------------------------------------------------
-static MEMO mem;
-
-//  ROM / Constant data ---------------------------------------------------------------------------
-//  Memory range data
-const uint32_t mem_range[][2] = {          // Memory access range
-    { 0x00000000, 0x00007fff },            // On-chip non-volatile memory     //32KB Flash memory
-    { 0x10000000, 0x10000fff },            // On-chip SRAM                    //4KB local RAM
-    { 0x1fff0000, 0x1fff3fff },            // Boot ROM                        //16KB Boot ROM
-    { 0x40000000, 0x4007ffff },            // IO area
-    { 0x50000000, 0x501fffff }             // IO area
-};
-
-static char *const rmsg0 = "FLASH    ";
-static char *const rmsg1 = "SRAM     ";
-static char *const rmsg2 = "BOOT ROM ";
-static char *const rmsg3 = "IO       ";
-static char *const rmsg4 = "IO       ";
-#endif  // USE_MEM
-
-#if USE_EEP
-//  RAM -------------------------------------------------------------------------------------------
-static MEMO eepmem;
-
-//  ROM / Constant data ---------------------------------------------------------------------------
-const uint32_t eepmem_range[2] = { /* Memory access range */
-	0x00000, 0x1ffff 	/* EEPROM 1Mbits 128Kbytes */
-};
-#endif
-
-//  ROM / Constant data ---------------------------------------------------------------------------
-static char *const mon_msg_hw = "HW monitor only for mbed LPC1114FN28";
-
-//  Function prototypes ---------------------------------------------------------------------------
-extern char linebuf[];
-extern int buf_size;
-
-extern void put_rn ( void );
-extern void put_r ( void );
-extern void put_lin ( void );
-extern void put_spc( uint8_t n);
-extern void get_line (char *buff, int len);
-extern int xatoi (char **str, unsigned long *res);
-
-//-------------------------------------------------------------------------------------------------
-//  Control Program
-//-------------------------------------------------------------------------------------------------
-//  Help Massage
-void msg_hlp_hw (void){
-    PRINTF(mon_msg_hw);
-    put_rn();
-#if USE_MEM
-    PRINTF("m  - Entry Memory Mode");
-    put_rn();
-    PRINTF("m>? -> Help ");
-    put_rn();
-#endif   // USE_MEM
-#if USE_EEP
-    PRINTF("e -Enter EEPROM Memory Mode ");
-    put_rn();
-    PRINTF("e>? -> Help ");
-    put_rn();
-#endif   // USE_EEP
-#if USE_REG_SPI_UART
-    PRINTF("r  - Show SPI & UART Reg.");
-    put_rn();
-    PRINTF("r>? -> Help ");
-    put_rn();
-#endif   // USE_REG_SPI_UART
-#if USE_PORT
-    PRINTF("p  - Show port configration");
-    put_rn();
-#endif   // USE_PORT
-#if USE_REG_I2C
-    PRINTF("i  - Show I2C Reg.");
-    put_rn();
-#endif   // USE_REG_I2C
-#if USE_SYS
-    PRINTF("sf - System Clock");
-    put_rn();
-    PRINTF("sc - System / CPU information");
-    put_rn();
-#endif   // USE_SYS
-#if USE_RPT
-    PRINTF("/    [a],[p] commands every 1 sec  Exit =hit any key (not ENTER key) ");
-    put_rn();
-#endif
-#if DEBUG
-    PRINTF("x     Special command for Debug ");
-    put_rn();
-#endif   // DEBUG
-    PRINTF("q  - Quit (back to called routine)");
-    put_rn();
-}
-
-// No function
-static void not_yet_impliment( void ){
-	PRINTF( "Not implimented yet" );
-	put_rn();
-}
-
-char *const imsg2 = "-->Control Reg.";
-char *const imsg3 = "-->Status Reg.";
-char *const imsg4 = "-->Data Reg.";
-//static char *const imsg5 = "-->Baud rate Reg.";
-//static char *const imsg6 = "-->Own address Reg.";
-char *const imsg7 = "-->Clock control Reg.";
-//static char *const imsg8 = "-->TRISE Reg.";
-
-static char *const io_port_name0 = "PIO0_";
-static char *const io_port_name1 = "PIO1_";
-static char *const iomsg0 = "Func->select ";
-static char *const iomsg1 = "IO";
-static char *const iomsg2 = "Reserved";
-static char *const iomsg30 = "B0_MAT";
-static char *const iomsg31 = "B1_MAT";
-static char *const iomsg4 = "Std/F-md I2C";
-static char *const iomsg5 = "func. R";
-static char *const iomsg6 = "D-Mode";
-static char *const iomsg7 = "A-Mode";
-
-//  Show 16bit register contents
-void reg_print(uint16_t size, uint16_t reg){
-uint16_t i, j, k, n;
-
-    if (size == 8){
-        PRINTF(" 7, 6, 5, 4, 3, 2, 1, 0");
-        put_rn();
-        i = 8;
-        n = 0x80;
-    } else if (size == 16){
-        PRINTF( "15,14,13,12,11,10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0" );
-        put_rn();
-        i = 16;
-        n = 0x8000;
-    } else {
-        PRINTF("0x%08x", reg);
-        return;
-    }
-    PUTC(' ');
-    for (; i>0; i--){
-        k = n >> (size-i);
-        j = reg & k;
-        if (j){
-            PUTC('1');
-        } else {
-            PUTC('0');
-        }
-        PUTC(' ');
-        PUTC(' ');
-    }
-    PRINTF("  (0x%04x)", reg);
-}
-
-#if USE_PORT
-void io_mode(uint32_t reg){
-    PRINTF("MODE->");
-    switch (reg){
-    case 0:
-        PRINTF("Inactive");
-        break;
-    case 1:
-        PRINTF("P-DWN");
-        break;
-    case 2:
-        PRINTF("P-UP");
-        break;
-    case 3:
-        PRINTF("Repeater");
-        break;
-    }
-}
-
-void io_hys(uint32_t reg){
-    PRINTF("HIS->");
-    switch (reg){
-    case 0:
-        PRINTF("Dis");
-        break;
-    case 1:
-        PRINTF("Ena");
-        break;
-    }
-}
-
-void io_od(uint32_t reg){
-    PRINTF("OD->");
-    switch (reg){
-    case 0:
-        PRINTF("no OD");
-        break;
-    case 1:
-        PRINTF("OD");
-        break;
-    }
-}
-
-void io_mode_hys_od(uint32_t reg){
-    io_mode ((reg >>  3) & 0x3);
-    put_lin();
-    io_hys (( reg >>  5) & 0x1); 
-    put_lin();
-    io_od (( reg >> 10) & 0x1);
-}
-
-// I/O Config IO0_x
-void io_config0(void){
-uint32_t r0;
-
-    // P0_0
-    r0 = LPC_IOCON->RESET_PIO0_0;
-    PRINTF("RESET_%s0(dp23)", io_port_name0);
-    put_spc(1);
-    reg_print( SIZE_X, r0 );
-    put_spc(2);
-    PRINTF( iomsg0 );
-    if ((r0 & 0x7) == 0){	PRINTF("RESET");
-    } else {				PRINTF( iomsg1 );    }
-    put_lin();
-    io_mode_hys_od( r0 );
-    put_rn();
-    // P0_1
-    r0 = LPC_IOCON->PIO0_1;
-    PRINTF("%s1(dp24)", io_port_name0);
-    put_spc(3);
-    reg_print( SIZE_X, r0 );
-    put_spc(2);
-    PRINTF( iomsg0 );
-    switch (r0 & 0x7){
-    case 0:	PRINTF(iomsg1);				break;
-    case 1:	PRINTF("CLKOUT");			break;
-    case 2:	PRINTF("32%s2", iomsg30);	break;
-    }
-    put_lin();
-    io_mode_hys_od(r0);
-    put_rn(); 
-    // P0_2
-    r0 = LPC_IOCON->PIO0_2;
-    PRINTF("%s2(dp25)",io_port_name0);
-    put_spc(3);
-    reg_print(SIZE_X, r0);
-    put_spc(2);
-    PRINTF(iomsg0);
-    switch (r0 & 0x7){
-    case 0:	PRINTF(iomsg1);				break;
-    case 1:	PRINTF("SSEL0");			break;
-    case 2:	PRINTF("16B0_CAP0");		break;
-    }
-    put_lin();
-    io_mode_hys_od(r0);
-    put_rn();
-    // P0_3
-    r0 = LPC_IOCON->PIO0_3;
-    PRINTF("%s3(dp26)",io_port_name0);
-    put_spc(3);
-    reg_print(SIZE_X, r0);
-    put_spc(2);
-    PRINTF(iomsg0);
-    switch (r0 & 0x7){
-    case 0:	PRINTF(iomsg1);				break;
-    }
-    put_lin();
-    io_mode_hys_od(r0);
-    put_rn();
-    // P0_4
-    r0 = LPC_IOCON->PIO0_4;
-    PRINTF("%s4(dp27)",io_port_name0);
-    put_spc(3);
-    reg_print(SIZE_X, r0);
-    put_spc(2);
-    PRINTF(iomsg0);
-    switch (r0 & 0x7){
-    case 0:	PRINTF(iomsg1);				break;
-    case 1:	PRINTF("SCL");				break;
-    }
-    put_lin();
-    switch (( r0 >> 8 ) & 0x3){
-    case 0:	PRINTF(iomsg4);				break;
-    case 1:	PRINTF(iomsg1);				break;
-    case 2:	PRINTF("Fast md");			break;
-    case 3:	PRINTF(iomsg2 ;				break;
-    }
-    put_rn();
-    // P0_5
-    r0 = LPC_IOCON->PIO0_5;
-    PRINTF("%s5(dp5)",io_port_name0);
-    put_spc(4);
-    reg_print(SIZE_X, r0);
-    put_spc(2);
-    PRINTF(iomsg0);
-    switch (r0 & 0x7){
-    case 0:	PRINTF(iomsg1);				break;
-    case 1:	PRINTF("SDA");				break;
-    }
-    put_lin();
-    switch ( ( r0 >> 8 ) & 0x3 ){
-    case 0:	PRINTF(iomsg4);	        	break;
-    case 1:	PRINTF(iomsg1);	        	break;
-    case 2:	PRINTF("Fast md");	        break;
-    case 3:	PRINTF(iomsg2);	        	break;
-    }
-    put_rn();
-    // P0_6
-    r0 = LPC_IOCON->PIO0_6;
-    PRINTF("%s6(dp6)", io_port_name0);
-    put_spc(4);
-    reg_print(SIZE_X, r0);
-    put_spc(2);
-    PRINTF(iomsg0);
-    switch (r0 & 0x7){
-    case 0:	PRINTF(iomsg1);	        	break;
-    case 1:	PRINTF(iomsg2);	        	break;
-    case 2:	PRINTF("SCK0");		        break;
-    }
-    put_lin();
-    io_mode_hys_od(r0);
-    put_rn();    
-    // P0_7
-    r0 = LPC_IOCON->PIO0_7;
-    PRINTF("%s7(dp28)", io_port_name0);
-    put_spc(3);
-    reg_print(SIZE_X, r0);
-    put_spc(2);
-    PRINTF(iomsg0 ;
-    switch (r0 & 0x7){
-    case 0:	PRINTF(iomsg1);	        	break;
-    case 1:	PRINTF("CTS");		        break;
-    }
-    put_lin();
-    io_mode_hys_od(r0);
-    put_rn(); 
-    // P0_8
-    r0 = LPC_IOCON->PIO0_8;
-    PRINTF("%s8(dp1)", io_port_name0);
-    put_spc(4);
-    reg_print(SIZE_X, r0);
-    put_spc(2);
-    PRINTF(iomsg0);
-    switch (r0 & 0x7){
-    case 0:	PRINTF(iomsg1);	        	break;
-    case 1:	PRINTF("MISO0");	        break;
-    case 2:	PRINTF("16%s0", iomsg30);	break;
-    }
-    put_lin();
-    io_mode_hys_od(r0);
-    put_rn();
-    // P0_9
-    r0 = LPC_IOCON->PIO0_9;
-    PRINTF("%s9(dp2)", io_port_name0);
-    put_spc(4);
-    reg_print(SIZE_X, r0);
-    put_spc(2);
-    PRINTF(iomsg0);
-    switch (r0 & 0x7){
-    case 0:	PRINTF(iomsg1);	        	break;
-    case 1:	PRINTF("MOSI0");	        break;
-    case 2:	PRINTF("16%s1", iomsg30);	break;
-    }
-    put_lin();
-    io_mode_hys_od(r0);
-    put_rn();
-    // P0_10
-    r0 = LPC_IOCON->SWCLK_PIO0_10;
-    PRINTF("SWCLK_%s10(dp3)", io_port_name0);
-    put_spc(1);
-    reg_print(SIZE_X, r0);
-    put_spc(2);
-    PRINTF(iomsg0);
-    switch (r0 & 0x7 {
-    case 0:	PRINTF("SWCLK");	        break;
-    case 1:	PRINTF(iomsg1);	        	break;
-    case 2:	PRINTF("SCK0");		        break;
-    case 3:	PRINTF("16%s2", iomsg30);	break;
-    }
-    put_lin();
-    io_mode_hys_od(r0);
-    put_rn();
-    // P0_11
-    r0 = LPC_IOCON->R_PIO0_11;
-    PRINTF("R_%s11(dp4)", io_port_name0);
-    put_spc(1);
-    reg_print(SIZE_X, r0);
-    put_spc(2);
-    PRINTF( iomsg0 );
-    switch ( r0 & 0x7 ){
-    case 0:	PRINTF(iomsg5);	        	break;
-    case 1:	PRINTF(iomsg1);	        	break;
-    case 2:	PRINTF("AD0");		        break;
-    case 3:	PRINTF("32%s3", iomsg30);	break;
-    }
-    put_lin();
-    io_mode_hys_od(r0);
-    if ( r0 & 0x80 ){	PRINTF(", %s", iomsg6);
-    } else {			PRINTF(", %s", iomsg7);
-    } 
-    put_rn();
-}
-
-// I/O Config IO1_x
-void io_config1(void){
-uint32_t r0;
-
-    // P1_0
-    r0 = LPC_IOCON->R_PIO1_0;
-    PRINTF("R_%s0(dp9)", io_port_name1);
-    put_spc(2);
-    reg_print(SIZE_X, r0);
-    put_spc(2);
-    PRINTF( iomsg0 );
-    switch ( r0 & 0x7 ){
-    case 0:	PRINTF(iomsg5);				break;
-    case 1:	PRINTF(iomsg1);				break;
-    case 2:	PRINTF("AD1");				break;
-    case 3:	PRINTF("32B1_CAP0");		break;
-    }
-    io_mode_hys_od(r0);
-    if (r0 & 0x80){		PRINTF(", %s", iomsg6);
-    } else {			PRINTF(", %s", iomsg7);
-    } 
-    put_rn();
-    // P1_1
-    r0 = LPC_IOCON->R_PIO1_1;
-    PRINTF("R_%s1(dp10)", io_port_name1);
-    put_spc(1);
-    reg_print(SIZE_X, r0);
-    put_spc(2);
-    PRINTF(iomsg0);
-    switch (r0 & 0x7){
-    case 0:	PRINTF(iomsg5);	        	break;
-    case 1:	PRINTF(iomsg1);	        	break;
-    case 2:	PRINTF("AD2");		        break;
-    case 3:	PRINTF("32%s0", iomsg31);	break;
-    }
-    io_mode_hys_od(r0);
-    if (r0 & 0x80){		PRINTF(", %s", iomsg6);
-    } else {			PRINTF(", %s", iomsg7);
-    } 
-    put_rn(); 
-    // P1_2
-    r0 = LPC_IOCON->R_PIO1_2;
-    PRINTF("R_%s2(dp11)", io_port_name1);
-    put_spc(1);
-    reg_print(SIZE_X, r0);
-    put_spc(2);
-    PRINTF(iomsg0);
-    switch (r0 & 0x7){
-    case 0:	PRINTF(iomsg5);	        	break;
-    case 1:	PRINTF(iomsg1);	        	break;
-    case 2:	PRINTF("AD3");		        break;
-    case 3:	PRINTF("32%s1", iomsg31);	break;
-    }
-    io_mode_hys_od( r0 );
-    if (r0 & 0x80){		PRINTF(", %s", iomsg6);
-    } else {			PRINTF(", %s", iomsg7);
-    }   
-    put_rn(); 
-    // P1_3
-    r0 = LPC_IOCON->SWDIO_PIO1_3;
-    PRINTF("SWDIO_%s3(dp12)",io_port_name1);
-    put_spc(1);
-    reg_print(SIZE_X, r0);
-    put_spc(3);
-    PRINTF(iomsg0);
-    switch (r0 & 0x7){
-    case 0:	PRINTF("SWDIO");	        break;
-    case 1:	PRINTF(iomsg1);	        	break;
-    case 2:	PRINTF("AD4");		        break;
-    case 3:	PRINTF("32%s2", iomsg31);	break;
-    }
-    io_mode_hys_od(r0);
-    if (r0 & 0x80){		PRINTF(", %s", iomsg6);
-    } else {			PRINTF(", %s", iomsg7);
-    }   
-    put_rn();
-    // P1_4
-    r0 = LPC_IOCON->PIO1_4;
-    PRINTF("%s4(dp13)",io_port_name1);
-    put_spc(3);
-    reg_print(SIZE_X, r0);
-    put_spc(2);
-    PRINTF( iomsg0 );
-    switch (r0 & 0x7){
-    case 0:	PRINTF(iomsg1);				break;
-    case 1:	PRINTF("AD5");				break;
-    case 2:	PRINTF("32%s3", iomsg31);	break;
-    }
-    put_lin();
-    io_mode_hys_od(r0);
-	put_rn();
-    // P1_5
-    r0 = LPC_IOCON->PIO1_5;
-    PRINTF("%s5(dp14)",io_port_name1);
-    put_spc(3);
-    reg_print(SIZE_X, r0);
-    put_spc(2);
-    PRINTF(iomsg0);
-    switch (r0 & 0x7){
-    case 0:	PRINTF(iomsg1);				break;
-    case 1:	PRINTF("RTS");				break;
-    case 2:	PRINTF("32B0_CAP0");		break;
-    }
-    put_lin();
-    io_mode_hys_od(r0);
-    put_rn();
-    // P1_6
-    r0 = LPC_IOCON->PIO1_6;
-    PRINTF("%s6(dp15)", io_port_name1);
-    put_spc(3);
-    reg_print(SIZE_X, r0);
-    put_spc(2);
-    PRINTF(iomsg0);
-    switch (r0 & 0x7){
-    case 0:	PRINTF(iomsg1);				break;
-    case 1:	PRINTF("RXD");				break;
-    case 2:	PRINTF( "32%s0", iomsg30 );	break;
-    }
-    put_lin();
-    io_mode_hys_od( r0 );
-    put_rn();  
-    // P1_7
-    r0 = LPC_IOCON->PIO1_7;
-    PRINTF("%s7(dp16)", io_port_name1);
-    put_spc(3);
-    reg_print(SIZE_X, r0);
-    put_spc(2);
-    PRINTF(iomsg0);
-    switch (r0 & 0x7){
-    case 0:	PRINTF(iomsg1);				break;
-    case 1:	PRINTF("TXD");				break;
-    case 2:	PRINTF("32%s1", iomsg30);	break;
-    }
-    put_lin();
-    io_mode_hys_od(r0);
-    put_rn();
-    // P1_8
-    r0 = LPC_IOCON->PIO1_8;
-    PRINTF("%s8(dp17)", io_port_name1);
-    put_spc(3);
-    reg_print(SIZE_X, r0);
-    put_spc(2);
-    PRINTF(iomsg0);
-    switch (r0 & 0x7){
-    case 0:	PRINTF(iomsg1);				break;
-    case 1:	PRINTF("32%s1", iomsg30);	break;
-    }
-    put_lin();
-    io_mode_hys_od(r0);
-    put_rn();
-    // P1_9
-    r0 = LPC_IOCON->PIO1_9;
-    PRINTF("%s9(dp18)", io_port_name1);
-    put_spc(3);
-    reg_print(SIZE_X, r0);
-    put_spc(2);
-    PRINTF(iomsg0);
-    switch (r0 & 0x7){
-    case 0:	PRINTF(iomsg1);				break;
-    case 1:	PRINTF("16%s0", iomsg31);	break;
-    case 2:	PRINTF("MOSI1");			break;
-    }
-    put_lin();
-    io_mode_hys_od(r0);
-    put_rn();
-}
-#endif	// USE_PORT
-
-#if USE_REG_SPI_UART
-void spi_reg(int no){
-uint32_t n, r0, r1 ,r2, r3, r4, r5, r6, r7, r8;
-
-    if (no == SPI_0){
-        n = 0;
-        r0 = LPC_SSP0->CR1;
-        r1 = LPC_SSP0->DR;
-        r2 = LPC_SSP0->SR;
-        r3 = LPC_SSP0->CPSR;
-        r4 = LPC_SSP0->IMSC;
-        r5 = LPC_SSP0->RIS;
-        r6 = LPC_SSP0->MIS;
-        r7 = LPC_SSP0->ICR;
-        r8 = LPC_SSP0->CR0;
-    } else if (no == SPI_1){
-        n = 1;
-        r0 = LPC_SSP1->CR1;
-        r1 = LPC_SSP1->DR;
-        r2 = LPC_SSP1->SR;
-        r3 = LPC_SSP1->CPSR;
-        r4 = LPC_SSP1->IMSC;
-        r5 = LPC_SSP1->RIS;
-        r6 = LPC_SSP1->MIS;
-        r7 = LPC_SSP1->ICR;
-        r8 = LPC_SSP1->CR0;        
-    } else {
-        return;
-    }
-    PRINTF("Show SSP%1d(SPI%1d) Registers", n, n);
-    put_rn();
-    PRINTF("CR0");
-    PRINTF(imsg2);
-    reg_print(SIZE8, r8);
-    put_rn();
-    PRINTF("CR1");
-    PRINTF(imsg2);
-    reg_print(SIZE8, r0);
-    put_rn();
-    PRINTF("DR");
-    PRINTF(imsg4);
-    reg_print(SIZE8, r1);
-    put_rn();
-    PRINTF("SR");
-    PRINTF(imsg3);
-    reg_print(SIZE8, r2);
-    put_rn();
-    PRINTF("CPSR");
-    PRINTF(imsg7);
-    reg_print(SIZE8, r3);
-    put_rn();
-    PRINTF("IMSC");
-    PRINTF(imsg2);
-    reg_print(SIZE8, r4);
-    put_rn();
-    PRINTF("RIS");
-    PRINTF(imsg3);
-    reg_print(SIZE8, r5);
-    put_rn();
-    PRINTF("MIS");
-    PRINTF(imsg3);
-    reg_print(SIZE8, r6);
-    put_rn();
-    PRINTF("ICR");
-    PRINTF(imsg2);
-    reg_print(SIZE8, r7);
-    put_rn();
-}
-
-void uart_reg(void){
-uint32_t r0,r1,r2,r3,r4,r5,r6;
-
-    // clear LCR[DLAB] to read registers
-    LPC_UART->LCR &= ~(1 << 7);
-    r0 = LPC_UART->RBR;
-    r1 = LPC_UART->IER;
-    r2 = LPC_UART->IIR;
-    r3 = LPC_UART->TER;   
-    // set LCR[DLAB] to enable writing to divider registers
-    LPC_UART->LCR |= (1 << 7);   
-    r4 = LPC_UART->DLL;
-    r5 = LPC_UART->DLM;
-    r6 = LPC_UART->FDR;
-    // clear LCR[DLAB]
-    LPC_UART->LCR &= ~(1 << 7);
-    // Print each register 
-    PRINTF("Show UART Registers");   
-    put_rn();
-    PRINTF("RBR");
-    PRINTF(imsg4);
-    reg_print(SIZE8, r0);
-    put_rn();
-    PRINTF("THR--Write only");
-    PRINTF(imsg4);
-    put_rn();
-    PRINTF("DLL");
-    PRINTF(imsg2);
-    reg_print(SIZE8, r4);
-    put_rn();
-    PRINTF("DLM");
-    PRINTF(imsg2);
-    reg_print(SIZE8, r5);
-    put_rn();
-    PRINTF("IER");
-    PRINTF(imsg2);
-    reg_print(SIZE8, r1);
-    put_rn();
-    PRINTF("IIR");
-    PRINTF(imsg2);
-    reg_print(SIZE8, r2);
-    put_rn();
-    PRINTF("FCR--Write only");
-    PRINTF(imsg2);
-    put_rn();
-    PRINTF("LCR,MCR,MSR,SCR,ACR--Not support");
-    put_rn();
-    PRINTF("FDR");
-    PRINTF(imsg2);
-    reg_print(SIZE8, r6);
-    put_rn();
-    PRINTF("TER");
-    PRINTF(imsg3);
-    reg_print(SIZE8, r3);
-    put_rn();
-    PRINTF("RS485CTRL,485ADRMATCH,485DLY--Not support");
-    put_rn();
-}
-#endif  //USE_REG_SPI_UART
-
-#if USE_SYS
-void cpu_inf (void){
-    unsigned long m1, m2;
-
-    m1 = SCB->CPUID;
-    m2 = (m1 >> 24);
-    if (m2 == 0x41) {
-        put_r();
-        PRINTF("CPU = ARM ");
-    } else {
-        put_r();
-        PRINTF("CPU = NOT ARM ");
-    }
-    m2 = (m1 >> 4) & 0xfff;
-    if (m2 == 0xc23) {
-        PRINTF("Cortex-M3");
-        put_rn();
-    } else if (m2 == 0xc20){
-        PRINTF("Cortex-M0");
-        put_rn();
-    } else {
-        PRINTF("NOT Cortex-M3,M0");
-        put_rn();
-    }   
-    m2 = (m1 >> 20) & 0x0f;
-    PRINTF("Variant:%x", m2);
-    put_rn();
-    m2 = m1 & 0x7;
-    PRINTF("Revision:%x", m2);
-    put_rn();
-}
-
-//  Calculate CPU System Clock Frequency /refrence: system_LPCxx.c
-static char *const fmsg0 = "Internal RC Oscillator";
-static char *const fmsg1 = "Xtal Osc Clock";
-static char *const fmsg2 = "Watch dog Osc Clock";
-static char *const fmsg3 = "with PLL";
-static char *const fmsg4 = "System Clock =";
-static char *const fmsg5 = "PLL Post divider ratio =";
-static char *const fmsg6 = "feedback devider =";
-static char *const fmsg7 = "NO Clock ?!";
-
-void get_freq_w_print (void){	// Get Core Clock Frequency
-uint32_t wdt_osc = 0, pll_fct0 = 0, pll_fct1 = 0;
-
-    // Determine clock frequency according to clock register values
-    switch ((LPC_SYSCON->WDTOSCCTRL >> 5) & 0x0F) {
-        case 0:  wdt_osc =  400000; break;
-        case 1:  wdt_osc =  500000; break;
-        case 2:  wdt_osc =  800000; break;
-        case 3:  wdt_osc = 1100000; break;
-        case 4:  wdt_osc = 1400000; break;
-        case 5:  wdt_osc = 1600000; break;
-        case 6:  wdt_osc = 1800000; break;
-        case 7:  wdt_osc = 2000000; break;
-        case 8:  wdt_osc = 2200000; break;
-        case 9:  wdt_osc = 2400000; break;
-        case 10: wdt_osc = 2600000; break;
-        case 11: wdt_osc = 2700000; break;
-        case 12: wdt_osc = 2900000; break;
-        case 13: wdt_osc = 3100000; break;
-        case 14: wdt_osc = 3200000; break;
-        case 15: wdt_osc = 3400000; break;
-    }
-    wdt_osc /= ((LPC_SYSCON->WDTOSCCTRL & 0x1F) << 1) + 2;
-        put_r();
-    switch (LPC_SYSCON->MAINCLKSEL & 0x03) {
-    case 0:                             // Internal RC oscillator 
-        SystemCoreClock = __IRC_OSC_CLK;
-        PRINTF("%s = %dHz", fmsg0, SystemCoreClock);
-        break;
-    case 1:                             // Input Clock to System PLL
-        switch (LPC_SYSCON->SYSPLLCLKSEL & 0x03) {
-        case 0:                         // Internal RC oscillator
-            SystemCoreClock = __IRC_OSC_CLK;
-            PRINTF("%s = %dHz", fmsg0, SystemCoreClock);
-            break;
-        case 1:                         // System oscillator
-            SystemCoreClock = __SYS_OSC_CLK;
-            PRINTF("%s = %dHz", fmsg1, SystemCoreClock );
-            break;
-        case 2:                         // WDT Oscillator
-            SystemCoreClock = wdt_osc;
-            PRINTF("%s = %dHz", fmsg2, wdt_osc );
-            break;
-        case 3:                         // Reserved
-            SystemCoreClock = 0;
-            PRINTF(fmsg7);
-            break;
-        }
-        break;
-    case 2:                             // WDT Oscillator
-        SystemCoreClock = wdt_osc;
-        PRINTF("%s = %dHz", fmsg2, wdt_osc );
-        break;
-    case 3:                             // System PLL Clock Out
-        switch (LPC_SYSCON->SYSPLLCLKSEL & 0x03) {
-        case 0:                         // Internal RC oscillator
-            if (LPC_SYSCON->SYSPLLCTRL & 0x180) {
-                SystemCoreClock = __IRC_OSC_CLK;
-                PRINTF("%s = %dHz", fmsg0, SystemCoreClock);
-            } else {
-                pll_fct0 = (LPC_SYSCON->SYSPLLCTRL & 0x01F) + 1;
-                pll_fct1 = (LPC_SYSCON->SYSPLLCTRL & 0x060) >> 5UL;
-                SystemCoreClock = __IRC_OSC_CLK *  pll_fct0;
-                PRINTF("Use Internal RC = %dHz", __IRC_OSC_CLK);
-                put_rn();
-                PRINTF("%s %s = %dHz", fmsg0, fmsg3, SystemCoreClock);
-                put_rn();
-                PRINTF("%s %d, %s %d", fmsg5, pll_fct1, fmsg6, pll_fct0);
-            }
-            break;
-        case 1:                         // System oscillator
-            if (LPC_SYSCON->SYSPLLCTRL & 0x180) {
-                SystemCoreClock = __SYS_OSC_CLK;
-                PRINTF("%s = %dHz", fmsg1, SystemCoreClock );
-            } else {
-                pll_fct0 = (LPC_SYSCON->SYSPLLCTRL & 0x01F) + 1;
-                pll_fct1 = (LPC_SYSCON->SYSPLLCTRL & 0x060) >> 5UL;
-                SystemCoreClock = __SYS_OSC_CLK * pll_fct0;
-                PRINTF("Use XTAL = %dHz", __XTAL);
-                put_rn();
-                PRINTF("%s %s = %dHz", fmsg1, fmsg3, SystemCoreClock);
-                put_rn();
-                PRINTF("%s %d, %s %d", fmsg5, pll_fct1, fmsg6, pll_fct0);
-            }
-            break;
-        case 2:                         // WDT Oscillator
-            if (LPC_SYSCON->SYSPLLCTRL & 0x180) {
-                SystemCoreClock = wdt_osc;
-                PRINTF("%s = %dHz", fmsg2, wdt_osc );
-            } else {
-                pll_fct0 = (LPC_SYSCON->SYSPLLCTRL & 0x01F) + 1;
-                pll_fct1 = (LPC_SYSCON->SYSPLLCTRL & 0x060) >> 5UL;
-                SystemCoreClock = wdt_osc *  pll_fct0;
-                PRINTF("Use WDT OSC = %dHz", wdt_osc);
-                put_rn();
-                PRINTF("%s %s = %dHz", fmsg2, fmsg3, SystemCoreClock);
-                put_rn();
-                PRINTF("%s %d, %s %d", fmsg5, pll_fct1, fmsg6, pll_fct0);
-            }
-            break;
-        case 3:                         // Reserved
-            SystemCoreClock = 0;
-            PRINTF("fmsg7");
-            break;
-        }
-        break;
-    }
-    SystemCoreClock /= LPC_SYSCON->SYSAHBCLKDIV;
-    put_rn();
-    PRINTF("%s %dHz", fmsg4, SystemCoreClock);
-    put_rn();
-}
-#endif  //USE_SYS
-
-void get_freq  (void){	// Get Core Clock Frequency
-uint32_t wdt_osc = 0, pll_fct0 = 0, pll_fct1 = 0;
-
-    // Determine clock frequency according to clock register values
-    switch ((LPC_SYSCON->WDTOSCCTRL >> 5) & 0x0F) {
-        case 0:  wdt_osc =  400000; break;
-        case 1:  wdt_osc =  500000; break;
-        case 2:  wdt_osc =  800000; break;
-        case 3:  wdt_osc = 1100000; break;
-        case 4:  wdt_osc = 1400000; break;
-        case 5:  wdt_osc = 1600000; break;
-        case 6:  wdt_osc = 1800000; break;
-        case 7:  wdt_osc = 2000000; break;
-        case 8:  wdt_osc = 2200000; break;
-        case 9:  wdt_osc = 2400000; break;
-        case 10: wdt_osc = 2600000; break;
-        case 11: wdt_osc = 2700000; break;
-        case 12: wdt_osc = 2900000; break;
-        case 13: wdt_osc = 3100000; break;
-        case 14: wdt_osc = 3200000; break;
-        case 15: wdt_osc = 3400000; break;
-    }
-    wdt_osc /= ((LPC_SYSCON->WDTOSCCTRL & 0x1F) << 1) + 2;
-    switch (LPC_SYSCON->MAINCLKSEL & 0x03) {
-    case 0:                             // Internal RC oscillator
-        SystemCoreClock = __IRC_OSC_CLK;
-        break;
-    case 1:                             // Input Clock to System PLL
-        switch (LPC_SYSCON->SYSPLLCLKSEL & 0x03) {
-        case 0:                         // Internal RC oscillator
-            SystemCoreClock = __IRC_OSC_CLK;
-            break;
-        case 1:                         // System oscillator
-            SystemCoreClock = __SYS_OSC_CLK;
-            break;
-        case 2:                         // WDT Oscillator
-            SystemCoreClock = wdt_osc;
-            break;
-        case 3:                         // Reserved
-            SystemCoreClock = 0;
-            break;
-        }
-        break;
-    case 2:                             // WDT Oscillator
-        SystemCoreClock = wdt_osc;
-        break;
-    case 3:                             // System PLL Clock Out
-        switch (LPC_SYSCON->SYSPLLCLKSEL & 0x03) {
-        case 0:                         // Internal RC oscillator
-            if (LPC_SYSCON->SYSPLLCTRL & 0x180) {
-                SystemCoreClock = __IRC_OSC_CLK;
-            } else {
-                pll_fct0 = (LPC_SYSCON->SYSPLLCTRL & 0x01F) + 1;
-                pll_fct1 = (LPC_SYSCON->SYSPLLCTRL & 0x060) >> 5UL;
-                SystemCoreClock = __IRC_OSC_CLK *  pll_fct0;
-            }
-            break;
-        case 1:                         // System oscillator
-            if (LPC_SYSCON->SYSPLLCTRL & 0x180) {
-                SystemCoreClock = __SYS_OSC_CLK;
-            } else {
-                pll_fct0 = (LPC_SYSCON->SYSPLLCTRL & 0x01F) + 1;
-                pll_fct1 = (LPC_SYSCON->SYSPLLCTRL & 0x060) >> 5UL;
-                SystemCoreClock = __SYS_OSC_CLK * pll_fct0;
-            }
-            break;
-        case 2:                         // WDT Oscillator
-            if (LPC_SYSCON->SYSPLLCTRL & 0x180) {
-                SystemCoreClock = wdt_osc;
-            } else {
-                pll_fct0 = (LPC_SYSCON->SYSPLLCTRL & 0x01F) + 1;
-                pll_fct1 = (LPC_SYSCON->SYSPLLCTRL & 0x060) >> 5UL;
-                SystemCoreClock = wdt_osc *  pll_fct0;
-            }
-            break;
-        case 3:                         // Reserved
-            SystemCoreClock = 0;
-            break;
-        }
-        break;
-    }
-    SystemCoreClock /= LPC_SYSCON->SYSAHBCLKDIV;
-}
-
-#if USE_REG_I2C
-void i2c_io_reg (void){
-uint32_t r0;
-
-	PRINTF("<Show IO Pin>");
-	put_rn();
-    // P0_4
-    r0 = LPC_IOCON->PIO0_4;
-    reg_print(SIZE_X, r0);
-    put_spc(2);
-    PRINTF("%s4(dp27)",io_port_name0);
-	put_spc(2);
-    PRINTF(iomsg0);
-    switch (r0 & 0x7){
-    case 0:
-        PRINTF(iomsg1);
-        break;
-    case 1:
-        PRINTF("SCL");
-        break;
-    }
-    put_lin();
-    switch (( r0 >> 8 ) & 0x3){
-    case 0:
-        PRINTF(iomsg4);
-        break;
-    case 1:
-        PRINTF(iomsg1);
-        break;
-    case 2:
-        PRINTF("Fast md");
-        break;
-    case 3:
-        PRINTF(iomsg2);
-        break;
-    }
-    put_rn();
-    // P0_5
-    r0 = LPC_IOCON->PIO0_5;
-    reg_print( SIZE_X, r0 );
-    put_spc(2);
-    PRINTF("%s5(dp5)",io_port_name0);
-    put_spc(3);
-    PRINTF(iomsg0);
-    switch (r0 & 0x7){
-    case 0:
-        PRINTF(iomsg1);
-        break;
-    case 1:
-        PRINTF("SDA");
-        break;
-    }
-    put_lin();
-    switch ((r0 >> 8 ) & 0x3){
-    case 0:
-        PRINTF(iomsg4);
-        break;
-    case 1:
-        PRINTF(iomsg1);
-        break;
-    case 2:
-        PRINTF("Fast md");
-        break;
-    case 3:
-        PRINTF(iomsg2);
-        break;
-    }
-    put_rn();
-}
-    
-void i2c_reg (void){
-uint32_t r0,r1,r2,r3,r4,r5,r6,r7;
-
-    r0 = LPC_I2C->CONSET;
-    r1 = LPC_I2C->STAT;
-    r2 = LPC_I2C->DAT;
-    r3 = LPC_I2C->SCLH;
-    r4 = LPC_I2C->SCLL;
-    r5 = LPC_I2C->CONCLR;
-    r6 = LPC_I2C->MMCTRL;
-    r7 = LPC_I2C->DATA_BUFFER;
-
-    PRINTF("<Show I2C Registers>");
-    put_rn();
-    reg_print(SIZE8, r0);
-	put_spc(2);
-    PRINTF("CONSET");
-    PRINTF(imsg2);
-    put_rn();
-    reg_print(SIZE8, r1);
-	put_spc(2);
-    PRINTF("STAT");
-    PRINTF(imsg3);
-    put_rn();
-    reg_print(SIZE8, r2);
-    put_spc(2);
-    PRINTF("DAT");
-    PRINTF(imsg4);
-    put_rn();
-    put_spc(2);
-    PRINTF("ADR0--Not support");
-    put_rn();
-    reg_print(SIZE8, r3);
-    put_spc(2);
-    PRINTF("SCLH");
-    PRINTF(imsg2);
-    put_rn();
-    reg_print(SIZE8, r4);
-    put_spc(2);
-    PRINTF("SCLL");
-    PRINTF(imsg2);
-    put_rn();
-    reg_print(SIZE8, r5);
-    put_spc(2);
-    PRINTF("CONCLR");
-    PRINTF(imsg2);
-    put_rn();
-    reg_print(SIZE8, r6);
-    put_spc(2);
-    PRINTF("MMCTRL");
-    PRINTF(imsg2);
-    put_rn();
-    put_spc(2);
-    PRINTF("ADR1,2,3--Not support");
-    put_rn();
-    reg_print(SIZE8, r7);
-    put_spc(2);
-    PRINTF("DATA_BUFFER");
-    PRINTF(imsg7);
-    put_rn();
-    put_spc(2);
-    PRINTF("MASK0,1,2,3--Not support");
-    put_rn();
-}
-
-void i2c_freq (void){
-uint32_t r0,r1;
-
-    r0 = LPC_I2C->SCLH;
-    r1 = LPC_I2C->SCLL;	
-	get_freq();
-	PRINTF("<I2C Status>");
-	put_rn();
-	PRINTF("Freq. = I2CPCLK/(SCLH+SCLL) = %d/(%d+%d) = %d Hz",
-			SystemCoreClock, r0, r1, SystemCoreClock/(r0+r1));
-	put_rn();
-	r0 = LPC_I2C->CONSET;
-	PRINTF("I2C I/F ");
-	if ( r0 & 0x40 ) {
-		PRINTF("Enabled");
-	} else {
-		PRINTF("disabled");
-	}
-	put_rn();
-}
-#endif
-
-#if USE_MEM
-//  Range check for Memory dump
-static void check_range (MEMO * mem){
-uint8_t    i;
-uint32_t m;
-
-    mem->mflg = ERR_NOTHING;
-    for (i = 0 ; i < 5 ; i++) {
-        if (mem->mstr >= mem_range[i][0]) {
-            if (mem->mstr < mem_range[i][1]) {
-                m = mem->mstr + mem->msiz;
-                if (m < mem_range[i][1]) {
-                    return;            // no modification
-                } else {
-                    m = mem_range[i][1];
-                    mem->msiz = m - mem->mstr + 1;
-                    mem->mflg = ERR_MODIFY_SIZ;
-                    return;            // modified size
-                }
-            }
-        }
-    }
-    mem->mflg = ERR_OUT_OF_RANGE;
-    mem->mstr = 0;
-    mem->msiz = 0;
-    return ;
-}
-
-//  Memory dump error massage
-void error_print (unsigned char flg){
-    switch (flg) {
-        case ERR_MODIFY_SIZ :
-            put_r();
-            PRINTF("Reach to out of range ");
-            put_rn();
-            break;
-        case ERR_OUT_OF_RANGE :
-            put_r();
-            PRINTF("Not in a memory area ");
-            put_rn();
-            break;
-        case ERR_NOTHING :
-        default :
-            ;
-    }
-}
-
-//  Print memory contents
-void put_dump (const unsigned char *buff, unsigned long ofs, int cnt){
-int n;
-
-    PRINTF("%08lX ", ofs);
-    for(n = 0; n < cnt; n++) {	PRINTF(" %02X", buff[n]);    }
-    PUTC(' ');
-    for(n = 0; n < cnt; n++) {
-        if ((buff[n] < 0x20)||(buff[n] >= 0x7F)) {	PUTC('.');
-        } else {									PUTC(buff[n]);   }
-    }
-    put_rn();
-}
-
-// dump memory with error check
-void dump_w_err_ckeck (char **ptr, MEMO * mem){
-    check_range (mem);
-    for (*ptr=(char*)mem->mstr; mem->msiz >= 16; *ptr += 16, mem->msiz -= 16) {
-        put_r();
-        put_dump((unsigned char*)*ptr, (unsigned int)*ptr, 16);
-    }
-    if (mem->msiz) {	put_dump((unsigned char*)*ptr, (unsigned int)*ptr, mem->msiz);
-    }
-    error_print(mem->mflg);
-}
-
-static void mem_inf (char *ptr){
-    put_r();
-    PRINTF("Mem. Mode d <address> [<count>], s, <ret> or f, q, ?");
-    put_rn();
-    mem.mstr = mem_range[0][0];     // default start address = Flash
-    mem.msiz =256;
-    mem.mold = 0;
-    mem.mtmp = 0;
-    mem.mflg = 0;
-    for (; mem.mflg != 0xff;) {
-        PRINTF("m>");
-        ptr = linebuf;
-        get_line(ptr, buf_size);
-        put_r();                   
-        switch(*ptr++){
-            case 'd' :    // d <address> [<count>] - Dump memory
-                mem.mtmp = mem.mstr;
-                if (!xatoi(&ptr, &mem.mstr)) {
-                    mem.mstr = mem.mtmp;
-                }
-                if (!xatoi(&ptr, &mem.msiz)) {
-                    mem.msiz = 256;
-                }
-                mem.mtmp = mem.msiz;
-                dump_w_err_ckeck(&ptr, &mem);
-                mem.mold = mem.mstr;
-                mem.mstr += mem.mtmp;
-                break;
-            case 'f' :        // next
-            case 'n' :
-            case 0x0d :
-                mem.msiz = 256;
-                mem.mtmp = mem.msiz;
-                dump_w_err_ckeck(&ptr, &mem);
-                mem.mold = mem.mstr;
-                mem.mstr += 256;
-                break;
-            case 'q' :        // quit
-                mem.mflg = 0xff;
-                break;
-            case 'b' :        // Back to more
-                if (mem.mold == 0){
-                    ;
-                } else {
-                    mem.mold -= 256;
-                }
-            case 'k' :        // keep previous address
-                mem.mstr = mem.mold;
-                mem.msiz = 256;
-                mem.mtmp = mem.msiz;
-                dump_w_err_ckeck(&ptr, &mem);
-                mem.mstr += 256;
-                break;
-            case 'a' :        // start RAM top
-                mem.mstr = mem_range[1][0];
-                mem.msiz =256;
-                mem.mold = 0;
-                mem.mtmp = 0;
-                mem.mflg = 0;
-                dump_w_err_ckeck(&ptr, &mem);
-                mem.mstr += 256;
-                break;
-            case 'o' :        // start ROM top
-                mem.mstr = mem_range[0][0];
-                mem.msiz =256;
-                mem.mold = 0;
-                mem.mtmp = 0;
-                mem.mflg = 0;
-                dump_w_err_ckeck(&ptr, &mem);
-                mem.mstr += 256;
-                break;
-            case 's' :
-                PRINTF("Memory Configuration");
-                put_rn();
-                PRINTF("%s0x%08lx to 0x%08lx ", rmsg0, mem_range[0][0], mem_range[0][1]);
-                put_rn();
-                PRINTF("%s0x%08lx to 0x%08lx ", rmsg1, mem_range[1][0], mem_range[1][1]);
-                put_rn();
-                PRINTF("%s0x%08lx to 0x%08lx ", rmsg2, mem_range[2][0], mem_range[2][1]);
-                put_rn();
-                PRINTF("%s0x%08lx to 0x%08lx ", rmsg3, mem_range[3][0], mem_range[3][1]);
-                put_rn();
-                PRINTF("%s0x%08lx to 0x%08lx ", rmsg4, mem_range[4][0], mem_range[4][1]);
-                put_rn();
-                break;
-            case '?' :
-                PRINTF("d <address> [<count>] - Dump memory");
-                put_rn();
-                PRINTF("s  - Show memory structure ");
-                put_rn();
-                PRINTF("o  - Dump memory / start from ROM top");
-                put_rn();
-                PRINTF("a  - Dump memory / start from RAM top");
-                put_rn();
-                PRINTF("k  - Dump memory / keep same 256bytes");
-                put_rn();
-                PRINTF("b  - Dump memory / before 256bytes");
-                put_rn();
-                PRINTF("<RET> or f, n - Dump memory / next 256bytes");
-                put_rn();
-                PRINTF("q  - Exit memory mode");
-                put_rn();
-                break;
-            default:
-                PUTC('?');
-                put_rn();
-        }
-    }
-    PRINTF("Return to Normal Mode");
-}
-#endif      //USE_MEM
-
-#if USE_EEP
-static void mem_chk_msg (char mflg){
-	switch (mflg) {
-		case ERR_MODIFY_SIZ :
-			PRINTF(" Reached out of range");
-			put_rn();
-			break;
-		case ERR_OUT_OF_RANGE :
-			PRINTF(" Not in a memory area");
-			put_rn();
-			break;
-		case ERR_NOTHING :
-		default :
-			;
-	}
-}
-
-void put_eep_dump (
-	uint32_t addr,		// Heading address value
-	uint8_t len			// Number of items to be dumped
-){
-uint32_t i;
-uint8_t	eep[16];
-
-	PRINTF("%08lx ", addr);			// address
-	for (i = 0; i < len; i++) {		// Hexdecimal dump
-		eep[i] = xat24c1024.read(addr++);
-		PRINTF(" %02x", eep[i]);
-	}
-	PUTC(' ');
-	for (i = 0; i < len; i++){		// ASCII dump
-		PUTC((eep[i] >= ' ' && eep[i] <= '~') ? eep[i] : '.');
-	}
-	put_rn();
-}
-
-static void check_eeprange (MEMO * eepmem){
-uint32_t m;
-
-	m = sizeof(eepmem_range) / sizeof(*eepmem_range);
-	eepmem->mflg = ERR_NOTHING;
-	if (eepmem->mstr >= eepmem_range[0]){
-		if (eepmem->mstr < eepmem_range[1]){
-			m = eepmem->mstr + eepmem->msiz;
-			if (m < eepmem_range[1]){
-				return;			// no modification
-			} else {
-				m = eepmem_range[1];
-				eepmem->msiz = m - eepmem->mstr + 1;
-				eepmem->mflg = ERR_MODIFY_SIZ;
-				return;			// modified size
-			}
-		}
-	}
-	eepmem->mflg = ERR_OUT_OF_RANGE;
-	eepmem->mstr = 0;
-	eepmem->msiz = 0;
-	return ;
-}
-
-static void eepmem_inf (char *ptr){
-uint8_t	c, dt;
-unsigned long p1, p2, p3;
-
-	put_r();
-	PRINTF("Enter EEPROM 1) d <address> 256bytes, 2) s, 3) <ret>, 4) q 5) ?");
-	put_rn();
-	eepmem.mstr = eepmem_range[0];		// start head of table
-	eepmem.msiz =256;
-	eepmem.mold = 0;
-	eepmem.mtmp = 0;
-	eepmem.mflg = 0;
-	eepmem.mbhw = DW_CHAR;
-    for (; eepmem.mflg != 0xff;) {
-		PRINTF("e>");
-        ptr = linebuf;
-        get_line(ptr, buf_size);
-        put_r();                   
-        switch(*ptr++){
-			case 'd' :	// d <address> - Dump memory
-				eepmem.mtmp = eepmem.mstr;		// save defult start addres
-				if (!xatoi(&ptr, &eepmem.mstr)){
-					eepmem.mstr = eepmem.mtmp;	// recover defult address
-				}
-				eepmem.msiz = 256;
-				eepmem.msiz /= eepmem.mbhw;
-				eepmem.mtmp = eepmem.msiz * eepmem.mbhw;
-				check_eeprange (&eepmem);
-				for (ptr=(char*)eepmem.mstr;
-					 eepmem.msiz >= 16/eepmem.mbhw;
-					 ptr += 16, eepmem.msiz -= 16/eepmem.mbhw)
-				{
-					put_eep_dump((UINT)ptr, 16/eepmem.mbhw);
-				}
-				if (eepmem.msiz){
-					put_eep_dump((UINT)ptr, eepmem.msiz);
-				}
-				mem_chk_msg( eepmem.mflg );
-				eepmem.mold = eepmem.mstr;
-				eepmem.mstr += eepmem.mtmp;
-				break;
-            case 'f' :  // next
-            case 'n' :
-			case 0x0d :	// CR
-				eepmem.msiz = 256/eepmem.mbhw;
-				eepmem.mtmp = eepmem.msiz;
-				check_eeprange (&eepmem);
-				for (ptr=(char*)eepmem.mstr;
-					 eepmem.msiz >= 16/eepmem.mbhw;
-					 ptr += 16, eepmem.msiz -= 16/eepmem.mbhw)
-				{
-					put_eep_dump((UINT)ptr, 16/eepmem.mbhw);
-				}
-				mem_chk_msg(eepmem.mflg);
-				eepmem.mold = eepmem.mstr;
-				eepmem.mstr += 256;
-				break;
-			case 'q' :	// quit
-                eepmem.mflg = 0xff;
-                break;
-			case 'b' :	// Back to more
-                if (eepmem.mold == 0){
-                    ;
-                } else {
-                    eepmem.mold -= 256;
-                }
-            case 'k' :	// keep previous address
-				eepmem.mstr = eepmem.mold;
-				eepmem.msiz = 256/eepmem.mbhw;
-				eepmem.mtmp = eepmem.msiz;
-				check_eeprange (&eepmem);
-				for (ptr=(char*)eepmem.mstr; eepmem.msiz >= 16/eepmem.mbhw; ptr += 16,
-					eepmem.msiz -= 16/eepmem.mbhw){
-					put_eep_dump((UINT)ptr, 16/eepmem.mbhw);
-				}
-				mem_chk_msg(eepmem.mflg);
-				eepmem.mstr += 256;
-				break;
-			case 'e' :	// e <address> [<value> ...] - Edit memory
-				ptr = linebuf;
-        		get_line(ptr, buf_size);
-				p3 = DW_CHAR;
-				if (!xatoi(&ptr, &p1)){
-					PRINTF("? ->e <address> [<value> ...]");
-					put_rn();
-					break;	// Get start address
-				}
-				if (xatoi(&ptr, &p2)) { // 2nd parameter is given
-					do {
-						xat24c1024.write((uint16_t)p1, (uint8_t)p2);
-						wait(0.01);
-						dt = xat24c1024.read((uint16_t)p1);
-						if (dt != (uint8_t)p2){
-							PRINTF("?\r\n");
-						}
-						p1 += p3;
-					} while (xatoi(&ptr, &p2));	// Get next value
-					break;
-				}
-				for (;;) {// 2nd parameter is not given (interactive mode)
-					PRINTF("%08x 0x%02x-", p1, *(BYTE*)p1);
-					ptr = linebuf;
-	        		get_line(ptr, buf_size);
-					if (*ptr == '.'){ break;}
-					if (*ptr == 0x1b){ break;}
-					if ((BYTE)*ptr >= ' ') {
-						if (!xatoi(&ptr, &p2)){ continue;}
-						xat24c1024.write((uint16_t)p1, (uint8_t)p2);
-						wait(0.01);
-						dt = xat24c1024.read((uint16_t)p1);
-						if (dt != (uint8_t)p2){
-							PRINTF("?\r\n");
-						}
-					}
-					p1 += p3;
-				}
-				break;
-			case 's' :
-				PRINTF("AT24C1024B");
-				put_rn();
-				PRINTF("EEPROM  0x%08lx to 0x%08lx", eepmem_range[0], eepmem_range[1]);
-				put_rn();
-				break;
-			case '?' :
-				PRINTF("d <address> -Dump memory");
-				PRINTF(" (e.g. >d 0x10f00<RET>)");
-				put_rn();
-				PRINTF("e <address> [<value> ...] - Edit memory");
-				put_rn();
-				PRINTF("s -Show memory structure");
-				put_rn();
-				PRINTF("<RET>-Dump memory, next 256 bytes (also 'f','n')");
-				put_rn();
-				PRINTF("k -Dump memory, same as before 256 bytes ('b' -256)");
-				put_rn();
-				PRINTF("q -Exit EEPROM mode" );
-				put_rn();
-				break;
-			default:
-                PUTC('?');
-                put_rn();
-		}
-	}
-    PRINTF("Return to Normal Mode");
-}
-#endif
-
-//-----------------------------------------------------------------------------
-//  Monitor Main Program
-//-----------------------------------------------------------------------------
-int mon_hw (void) {
-char *ptr;
-
-	put_r();
-    PRINTF("%s [Help:'?' key]", mon_msg_hw);
-    put_rn();
-#if USE_SYS
-    get_freq();
-#endif      //USE_SYS
-    for (;;) {
-        put_r();
-        PUTC('>');
-        ptr = linebuf;
-        get_line(ptr, buf_size);
-        switch (*ptr++) {
-#if USE_MEM
-    //---------------------------------------------------------------------------------
-    //    Memory
-    //---------------------------------------------------------------------------------
-            case 'm' :
-				mem_inf(ptr);
-                put_rn();
-                break;
-#endif   // USE_MEM
-#if USE_EEP
-    //---------------------------------------------------------------------------------
-    //    EEPROM Memory
-    //---------------------------------------------------------------------------------
-		/*	EEPROM Memory														*/
-			case 'e' :
-				eepmem_inf(ptr);
-				put_rn();
-				break;
-#endif   // USE_EEP	
-#if USE_REG_SPI_UART
-    //--------------------------------------------------------------------------------------
-    //    Register
-    //--------------------------------------------------------------------------------------
-            case 'r' :
-uint8_t  r_flg;
-                put_r();
-                PRINTF("Reg. Mode p,u,i,s,t,a,d,l,w,c & ?");
-                put_rn();
-                r_flg = 0;
-                for (; r_flg != 0xff;) {
-                    PRINTF("r>");
-                    ptr = linebuf;
-                    get_line(ptr, sizeof(linebuf));
-        			put_r();
-                    switch(*ptr++){
-                        case 'p' :	
-	                    switch(*ptr++){
-	                        case '0' :
-                                io_config0(); 
-	                            break;
-	                        case '1' :
-                                io_config1();                      
-	                            break;
-	                        case '*' :
-                                io_config0(); 
-                                put_rn();
-                                io_config1(); 
-	                            break;
-	                        case '?' :
-	                        default:
-								PRINTF("Enter p0,p1 and p* for all");
-								put_rn();
-                            }
-                            break;; 
-                        case 'u' :
-                            uart_reg();
-                            break;
-                        //case 'i' :
-                        //    i2c_reg();
-                        //    break;
-                        case 's' :
-	                    switch(*ptr++){
-	                        case '0' :
-                                spi_reg(SPI_0);
-	                            break;
-	                        case '1' :
-                                spi_reg(SPI_1);                      
-	                            break;
-	                        case '*' :
-                                spi_reg(SPI_0);
-                                put_rn();
-                                spi_reg( SPI_1 );                        
-	                            break;
-	                        case '?' :
-	                        default:
-								PRINTF("Enter s0,s1 and s* for all");
-								put_rn();
-                            }
-                            break;
-                        case 't' :		// 
-                        	not_yet_impliment();                        
-                            break;                            
-                        case 'a' :		// 
-                        	not_yet_impliment();                        
-                            break;
-                        case 'd' :		// 
-                        	not_yet_impliment();                        
-                            break;
-                        case 'w' :		// 
-                        	not_yet_impliment();                       
-                            break;
-                        case 'l' :        //
-                        	not_yet_impliment();
-                            break;
-                        case 'c' :		// 
-                        	not_yet_impliment();                        
-                            break;
-                        case 'x' :		// 
-                        	not_yet_impliment();                        
-                            break;
-                        case 'y' :		// 
-                        	not_yet_impliment();                        
-                            break;
-                        case '?' :
-                            PRINTF("p - I/O Pin Config");
-                            put_rn();
-                            PRINTF("u - UART");
-                            put_rn();
-                            PRINTF("i - I2C -> separate command 'i'");
-                            put_rn();
-                            PRINTF("s - SPI");
-                            put_rn();
-                            PRINTF("t - TIMER");
-                            put_rn();
-                            PRINTF("a - ADC");
-                            put_rn();
-                            PRINTF("d - DAC");
-                            put_rn();
-                            PRINTF("l - LDC");
-                            put_rn();
-                            PRINTF("w - WWDG");
-                            put_rn();
-                            PRINTF("c - COMP");
-                            put_rn();
-                            break;
-                        case 'q' :        // quit
-                            r_flg = 0xff;
-                            break;
-                        default:
-                        	PUTC('?');
-                            put_rn();
-                    }
-                }
-				PRINTF("Return to Normal Mode");
-                put_rn();
-                break;            
-#endif   // USE_REG_SPI_UART
-#if USE_PORT
-    //---------------------------------------------------------------------------------
-    //    Port configration
-    //---------------------------------------------------------------------------------
-            case 'p' :    //
-            	put_r();
-                switch(*ptr++){
-                    case '0' :
-                        io_config0(); 
-                        break;
-                    case '1' :
-                        io_config1();                      
-                        break;
-                    case '*' :
-                        io_config0(); 
-                        put_rn();
-                        io_config1(); 
-                        break;
-                    case '?' :
-                    default:
-						PRINTF("Enter p0,p1 and p* for all");
-						put_rn();
-                }              
-                break;
-#endif	// USE_PORT
-#if USE_REG_I2C
-    //---------------------------------------------------------------------------------
-    //    I2C register
-    //---------------------------------------------------------------------------------
-            case 'i' :    // 
-                put_r();
-            	i2c_io_reg();
-                i2c_reg();
-                i2c_freq();               
-                break;
-#endif	// USE_REG_I2C
-#if USE_SYS
-    //---------------------------------------------------------------------------------
-    //    System
-    //---------------------------------------------------------------------------------
-            case 's' :    // System related information
-                switch (*ptr++) {
-                    case 'f' :    // sc - show system clock frequency
-                        get_freq_w_print();
-                        break;
-                    case 'c' :    // sc - show system CPU information
-                        cpu_inf();
-                        break;
-                    case '?' :
-                    default:
-                    	put_r();
-                        PRINTF("sc - System CPU information");
-                        put_rn();
-                        PRINTF("sf - System Clock");
-                        put_rn();
-                        break;
-                }
-                break;
-#endif   // USE_SYS
-    //---------------------------------------------------------------------------------
-    //    Help
-    //---------------------------------------------------------------------------------
-            case '?' :
-                put_r();
-                msg_hlp_hw();
-                break;
-    //---------------------------------------------------------------------------------
-    //    Return to main routine
-    //---------------------------------------------------------------------------------
-            case 'q' :        // Quit
-                PRINTF("\rReturn to monitor ");
-                return 0;
-    //---------------------------------------------------------------------------------
-    //    Special command for DEBUG
-    //---------------------------------------------------------------------------------
-#if DEBUG
-            case 'x' :
-				not_yet_impliment();
-                break;
-#endif
-        }
-    }
-}
--- a/mon_hw_config.h	Thu Jul 03 23:07:13 2014 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,30 +0,0 @@
-/*
- * mbed Headder file for the mbed LPC1114FN28 
- *
- *  Copyright (c) 2014 Kenji Arai / JH1PJL
- *  http://www.page.sannet.ne.jp/kenjia/index.html
- *  http://mbed.org/users/kenjiArai/
- *      Created: June       1st, 2014
- *      Revised: July       3rd, 2014
- *
- * 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.
- */
-
-#ifndef _MON_HW_CONF_H_
-#define _MON_HW_CONF_H_
-
-//  Definition ------------------------------------------------------------------------------------
-#define     DEBUG               0
-
-#define     USE_MEM             0
-#define     USE_REG_SPI_UART    0
-#define     USE_PORT            0
-#define     USE_REG_I2C         1
-#define     USE_SYS             1
-#define     USE_EEP             1
-
-#endif  // _MON_HW_CONF_H_