OSDN Git Service

Added SDC detect signal.
authorShinichiro Nakamura <shinta.main.jp@gmail.com>
Sun, 22 Jul 2012 00:45:34 +0000 (09:45 +0900)
committerShinichiro Nakamura <shinta.main.jp@gmail.com>
Sun, 22 Jul 2012 00:45:34 +0000 (09:45 +0900)
firm/sample/simple_mp3_player/bootload/main.c
firm/sample/simple_mp3_player/bootload/portconf.h

index 22bb0c4..8a4c080 100644 (file)
@@ -12,6 +12,7 @@
 #include "sg12232c.h"
 #include "vs1011e.h"
 #include "spi.h"
+#include "portconf.h"
 
 static int init(void)
 {
@@ -30,38 +31,45 @@ static int init(void)
 
   /* ¥·¥ê¥¢¥ë¤Î½é´ü²½ */
   serial_init(SERIAL_DEFAULT_DEVICE);
-  puts("Init : Serial.\n");
+  puts("\n");
 
   /* DRAM¤Î½é´ü²½ */
+  puts("Init : DRAM...");
   dram_init();
-  puts("Init : DRAM.\n");
+  puts("Done.\n");
 
   /* LED¤Î½é´ü²½ */
+  puts("Init : LED...");
   led_init();
-  puts("Init : LED.\n");
+  puts("Done.\n");
 
   /* ¥í¡¼¥¿¥ê¡¼¥¨¥ó¥³¡¼¥À¡¼¤Î½é´ü²½ */
+  puts("Init : Rotary Encoder...");
   re_init();
-  puts("Init : Rotary Encoder.\n");
+  puts("Done.\n");
 
   /* ¥¹¥¤¥Ã¥Á¤Î½é´ü²½ */
+  puts("Init : Switch...");
   sw_init();
-  puts("Init : Switch.\n");
+  puts("Done.\n");
 
   /* LCD¤Î½é´ü²½ */
+  puts("Init : LCD...");
   sg12232c_init();
   sg12232c_clear();
   sg12232c_draw_box(0, 0, 121, 31, 0);
   sg12232c_draw_string(2, 2, "KOZOS EXPBRD #00", 0);
-  puts("Init : LCD.\n");
+  puts("Done.\n");
 
   /* SPI Bus initializing. */
+  puts("Init : SPI Bus...");
   spi_init();
-  puts("Init : SPI Bus.\n");
+  puts("Done.\n");
 
   /* VS1011e */
+  puts("Init : VS1011E...");
   vs1011e_init();
-  puts("Init : VS1011E.\n");
+  puts("Done.\n");
 
   volatile int i;
 
@@ -70,9 +78,10 @@ static int init(void)
    * R : Min.
    */
   {
+    puts("Init : Phone (L)...");
     led_write(Led1, LedOn);
     led_write(Led2, LedOff);
-    vs1011e_volume_write(0x10, 0xF0);
+    vs1011e_volume_write(0x1A, 0xF0);
 
     vs1011e_sinetest_init();
     for (i = 0; i < 20000; i++) { }
@@ -88,6 +97,7 @@ static int init(void)
     for (i = 0; i < 20000; i++) { }
     vs1011e_sinetest_fini();
     for (i = 0; i < 20000; i++) { }
+    puts("Done.\n");
   }
 
   /*
@@ -95,9 +105,10 @@ static int init(void)
    * R : Max.
    */
   {
+    puts("Init : Phone (R)...");
     led_write(Led1, LedOff);
     led_write(Led2, LedOn);
-    vs1011e_volume_write(0xF0, 0x10);
+    vs1011e_volume_write(0xF0, 0x1A);
 
     vs1011e_sinetest_init();
     for (i = 0; i < 20000; i++) { }
@@ -113,11 +124,22 @@ static int init(void)
     for (i = 0; i < 20000; i++) { }
     vs1011e_sinetest_fini();
     for (i = 0; i < 20000; i++) { }
+    puts("Done.\n");
   }
 
   led_write(Led1, LedOff);
   led_write(Led2, LedOff);
-  vs1011e_volume_write(0x10, 0x10);
+  vs1011e_volume_write(0x1A, 0x1A);
+
+  uint8 vol_left, vol_right;
+  vs1011e_volume_read(&vol_left, &vol_right);
+  puts("Init : Volume (L:");
+  putxval(vol_left, 2);
+  puts(",R:");
+  putxval(vol_right, 2);
+  puts(")\n");
+
+  puts("Init : All Done.\n");
 
   return 0;
 }
@@ -280,8 +302,18 @@ int main(void)
 
   init();
 
-  boot_from_sdc("kozos");
-  boot_from_ser();
+  if (PORTCONF_SDC_DETECT()) {
+      puts("Boot : SDC detected.\n");
+      puts("Boot : Booting from SDC.\n");
+      boot_from_sdc("kozos");
+      puts("Boot : Boot from SDC failed.\n");
+      puts("Boot : Going to serial boot mode.\n");
+      boot_from_ser();
+  } else {
+      puts("Boot : SDC not found.\n");
+      puts("Boot : Going to serial boot mode.\n");
+      boot_from_ser();
+  }
 
   for (;;) { }
 
index c1b7d0e..301873b 100644 (file)
@@ -37,6 +37,7 @@
 #define PORTCONF_PBBIT_MISO     (1 << 7)
 
 #define PORTCONF_P4BIT_SDCCS    (1 << 0)
+#define PORTCONF_P4BIT_SDCDET   (1 << 1)
 #define PORTCONF_P4BIT_VSCCS    (1 << 2)
 #define PORTCONF_P4BIT_VSDCS    (1 << 3)
 #define PORTCONF_P4BIT_VSDREQ   (1 << 4)
 #define PORTCONF_P7BIT_SW1      (1 << 0)
 #define PORTCONF_P7BIT_SW2      (1 << 1)
 
+/*
+ * Utilities
+ */
+#define PORTCONF_SDC_DETECT()   (!(*PORTCONF_P4DR & PORTCONF_P4BIT_SDCDET))
+
 #endif