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
Please refer following Notebook.
http://mbed.org/users/kenjiArai/notebook/mbed-lpc1114fn28-data-logger/
Revision 18:2a1d75bc8ebc, committed 2014-08-11
- 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
--- /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_