diff options
author | iperry <iperry@749a229e-a60e-11de-b98f-4500b42dc123> | 2009-12-25 08:39:24 +0000 |
---|---|---|
committer | iperry <iperry@749a229e-a60e-11de-b98f-4500b42dc123> | 2009-12-25 08:39:24 +0000 |
commit | b6674cd738cc22e61ea34cb659750ef45ce01df4 (patch) | |
tree | bfee2ae84883c32871ee13a6e0f346f144263cf6 /src/wiring | |
parent | 3bb04834ffd3f90dc9015997ea11a56d9d150099 (diff) | |
download | librambutan-b6674cd738cc22e61ea34cb659750ef45ce01df4.tar.gz librambutan-b6674cd738cc22e61ea34cb659750ef45ce01df4.zip |
Fixed delayMicroseconds, changed serial interface, added an (untested) runtime check for pwm/serial collision, moved more headers around.
git-svn-id: https://leaflabs.googlecode.com/svn/trunk/library@79 749a229e-a60e-11de-b98f-4500b42dc123
Diffstat (limited to 'src/wiring')
-rw-r--r-- | src/wiring/comm/HardwareSerial.cpp | 3 | ||||
-rw-r--r-- | src/wiring/time.c | 23 | ||||
-rw-r--r-- | src/wiring/time.h | 14 | ||||
-rw-r--r-- | src/wiring/wiring.c | 9 |
4 files changed, 26 insertions, 23 deletions
diff --git a/src/wiring/comm/HardwareSerial.cpp b/src/wiring/comm/HardwareSerial.cpp index 84eb4c7..3d0a0ce 100644 --- a/src/wiring/comm/HardwareSerial.cpp +++ b/src/wiring/comm/HardwareSerial.cpp @@ -27,6 +27,7 @@ #include "HardwareSerial.h" #include "usart.h" #include "gpio.h" +#include "timers.h" #define USART1_TX_PORT GPIOA_BASE #define USART1_TX_PIN 9 @@ -75,6 +76,8 @@ void HardwareSerial::begin(uint32_t baud) { case 2: gpio_set_mode(USART2_TX_PORT, USART2_TX_PIN, GPIO_MODE_AF_OUTPUT_PP); gpio_set_mode(USART2_RX_PORT, USART2_RX_PIN, GPIO_MODE_INPUT_FLOATING); + /* Turn off any pwm */ + timers_disable_channel(2, 3); break; case 3: gpio_set_mode(USART3_TX_PORT, USART3_TX_PIN, GPIO_MODE_AF_OUTPUT_PP); diff --git a/src/wiring/time.c b/src/wiring/time.c index 1a91b5e..164d978 100644 --- a/src/wiring/time.c +++ b/src/wiring/time.c @@ -28,7 +28,7 @@ #include "time.h" #define CYCLES_PER_MICROSECOND 72 -#define THE_SECRET_TO_LIFE_THE_UNIVERSE_AND_EVERYTHING 42 +#define FUDGE 42 extern volatile uint32_t systick_timer_millis; @@ -47,26 +47,13 @@ void delay(unsigned long ms) } -#define MAGIC 4096 -/* HZ = 1000 - * n HZ*/ + +#if 1 void delayMicroseconds(uint32_t us) { uint32_t target; uint32_t last, cur, count; - -#if 0 - asm volatile("mov r0, %[count] \n\t" -"1: \n\t" - "subs r0, r0, #1 \n\t" - "bne 1b" - : - : [count] "r" (count) - : "r0", "cc"); -#endif - -#if 1 /* fudge factor hacky hack hack for function overhead */ - target = us * CYCLES_PER_MICROSECOND - THE_SECRET_TO_LIFE_THE_UNIVERSE_AND_EVERYTHING; + target = us * CYCLES_PER_MICROSECOND - FUDGE; /* Get current count */ last = systick_get_count(); @@ -81,5 +68,5 @@ void delayMicroseconds(uint32_t us) { } last = cur; } -#endif } +#endif diff --git a/src/wiring/time.h b/src/wiring/time.h index a97310a..68b3901 100644 --- a/src/wiring/time.h +++ b/src/wiring/time.h @@ -41,6 +41,20 @@ void delay(unsigned long ms); /* Delay for us microseconds */ void delayMicroseconds(uint32_t us); +#if 0 +static inline void delay_us(uint32 us) { + us *= 12; + asm volatile("mov r0, %[us] \n\t" + "subs r0, #2 \n\t" +"1: \n\t" + "subs r0, r0, #1 \n\t" + "bne 1b" + : + : [us] "r" (us) + : "r0", "cc"); + +} +#endif #ifdef __cplusplus } // extern "C" #endif diff --git a/src/wiring/wiring.c b/src/wiring/wiring.c index cecca20..04de78a 100644 --- a/src/wiring/wiring.c +++ b/src/wiring/wiring.c @@ -47,13 +47,12 @@ void init(void) { gpio_init(); - /* off for debug */ -// adc_init(); + adc_init(); timer_init(1, 1); -// timer_init(2, 1); -// timer_init(3, 1); -// timer_init(4, 1); + timer_init(2, 1); + timer_init(3, 1); + timer_init(4, 1); } void NVIC_Configuration(void) { |