aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--testhal/STM32F1xx/EXT/main.c83
1 files changed, 60 insertions, 23 deletions
diff --git a/testhal/STM32F1xx/EXT/main.c b/testhal/STM32F1xx/EXT/main.c
index ce21c1fd8..a438c3035 100644
--- a/testhal/STM32F1xx/EXT/main.c
+++ b/testhal/STM32F1xx/EXT/main.c
@@ -21,29 +21,71 @@
#include "ch.h"
#include "hal.h"
-static const EXTConfig extcfg = {
- {
- {EXT_CH_MODE_DISABLED, NULL},
- },
- EXT_MODE_EXTI(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
-};
+static VirtualTimer vt;
-/*
- * Red LED blinker thread, times are in milliseconds.
- */
-static WORKING_AREA(waThread1, 128);
-static msg_t Thread1(void *arg) {
+/* LED set to OFF after 200mS.*/
+static void ledoff(void *arg) {
(void)arg;
- chRegSetThreadName("blinker");
- while (TRUE) {
- palClearPad(GPIOC, GPIOC_LED);
- chThdSleepMilliseconds(500);
- palSetPad(GPIOC, GPIOC_LED);
- chThdSleepMilliseconds(500);
- }
+ palSetPad(GPIOC, GPIOC_LED);
+}
+
+/* Triggered when the button is pressed or released. The LED is set to ON.*/
+static void extcb1(EXTDriver *extp, expchannel_t channel) {
+
+ (void)extp;
+ (void)channel;
+ palClearPad(GPIOC, GPIOC_LED);
+ chSysLockFromIsr();
+ if (!chVTIsArmedI(&vt))
+ chVTSetI(&vt, MS2ST(200), ledoff, NULL);
+ chSysUnlockFromIsr();
+}
+
+/* Triggered when the LED goes OFF.*/
+static void extcb2(EXTDriver *extp, expchannel_t channel) {
+
+ (void)extp;
+ (void)channel;
}
+static const EXTConfig extcfg = {
+ {
+ {EXT_CH_MODE_BOTH_EDGES, extcb1},
+ {EXT_CH_MODE_DISABLED, NULL},
+ {EXT_CH_MODE_DISABLED, NULL},
+ {EXT_CH_MODE_DISABLED, NULL},
+ {EXT_CH_MODE_DISABLED, NULL},
+ {EXT_CH_MODE_DISABLED, NULL},
+ {EXT_CH_MODE_DISABLED, NULL},
+ {EXT_CH_MODE_DISABLED, NULL},
+ {EXT_CH_MODE_DISABLED, NULL},
+ {EXT_CH_MODE_DISABLED, NULL},
+ {EXT_CH_MODE_DISABLED, NULL},
+ {EXT_CH_MODE_DISABLED, NULL},
+ {EXT_CH_MODE_RISING_EDGE, extcb2},
+ {EXT_CH_MODE_DISABLED, NULL},
+ {EXT_CH_MODE_DISABLED, NULL},
+ {EXT_CH_MODE_DISABLED, NULL},
+ },
+ EXT_MODE_EXTI(EXT_MODE_GPIOA,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ EXT_MODE_GPIOC,
+ 0,
+ 0,
+ 0)
+};
+
/*
* Application entry point.
*/
@@ -65,11 +107,6 @@ int main(void) {
extStart(&EXTD1, &extcfg);
/*
- * Creates the blinker thread.
- */
- chThdCreateStatic(waThread1, sizeof(waThread1), NORMALPRIO, Thread1, NULL);
-
- /*
* Normal main() thread activity, in this demo it does nothing except
* sleeping in a loop and check the button state.
*/