summaryrefslogtreecommitdiff
path: root/frontends/calculator/CEdev/examples/stopwatch
diff options
context:
space:
mode:
Diffstat (limited to 'frontends/calculator/CEdev/examples/stopwatch')
-rw-r--r--frontends/calculator/CEdev/examples/stopwatch/makefile15
-rw-r--r--frontends/calculator/CEdev/examples/stopwatch/readme.md10
-rw-r--r--frontends/calculator/CEdev/examples/stopwatch/screenshot.pngbin0 -> 40879 bytes
-rw-r--r--frontends/calculator/CEdev/examples/stopwatch/src/main.c60
4 files changed, 85 insertions, 0 deletions
diff --git a/frontends/calculator/CEdev/examples/stopwatch/makefile b/frontends/calculator/CEdev/examples/stopwatch/makefile
new file mode 100644
index 0000000..1f1b36b
--- /dev/null
+++ b/frontends/calculator/CEdev/examples/stopwatch/makefile
@@ -0,0 +1,15 @@
+# ----------------------------
+# Set NAME to the program name
+# Set ICON to the png icon file name
+# Set DESCRIPTION to display within a compatible shell
+# Set COMPRESSED to "YES" to create a compressed program
+# ----------------------------
+
+NAME ?= DEMO
+COMPRESSED ?= NO
+ICON ?= iconc.png
+DESCRIPTION ?= "C SDK Demo"
+
+# ----------------------------
+
+include $(CEDEV)/include/.makefile
diff --git a/frontends/calculator/CEdev/examples/stopwatch/readme.md b/frontends/calculator/CEdev/examples/stopwatch/readme.md
new file mode 100644
index 0000000..a10bdb9
--- /dev/null
+++ b/frontends/calculator/CEdev/examples/stopwatch/readme.md
@@ -0,0 +1,10 @@
+### Stopwatch Demo
+
+This demo demonstrates using the hardware timers to make a simple stopwatch
+displaying millisecond precision.
+
+![Screenshot](screenshot.png)
+
+---
+
+This demo is a part of the C SDK Toolchain for use on the CE.
diff --git a/frontends/calculator/CEdev/examples/stopwatch/screenshot.png b/frontends/calculator/CEdev/examples/stopwatch/screenshot.png
new file mode 100644
index 0000000..3642282
--- /dev/null
+++ b/frontends/calculator/CEdev/examples/stopwatch/screenshot.png
Binary files differ
diff --git a/frontends/calculator/CEdev/examples/stopwatch/src/main.c b/frontends/calculator/CEdev/examples/stopwatch/src/main.c
new file mode 100644
index 0000000..3ec82b1
--- /dev/null
+++ b/frontends/calculator/CEdev/examples/stopwatch/src/main.c
@@ -0,0 +1,60 @@
+#include <stdbool.h>
+#include <stddef.h>
+#include <stdint.h>
+#include <tice.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+/* Print a stopwatch value on the home screen */
+void print(float elapsed) {
+ /* Float format for printf may be unimplemented, so go through an OS real */
+ real_t elapsed_real;
+
+ /* Max stopwatch value is (2^32 - 1) / 32768 = 131072.00, */
+ /* so create a buffer with room for 9 characters plus a null terminator */
+ char str[10];
+
+ /* If the elapsed time is small enough that the OS would print it using */
+ /* scientific notation, force it down to zero before conversion */
+ elapsed_real = os_FloatToReal(elapsed <= 0.001f ? 0.0f : elapsed);
+
+ /* Convert the elapsed time real to a string */
+ os_RealToStr(str, &elapsed_real, 8, 1, 2);
+
+ /* Print the string */
+ os_SetCursorPos(0, 0);
+ os_PutStrFull(str);
+}
+
+/* Put all your code here */
+void main(void) {
+ /* Clear the homescreen */
+ os_ClrHome();
+
+ /* Display an initial time of zero */
+ print(0.0f);
+
+ /* Disable the timer */
+ timer_Control = TIMER1_DISABLE;
+
+ /* Reset the timer's counter */
+ timer_1_Counter = 0;
+
+ /* Wait for a key press */
+ while (!os_GetCSC());
+
+ /* Enable the timer while setting it to 32768 KHz and making it count up */
+ timer_Control = TIMER1_ENABLE | TIMER1_32K | TIMER1_UP;
+
+ /* Continue running until a key is pressed */
+ do {
+ /* Calculate and print the elapsed time */
+ float elapsed = (float)atomic_load_increasing_32(&timer_1_Counter) / 32768;
+ print(elapsed);
+ } while (!os_GetCSC());
+
+ /* Wait for a key press */
+ while (!os_GetCSC());
+}