OSDN Git Service

Added utility module for Blackfin.
authorShinichiro Nakamura <shinta.main.jp@gmail.com>
Fri, 17 Aug 2012 21:07:22 +0000 (06:07 +0900)
committerShinichiro Nakamura <shinta.main.jp@gmail.com>
Fri, 17 Aug 2012 21:07:22 +0000 (06:07 +0900)
firm/bare_metal/Makefile
firm/bare_metal/bfin_util.c [new file with mode: 0644]
firm/bare_metal/bfin_util.h [new file with mode: 0644]
firm/bare_metal/mmc.c

index 55f8897..a68195f 100644 (file)
@@ -6,7 +6,7 @@ PROJECT = bluetank
 #
 # Source files and search directories
 #
-CSRC   += lcd.c led.c main.c mmc.c pff.c twi.c ssm2603.c
+CSRC   += lcd.c led.c main.c mmc.c pff.c twi.c ssm2603.c bfin_util.c
 ASRC   +=
 VPATH   =
 
diff --git a/firm/bare_metal/bfin_util.c b/firm/bare_metal/bfin_util.c
new file mode 100644 (file)
index 0000000..8b0a02c
--- /dev/null
@@ -0,0 +1,20 @@
+
+#include <cdefBF592-A.h>
+#include "bfin_util.h"
+
+void bfin_util_usleep(const uint32_t usec)
+{
+    uint32_t start;
+    uint32_t now;
+    uint32_t stop = usec * (1000 / 2.5);
+    /* 1 cycle = 2.5ns */
+
+    asm("%0 = CYCLES;" : "=d"(start));
+    while (1) {
+        asm volatile("%0 = CYCLES;" : "=d"(now));
+        if ((now - start) >= stop) {
+            break;
+        }
+    }
+}
+
diff --git a/firm/bare_metal/bfin_util.h b/firm/bare_metal/bfin_util.h
new file mode 100644 (file)
index 0000000..12212f4
--- /dev/null
@@ -0,0 +1,7 @@
+#ifndef BFIN_UTIL_H
+#define BFIN_UTIL_H
+
+void bfin_util_usleep(const uint32_t usec);
+
+#endif
+
index 030cbc9..ca79ecb 100644 (file)
@@ -23,6 +23,7 @@
 \r
 #include "diskio.h"\r
 #include <cdefBF592-A.h>\r
+#include "bfin_util.h"\r
 \r
 /*-------------------------------------------------------------------------*/\r
 /* Platform dependent macros and functions needed to be modified           */\r
@@ -49,7 +50,7 @@
         asm("ssync;"); \\r
     } while (0)\r
 /* Delay n microseconds */\r
-#define DLY_US(n)   do { volatile uint32_t dlycnt; for (dlycnt = 0; dlycnt < (n) * 100; dlycnt++) { asm("nop;"); } } while (0)\r
+#define DLY_US(n)   bfin_util_usleep(n)\r
 /* Data in-time processing function (depends on the project) */\r
 #define FORWARD(d)  do { } while (0)\r
 \r