use mbed-src latest version and everything works well. RTC is also fine.

Dependencies:   L3GD20 LIS3DH TextLCD mbed-rtos mbed

Use standard library mbed & mbed-rtos (GR-PEACH can run without mbed-src and special mbed-rtos).

Committer:
kenjiArai
Date:
Sat Jan 10 04:57:33 2015 +0000
Revision:
6:f14cce59e7fe
Parent:
5:dccdaaa1e57b
Child:
8:4006b111c0d4
more simple but problem is there (delete SPI LCD control)

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kenjiArai 4:76b3113c79ff 1 /*
kenjiArai 4:76b3113c79ff 2 * mbed Application program
kenjiArai 4:76b3113c79ff 3 *
kenjiArai 4:76b3113c79ff 4 * Copyright (c) 2010-2014 Kenji Arai / JH1PJL
kenjiArai 4:76b3113c79ff 5 * http://www.page.sannet.ne.jp/kenjia/index.html
kenjiArai 4:76b3113c79ff 6 * http://mbed.org/users/kenjiArai/
kenjiArai 4:76b3113c79ff 7 * Created: May 15th, 2010
kenjiArai 4:76b3113c79ff 8 * Spareted: June 25th, 2014 mon() & mon_hw()
kenjiArai 4:76b3113c79ff 9 * Ported: July 12th, 2014 from L152RE
kenjiArai 6:f14cce59e7fe 10 * Revised: January 10th, 2015
kenjiArai 4:76b3113c79ff 11 *
kenjiArai 4:76b3113c79ff 12 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
kenjiArai 4:76b3113c79ff 13 * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
kenjiArai 4:76b3113c79ff 14 * AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
kenjiArai 4:76b3113c79ff 15 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
kenjiArai 4:76b3113c79ff 16 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
kenjiArai 4:76b3113c79ff 17 */
kenjiArai 4:76b3113c79ff 18
kenjiArai 4:76b3113c79ff 19 // Include ---------------------------------------------------------------------------------------
kenjiArai 4:76b3113c79ff 20 #include "mbed.h"
kenjiArai 4:76b3113c79ff 21 #include "rtos.h"
kenjiArai 4:76b3113c79ff 22
kenjiArai 4:76b3113c79ff 23 // Object ----------------------------------------------------------------------------------------
kenjiArai 4:76b3113c79ff 24 Serial pc(USBTX, USBRX);
kenjiArai 4:76b3113c79ff 25
kenjiArai 4:76b3113c79ff 26 // Definition ------------------------------------------------------------------------------------
kenjiArai 4:76b3113c79ff 27 #define BAUD(x) pc.baud(x)
kenjiArai 4:76b3113c79ff 28 #define GETC(x) pc.getc(x)
kenjiArai 4:76b3113c79ff 29 #define PUTC(x) pc.putc(x)
kenjiArai 4:76b3113c79ff 30 #define PRINTF(...) pc.printf(__VA_ARGS__)
kenjiArai 4:76b3113c79ff 31 #define READABLE(x) pc.readable(x)
kenjiArai 4:76b3113c79ff 32
kenjiArai 4:76b3113c79ff 33 // RAM -------------------------------------------------------------------------------------------
kenjiArai 4:76b3113c79ff 34 static char linebuf[64];
kenjiArai 4:76b3113c79ff 35
kenjiArai 4:76b3113c79ff 36 extern float fa[3]; // Acc 0:X, 1:Y, 2:Z
kenjiArai 4:76b3113c79ff 37 extern float fg[3]; // Gyro 0:X, 1:Y, 2:Z
kenjiArai 4:76b3113c79ff 38 extern uint8_t show_flag;
kenjiArai 4:76b3113c79ff 39
kenjiArai 4:76b3113c79ff 40 // ROM / Constant data ---------------------------------------------------------------------------
kenjiArai 4:76b3113c79ff 41 static char *const mon_msg = "Monitor for mbed system, created on "__DATE__"";
kenjiArai 4:76b3113c79ff 42
kenjiArai 4:76b3113c79ff 43 // Function prototypes ---------------------------------------------------------------------------
kenjiArai 4:76b3113c79ff 44 extern void debug_interface(void);
kenjiArai 4:76b3113c79ff 45 extern int read_sw(uint8_t n);
kenjiArai 4:76b3113c79ff 46
kenjiArai 4:76b3113c79ff 47 //-------------------------------------------------------------------------------------------------
kenjiArai 4:76b3113c79ff 48 // Control Program
kenjiArai 4:76b3113c79ff 49 //-------------------------------------------------------------------------------------------------
kenjiArai 4:76b3113c79ff 50 // Put \r\n
kenjiArai 4:76b3113c79ff 51 static void put_rn ( void ){
kenjiArai 4:76b3113c79ff 52 Thread::yield(); // change thread
kenjiArai 4:76b3113c79ff 53 PUTC('\r');
kenjiArai 4:76b3113c79ff 54 Thread::yield(); // change thread
kenjiArai 4:76b3113c79ff 55 PUTC('\n');
kenjiArai 4:76b3113c79ff 56 }
kenjiArai 4:76b3113c79ff 57
kenjiArai 4:76b3113c79ff 58 // Put \r
kenjiArai 4:76b3113c79ff 59 static void put_r ( void ){
kenjiArai 4:76b3113c79ff 60 Thread::yield(); // change thread
kenjiArai 4:76b3113c79ff 61 PUTC('\r');
kenjiArai 4:76b3113c79ff 62 }
kenjiArai 4:76b3113c79ff 63
kenjiArai 4:76b3113c79ff 64 // Change string -> integer
kenjiArai 4:76b3113c79ff 65 //int xatoi (char **str, unsigned long *res){
kenjiArai 4:76b3113c79ff 66 static int xatoi (char **str, int32_t *res){
kenjiArai 4:76b3113c79ff 67 unsigned long val;
kenjiArai 4:76b3113c79ff 68 unsigned char c, radix, s = 0;
kenjiArai 4:76b3113c79ff 69
kenjiArai 4:76b3113c79ff 70 while ((c = **str) == ' ') (*str)++;
kenjiArai 4:76b3113c79ff 71 if (c == '-') {
kenjiArai 4:76b3113c79ff 72 s = 1;
kenjiArai 4:76b3113c79ff 73 c = *(++(*str));
kenjiArai 4:76b3113c79ff 74 }
kenjiArai 4:76b3113c79ff 75 if (c == '0') {
kenjiArai 4:76b3113c79ff 76 c = *(++(*str));
kenjiArai 4:76b3113c79ff 77 if (c <= ' ') { *res = 0; return 1; }
kenjiArai 4:76b3113c79ff 78 if (c == 'x') {
kenjiArai 4:76b3113c79ff 79 radix = 16;
kenjiArai 4:76b3113c79ff 80 c = *(++(*str));
kenjiArai 4:76b3113c79ff 81 } else {
kenjiArai 4:76b3113c79ff 82 if (c == 'b') {
kenjiArai 4:76b3113c79ff 83 radix = 2;
kenjiArai 4:76b3113c79ff 84 c = *(++(*str));
kenjiArai 4:76b3113c79ff 85 } else {
kenjiArai 4:76b3113c79ff 86 if ((c >= '0')&&(c <= '9')){ radix = 8;
kenjiArai 4:76b3113c79ff 87 } else { return 0;}
kenjiArai 4:76b3113c79ff 88 }
kenjiArai 4:76b3113c79ff 89 }
kenjiArai 4:76b3113c79ff 90 } else {
kenjiArai 4:76b3113c79ff 91 if ((c < '1')||(c > '9')){ return 0;}
kenjiArai 4:76b3113c79ff 92 radix = 10;
kenjiArai 4:76b3113c79ff 93 }
kenjiArai 4:76b3113c79ff 94 val = 0;
kenjiArai 4:76b3113c79ff 95 while (c > ' ') {
kenjiArai 4:76b3113c79ff 96 if (c >= 'a') c -= 0x20;
kenjiArai 4:76b3113c79ff 97 c -= '0';
kenjiArai 4:76b3113c79ff 98 if (c >= 17) {
kenjiArai 4:76b3113c79ff 99 c -= 7;
kenjiArai 4:76b3113c79ff 100 if (c <= 9) return 0;
kenjiArai 4:76b3113c79ff 101 }
kenjiArai 4:76b3113c79ff 102 if (c >= radix) return 0;
kenjiArai 4:76b3113c79ff 103 val = val * radix + c;
kenjiArai 4:76b3113c79ff 104 c = *(++(*str));
kenjiArai 4:76b3113c79ff 105 }
kenjiArai 4:76b3113c79ff 106 if (s) val = -val;
kenjiArai 4:76b3113c79ff 107 *res = val;
kenjiArai 4:76b3113c79ff 108 return 1;
kenjiArai 4:76b3113c79ff 109 }
kenjiArai 4:76b3113c79ff 110
kenjiArai 4:76b3113c79ff 111 //-------------------------------------------------------------------------------------------------
kenjiArai 4:76b3113c79ff 112 // Monitor
kenjiArai 4:76b3113c79ff 113 //-------------------------------------------------------------------------------------------------
kenjiArai 4:76b3113c79ff 114 // Help Massage
kenjiArai 4:76b3113c79ff 115 static void msg_hlp (void){
kenjiArai 4:76b3113c79ff 116 PRINTF(mon_msg); put_rn();
kenjiArai 4:76b3113c79ff 117 PRINTF("d - Show control data"); put_rn();
kenjiArai 4:76b3113c79ff 118 PRINTF("m - Show mail data"); put_rn();
kenjiArai 4:76b3113c79ff 119 PRINTF("s - Show USER Button"); put_rn();
kenjiArai 4:76b3113c79ff 120 PRINTF("t - Check and set RTC"); put_rn();
kenjiArai 4:76b3113c79ff 121 PRINTF("x - Goto HW monitor"); put_rn();
kenjiArai 4:76b3113c79ff 122 PRINTF("q - Return to main"); put_rn();
kenjiArai 4:76b3113c79ff 123 }
kenjiArai 4:76b3113c79ff 124
kenjiArai 4:76b3113c79ff 125 // Get key input data
kenjiArai 4:76b3113c79ff 126 static void get_line (char *buff, int len){
kenjiArai 4:76b3113c79ff 127 char c;
kenjiArai 4:76b3113c79ff 128 int idx = 0;
kenjiArai 4:76b3113c79ff 129
kenjiArai 4:76b3113c79ff 130 for (;;) {
kenjiArai 4:76b3113c79ff 131 c = GETC();
kenjiArai 4:76b3113c79ff 132 // Added by Kenji Arai / JH1PJL May 9th, 2010
kenjiArai 4:76b3113c79ff 133 if (c == '\r') {
kenjiArai 4:76b3113c79ff 134 buff[idx++] = c;
kenjiArai 4:76b3113c79ff 135 break;
kenjiArai 4:76b3113c79ff 136 }
kenjiArai 4:76b3113c79ff 137 if ((c == '\b') && idx) {
kenjiArai 4:76b3113c79ff 138 idx--;
kenjiArai 4:76b3113c79ff 139 PUTC(c);
kenjiArai 4:76b3113c79ff 140 PUTC(' ');
kenjiArai 4:76b3113c79ff 141 PUTC(c);
kenjiArai 4:76b3113c79ff 142 }
kenjiArai 4:76b3113c79ff 143 if (((uint8_t)c >= ' ') && (idx < len - 1)) {
kenjiArai 4:76b3113c79ff 144 buff[idx++] = c;
kenjiArai 4:76b3113c79ff 145 PUTC(c);
kenjiArai 4:76b3113c79ff 146 }
kenjiArai 4:76b3113c79ff 147 Thread::yield(); // change thread
kenjiArai 4:76b3113c79ff 148 Thread::wait(10); // Wait 10mS
kenjiArai 4:76b3113c79ff 149 }
kenjiArai 4:76b3113c79ff 150 buff[idx] = 0;
kenjiArai 4:76b3113c79ff 151 PUTC('\n');
kenjiArai 4:76b3113c79ff 152 }
kenjiArai 4:76b3113c79ff 153
kenjiArai 4:76b3113c79ff 154 // RTC related subroutines
kenjiArai 4:76b3113c79ff 155 static void chk_and_set_time(char *ptr){
kenjiArai 4:76b3113c79ff 156 //unsigned long p1;
kenjiArai 4:76b3113c79ff 157 int32_t p1;
kenjiArai 4:76b3113c79ff 158 struct tm t;
kenjiArai 4:76b3113c79ff 159 time_t seconds;
kenjiArai 4:76b3113c79ff 160 char buf[40];
kenjiArai 4:76b3113c79ff 161
kenjiArai 4:76b3113c79ff 162 if (xatoi(&ptr, &p1)){
kenjiArai 4:76b3113c79ff 163 t.tm_year = (uint8_t)p1 + 100;
kenjiArai 4:76b3113c79ff 164 PRINTF("Year:%d ",p1);
kenjiArai 4:76b3113c79ff 165 xatoi( &ptr, &p1 );
kenjiArai 4:76b3113c79ff 166 t.tm_mon = (uint8_t)p1 - 1;
kenjiArai 4:76b3113c79ff 167 PRINTF("Month:%d ",p1);
kenjiArai 4:76b3113c79ff 168 xatoi( &ptr, &p1 );
kenjiArai 4:76b3113c79ff 169 t.tm_mday = (uint8_t)p1;
kenjiArai 4:76b3113c79ff 170 PRINTF("Day:%d ",p1);
kenjiArai 4:76b3113c79ff 171 xatoi( &ptr, &p1 );
kenjiArai 4:76b3113c79ff 172 t.tm_hour = (uint8_t)p1;
kenjiArai 4:76b3113c79ff 173 PRINTF("Hour:%d ",p1);
kenjiArai 4:76b3113c79ff 174 xatoi( &ptr, &p1 );
kenjiArai 4:76b3113c79ff 175 t.tm_min = (uint8_t)p1;
kenjiArai 4:76b3113c79ff 176 PRINTF("Min:%d ",p1);
kenjiArai 4:76b3113c79ff 177 xatoi( &ptr, &p1 );
kenjiArai 4:76b3113c79ff 178 t.tm_sec = (uint8_t)p1;
kenjiArai 4:76b3113c79ff 179 PRINTF("Sec: %d \r\n",p1);
kenjiArai 4:76b3113c79ff 180 seconds = mktime(&t);
kenjiArai 4:76b3113c79ff 181 set_time(seconds);
kenjiArai 4:76b3113c79ff 182 }
kenjiArai 4:76b3113c79ff 183 seconds = time(NULL);
kenjiArai 4:76b3113c79ff 184 strftime(buf, 40, "%B %d,'%y, %H:%M:%S", localtime(&seconds));
kenjiArai 4:76b3113c79ff 185 PRINTF("Date: %s\r\n", buf);
kenjiArai 4:76b3113c79ff 186 }
kenjiArai 4:76b3113c79ff 187
kenjiArai 4:76b3113c79ff 188 // ---------- Program starts here! ---------------------------------------------------------------
kenjiArai 4:76b3113c79ff 189 int mon(void) {
kenjiArai 4:76b3113c79ff 190 char *ptr;
kenjiArai 4:76b3113c79ff 191
kenjiArai 4:76b3113c79ff 192 BAUD(9600);
kenjiArai 4:76b3113c79ff 193 put_rn();
kenjiArai 4:76b3113c79ff 194 put_rn();
kenjiArai 4:76b3113c79ff 195 PRINTF("%s [Help:'?' key]", mon_msg);
kenjiArai 4:76b3113c79ff 196 put_rn();
kenjiArai 4:76b3113c79ff 197 for (;;) {
kenjiArai 4:76b3113c79ff 198 put_r();
kenjiArai 4:76b3113c79ff 199 PUTC('>');
kenjiArai 4:76b3113c79ff 200 ptr = linebuf;
kenjiArai 4:76b3113c79ff 201 get_line(ptr, sizeof(linebuf));
kenjiArai 4:76b3113c79ff 202 switch (*ptr++) {
kenjiArai 4:76b3113c79ff 203 //---------------------------------------------------------------------------------------------
kenjiArai 4:76b3113c79ff 204 // Check control data
kenjiArai 4:76b3113c79ff 205 //---------------------------------------------------------------------------------------------
kenjiArai 4:76b3113c79ff 206 case 'd' :
kenjiArai 4:76b3113c79ff 207 while(true) {
kenjiArai 4:76b3113c79ff 208 put_r();
kenjiArai 5:dccdaaa1e57b 209 PRINTF("G:%+6.1f,%+6.1f,%+6.1f, ", fg[0], fg[1], fg[2]);
kenjiArai 4:76b3113c79ff 210 Thread::yield(); // change thread
kenjiArai 4:76b3113c79ff 211 PRINTF("A:%+6.1f,%+6.1f,%+6.1f ", fa[0], fa[1], fa[2]);
kenjiArai 4:76b3113c79ff 212 put_rn();
kenjiArai 4:76b3113c79ff 213 if ( READABLE() ) {
kenjiArai 4:76b3113c79ff 214 break;
kenjiArai 4:76b3113c79ff 215 }
kenjiArai 4:76b3113c79ff 216 Thread::wait(200); // Wait 200mS
kenjiArai 4:76b3113c79ff 217 }
kenjiArai 4:76b3113c79ff 218 break;
kenjiArai 4:76b3113c79ff 219 //---------------------------------------------------------------------------------------------
kenjiArai 4:76b3113c79ff 220 // Show Mail data
kenjiArai 4:76b3113c79ff 221 //---------------------------------------------------------------------------------------------
kenjiArai 4:76b3113c79ff 222 case 'm' :
kenjiArai 4:76b3113c79ff 223 put_rn();
kenjiArai 4:76b3113c79ff 224 while(true) {
kenjiArai 4:76b3113c79ff 225 show_flag = 1;
kenjiArai 4:76b3113c79ff 226 if ( READABLE() ) {
kenjiArai 4:76b3113c79ff 227 break;
kenjiArai 4:76b3113c79ff 228 }
kenjiArai 4:76b3113c79ff 229 Thread::wait(100); // Wait 100mS
kenjiArai 4:76b3113c79ff 230 }
kenjiArai 4:76b3113c79ff 231 show_flag = 0;
kenjiArai 4:76b3113c79ff 232 break;
kenjiArai 4:76b3113c79ff 233 //---------------------------------------------------------------------------------------------
kenjiArai 4:76b3113c79ff 234 // Show switch status
kenjiArai 4:76b3113c79ff 235 //---------------------------------------------------------------------------------------------
kenjiArai 4:76b3113c79ff 236 case 's' :
kenjiArai 4:76b3113c79ff 237 put_r();
kenjiArai 4:76b3113c79ff 238 PRINTF("Show USER_Button status");
kenjiArai 4:76b3113c79ff 239 put_rn();
kenjiArai 4:76b3113c79ff 240 PRINTF("every 500mS - hit any key for stop");
kenjiArai 4:76b3113c79ff 241 put_rn();
kenjiArai 4:76b3113c79ff 242 while (true){
kenjiArai 4:76b3113c79ff 243 PRINTF("SW0 = ");
kenjiArai 4:76b3113c79ff 244 if (read_sw(0) == 1) { PRINTF("ON ");
kenjiArai 4:76b3113c79ff 245 } else { PRINTF("OFF");
kenjiArai 4:76b3113c79ff 246 }
kenjiArai 4:76b3113c79ff 247 PRINTF(", SW1 = ");
kenjiArai 4:76b3113c79ff 248 if (read_sw(1) == 1) { PRINTF("ON");
kenjiArai 4:76b3113c79ff 249 } else { PRINTF("OFF");
kenjiArai 4:76b3113c79ff 250 }
kenjiArai 4:76b3113c79ff 251 put_rn();
kenjiArai 4:76b3113c79ff 252 if (READABLE()){ GETC(); break;}
kenjiArai 4:76b3113c79ff 253 wait(0.5);
kenjiArai 4:76b3113c79ff 254 }
kenjiArai 4:76b3113c79ff 255 break;
kenjiArai 4:76b3113c79ff 256 //---------------------------------------------------------------------------------------------
kenjiArai 4:76b3113c79ff 257 // check and set RTC
kenjiArai 4:76b3113c79ff 258 //---------------------------------------------------------------------------------------------
kenjiArai 4:76b3113c79ff 259 case 't' :
kenjiArai 4:76b3113c79ff 260 put_r();
kenjiArai 4:76b3113c79ff 261 chk_and_set_time(ptr);
kenjiArai 4:76b3113c79ff 262 break;
kenjiArai 4:76b3113c79ff 263 //---------------------------------------------------------------------------------------------
kenjiArai 4:76b3113c79ff 264 // help
kenjiArai 4:76b3113c79ff 265 //---------------------------------------------------------------------------------------------
kenjiArai 4:76b3113c79ff 266 case '?' :
kenjiArai 4:76b3113c79ff 267 put_r();
kenjiArai 4:76b3113c79ff 268 msg_hlp();
kenjiArai 4:76b3113c79ff 269 break;
kenjiArai 4:76b3113c79ff 270 //---------------------------------------------------------------------------------------------
kenjiArai 4:76b3113c79ff 271 // Go to special command
kenjiArai 4:76b3113c79ff 272 //---------------------------------------------------------------------------------------------
kenjiArai 4:76b3113c79ff 273 case 'x' :
kenjiArai 4:76b3113c79ff 274 #if defined(TARGET_RZ_A1H)
kenjiArai 4:76b3113c79ff 275 PRINTF("Not implement yet\r\n");
kenjiArai 4:76b3113c79ff 276 #elif defined(TARGET_LPC1114)
kenjiArai 4:76b3113c79ff 277 PRINTF("Not implement yet\r\n");
kenjiArai 4:76b3113c79ff 278 #elif defined(TARGET_NUCLEO_F411RE) || defined(TARGET_STM32F401RE)
kenjiArai 4:76b3113c79ff 279 PRINTF("Not implement yet\r\n");
kenjiArai 4:76b3113c79ff 280 #elif defined(TARGET_LPC1768)
kenjiArai 4:76b3113c79ff 281 PRINTF("Not implement yet\r\n");
kenjiArai 4:76b3113c79ff 282 #elif defined(TARGET_K64F)
kenjiArai 4:76b3113c79ff 283 PRINTF("Not implement yet\r\n");
kenjiArai 4:76b3113c79ff 284 #endif
kenjiArai 4:76b3113c79ff 285 PRINTF("->Came back monitor\r\n");
kenjiArai 4:76b3113c79ff 286 break;
kenjiArai 4:76b3113c79ff 287 //---------------------------------------------------------------------------------------------
kenjiArai 4:76b3113c79ff 288 // Go back to main()
kenjiArai 4:76b3113c79ff 289 //---------------------------------------------------------------------------------------------
kenjiArai 4:76b3113c79ff 290 case 'q' : // Quit
kenjiArai 4:76b3113c79ff 291 PRINTF("\rReturn to main\r\n");
kenjiArai 4:76b3113c79ff 292 PRINTF("cannot control anymore from here\r\n");
kenjiArai 4:76b3113c79ff 293 return 0;
kenjiArai 4:76b3113c79ff 294 }
kenjiArai 4:76b3113c79ff 295 }
kenjiArai 4:76b3113c79ff 296 }