diff options
author | gdisirio <gdisirio@35acf78f-673a-0410-8e92-d51de3d6d3f4> | 2011-06-04 13:30:13 +0000 |
---|---|---|
committer | gdisirio <gdisirio@35acf78f-673a-0410-8e92-d51de3d6d3f4> | 2011-06-04 13:30:13 +0000 |
commit | 2d4aff80dcd0db460c00d0efa398a06e9bf522eb (patch) | |
tree | b0dfd72d2dd30e294c62f9dac82dde9ba6a4f93a /demos | |
parent | ac3795ec527571f697892d6b0622de7cdd9f6964 (diff) | |
download | ChibiOS-2d4aff80dcd0db460c00d0efa398a06e9bf522eb.tar.gz ChibiOS-2d4aff80dcd0db460c00d0efa398a06e9bf522eb.tar.bz2 ChibiOS-2d4aff80dcd0db460c00d0efa398a06e9bf522eb.zip |
git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@3025 35acf78f-673a-0410-8e92-d51de3d6d3f4
Diffstat (limited to 'demos')
-rw-r--r-- | demos/ARMCM3-STM32F103ZG-FATFS/iar/ch.ewp | 6 | ||||
-rw-r--r-- | demos/ARMCM3-STM32F103ZG-FATFS/main.c | 88 |
2 files changed, 94 insertions, 0 deletions
diff --git a/demos/ARMCM3-STM32F103ZG-FATFS/iar/ch.ewp b/demos/ARMCM3-STM32F103ZG-FATFS/iar/ch.ewp index 711931abd..a66a70295 100644 --- a/demos/ARMCM3-STM32F103ZG-FATFS/iar/ch.ewp +++ b/demos/ARMCM3-STM32F103ZG-FATFS/iar/ch.ewp @@ -1891,6 +1891,9 @@ <name>$PROJ_DIR$\..\..\..\os\kernel\include\ch.h</name>
</file>
<file>
+ <name>$PROJ_DIR$\..\..\..\os\kernel\include\chbsem.h</name>
+ </file>
+ <file>
<name>$PROJ_DIR$\..\..\..\os\kernel\include\chcond.h</name>
</file>
<file>
@@ -1903,6 +1906,9 @@ <name>$PROJ_DIR$\..\..\..\os\kernel\include\chevents.h</name>
</file>
<file>
+ <name>$PROJ_DIR$\..\..\..\os\kernel\include\chfiles.h</name>
+ </file>
+ <file>
<name>$PROJ_DIR$\..\..\..\os\kernel\include\chheap.h</name>
</file>
<file>
diff --git a/demos/ARMCM3-STM32F103ZG-FATFS/main.c b/demos/ARMCM3-STM32F103ZG-FATFS/main.c index 5e1ac9863..374cf7c4a 100644 --- a/demos/ARMCM3-STM32F103ZG-FATFS/main.c +++ b/demos/ARMCM3-STM32F103ZG-FATFS/main.c @@ -22,6 +22,89 @@ #include "hal.h"
#include "test.h"
+/*===========================================================================*/
+/* Card insertion monitor. */
+/*===========================================================================*/
+
+#define SDC_POLLING_INTERVAL 10
+#define SDC_POLLING_DELAY 10
+
+/**
+ * @brief Card monitor timer.
+ */
+static VirtualTimer tmr;
+
+/**
+ * @brief Debounce counter.
+ */
+static unsigned cnt;
+
+/**
+ * @brief Card event sources.
+ */
+static EventSource inserted_event, removed_event;
+
+/**
+ * @brief Inserion monitor function.
+ *
+ * @param[in] sdcp pointer to the @p SDCDriver object
+ *
+ * @notapi
+ */
+static bool_t sdc_lld_is_card_inserted(SDCDriver *sdcp) {
+
+ return TRUE;
+}
+
+/**
+ * @brief Inserion monitor timer callback function.
+ *
+ * @param[in] p pointer to the @p SDCDriver object
+ *
+ * @notapi
+ */
+static void tmrfunc(void *p) {
+ SDCDriver *sdcp = p;
+
+ if (cnt > 0) {
+ if (sdcIsCardInserted(sdcp)) {
+ if (--cnt == 0) {
+ chEvtBroadcastI(&inserted_event);
+ }
+ }
+ else
+ cnt = SDC_POLLING_INTERVAL;
+ }
+ else {
+ if (!sdcIsCardInserted(sdcp)) {
+ cnt = SDC_POLLING_INTERVAL;
+ chEvtBroadcastI(&removed_event);
+ }
+ }
+ chVTSetI(&tmr, MS2ST(SDC_POLLING_DELAY), tmrfunc, sdcp);
+}
+
+/**
+ * @brief Polling monitor start.
+ *
+ * @param[in] sdcp pointer to the @p SDCDriver object
+ *
+ * @notapi
+ */
+static void tmr_init(SDCDriver *sdcp) {
+
+ chEvtInit(&inserted_event);
+ chEvtInit(&removed_event);
+ chSysLock();
+ cnt = SDC_POLLING_INTERVAL;
+ chVTSetI(&tmr, MS2ST(SDC_POLLING_DELAY), tmrfunc, sdcp);
+ chSysUnlock();
+}
+
+/*===========================================================================*/
+/* Main and generic code. */
+/*===========================================================================*/
+
/*
* Red LED blinker thread, times are in milliseconds.
*/
@@ -66,6 +149,11 @@ int main(void) { sdStart(&SD1, NULL);
/*
+ * Activates the card insertion monitor.
+ */
+ tmr_init(&SDCD1);
+
+ /*
* Creates the blinker thread.
*/
chThdCreateStatic(waThread1, sizeof(waThread1), NORMALPRIO, Thread1, NULL);
|