git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@3311 35acf78f-673a-0410-8e92-d51de3d6d3f4

master
gdisirio 2011-09-12 18:27:00 +00:00
parent d3e15bccfc
commit 3db4f2d235
1 changed files with 60 additions and 23 deletions

View File

@ -21,29 +21,71 @@
#include "ch.h" #include "ch.h"
#include "hal.h" #include "hal.h"
static const EXTConfig extcfg = { static VirtualTimer vt;
{
{EXT_CH_MODE_DISABLED, NULL},
},
EXT_MODE_EXTI(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
};
/* /* LED set to OFF after 200mS.*/
* Red LED blinker thread, times are in milliseconds. static void ledoff(void *arg) {
*/
static WORKING_AREA(waThread1, 128);
static msg_t Thread1(void *arg) {
(void)arg; (void)arg;
chRegSetThreadName("blinker");
while (TRUE) {
palClearPad(GPIOC, GPIOC_LED);
chThdSleepMilliseconds(500);
palSetPad(GPIOC, GPIOC_LED); palSetPad(GPIOC, GPIOC_LED);
chThdSleepMilliseconds(500);
} }
/* 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. * Application entry point.
*/ */
@ -64,11 +106,6 @@ int main(void) {
*/ */
extStart(&EXTD1, &extcfg); 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 * Normal main() thread activity, in this demo it does nothing except
* sleeping in a loop and check the button state. * sleeping in a loop and check the button state.