diff options
| author | Keith Packard <keithp@keithp.com> | 2013-04-18 16:15:52 -0500 | 
|---|---|---|
| committer | Keith Packard <keithp@keithp.com> | 2013-05-17 03:50:07 -0700 | 
| commit | f9d0eb3f3154f98abb0c8952d7171f3e7d3de9b2 (patch) | |
| tree | b75b55aca8bf566f17afee9f332dd5859787c983 | |
| parent | 04b243e6ef212f54ed284cfbde6d5abb637bf60e (diff) | |
altos/lpc: Get 100Hz timer running
Use systick, which is built into the ARM core
Signed-off-by: Keith Packard <keithp@keithp.com>
| -rw-r--r-- | src/lpc/ao_led_lpc.c | 5 | ||||
| -rw-r--r-- | src/lpc/ao_timer_lpc.c | 2 | ||||
| -rw-r--r-- | src/lpcxpresso/ao_demo.c | 26 | 
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;  	}  }  | 
