summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorKeith Packard <keithp@keithp.com>2013-04-18 16:15:52 -0500
committerKeith Packard <keithp@keithp.com>2013-05-17 03:50:07 -0700
commitf9d0eb3f3154f98abb0c8952d7171f3e7d3de9b2 (patch)
treeb75b55aca8bf566f17afee9f332dd5859787c983 /src
parent04b243e6ef212f54ed284cfbde6d5abb637bf60e (diff)
altos/lpc: Get 100Hz timer running
Use systick, which is built into the ARM core Signed-off-by: Keith Packard <keithp@keithp.com>
Diffstat (limited to 'src')
-rw-r--r--src/lpc/ao_led_lpc.c5
-rw-r--r--src/lpc/ao_timer_lpc.c2
-rw-r--r--src/lpcxpresso/ao_demo.c26
3 files changed, 26 insertions, 7 deletions
diff --git a/src/lpc/ao_led_lpc.c b/src/lpc/ao_led_lpc.c
index 098dad6b..7bef51ba 100644
--- a/src/lpc/ao_led_lpc.c
+++ b/src/lpc/ao_led_lpc.c
@@ -22,13 +22,13 @@ __pdata uint16_t ao_led_enable;
void
ao_led_on(uint16_t colors)
{
- lpc_gpio.pin[LED_PORT] = 0xffffffff;
+ lpc_gpio.pin[LED_PORT] |= colors;
}
void
ao_led_off(uint16_t colors)
{
- lpc_gpio.pin[LED_PORT] = 0;
+ lpc_gpio.pin[LED_PORT] &= ~colors;
}
void
@@ -44,6 +44,7 @@ ao_led_set(uint16_t colors)
void
ao_led_toggle(uint16_t colors)
{
+ lpc_gpio.pin[LED_PORT] ^= colors;
}
void
diff --git a/src/lpc/ao_timer_lpc.c b/src/lpc/ao_timer_lpc.c
index aa796acf..51e82525 100644
--- a/src/lpc/ao_timer_lpc.c
+++ b/src/lpc/ao_timer_lpc.c
@@ -61,7 +61,7 @@ ao_timer_set_adc_interval(uint8_t interval)
}
#endif
-#define SYSTICK_RELOAD ((AO_LPC_CLKOUT / 2) / 100 - 1)
+#define SYSTICK_RELOAD ((AO_LPC_SYSCLK / 2) / 100 - 1)
/* Initialize our 100Hz clock */
void
diff --git a/src/lpcxpresso/ao_demo.c b/src/lpcxpresso/ao_demo.c
index bb8402f7..56fef706 100644
--- a/src/lpcxpresso/ao_demo.c
+++ b/src/lpcxpresso/ao_demo.c
@@ -17,6 +17,15 @@
#include "ao.h"
+struct ao_task demo_task;
+
+static void demo(void) {
+ for (;;) {
+ ao_delay(100);
+ ao_led_toggle(AO_LED_RED);
+ }
+}
+
int
main(void)
{
@@ -24,13 +33,22 @@ main(void)
ao_led_init(LEDS_AVAILABLE);
ao_led_on(AO_LED_RED);
ao_clock_init();
+ ao_timer_init();
+
+ ao_task_init();
+
+ ao_add_task(&demo_task, demo, "demo");
+
+ ao_start_scheduler();
for (;;) {
ao_led_off(AO_LED_RED);
- for (i = 0; i < 100000; i++)
- ao_arch_nop();
+ for (;;)
+ if (ao_tick_count & 1)
+ break;
ao_led_on(AO_LED_RED);
- for (i = 0; i < 100000; i++)
- ao_arch_nop();
+ for (;;)
+ if (!(ao_tick_count & 1))
+ break;
}
}