diff options
author | Harald Welte <laforge@gnumonks.org> | 2017-02-03 22:16:47 +0100 |
---|---|---|
committer | Harald Welte <laforge@gnumonks.org> | 2017-02-03 22:22:17 +0100 |
commit | 83207e0cadfea41246ac6e62afaa5d03ead6e83c (patch) | |
tree | 22fb978cefb61a659185aa03c267cd5a8beba906 | |
parent | 2819e9c131258132f4647da2128adcfb11a739b1 (diff) |
Add 'mdelay()' function to busy-wait for given number of milli-seconds
-rw-r--r-- | firmware/include_board/board_common.h | 1 | ||||
-rw-r--r-- | firmware/include_board/syscalls.h | 4 | ||||
-rw-r--r-- | firmware/src_board/board_lowlevel.c | 20 |
3 files changed, 23 insertions, 2 deletions
diff --git a/firmware/include_board/board_common.h b/firmware/include_board/board_common.h index fec8a05..0c162cf 100644 --- a/firmware/include_board/board_common.h +++ b/firmware/include_board/board_common.h @@ -24,6 +24,7 @@ #include "stdlib.h" #include "string.h" #include "inttypes.h" +#include "syscalls.h" #define MIN(a, b) ((a < b) ? a : b) diff --git a/firmware/include_board/syscalls.h b/firmware/include_board/syscalls.h index a4e3865..34f37b8 100644 --- a/firmware/include_board/syscalls.h +++ b/firmware/include_board/syscalls.h @@ -50,8 +50,6 @@ extern caddr_t _sbrk ( int incr ) ; -extern int link( char *old, char *new ) ; - extern int _close( int file ) ; extern int _fstat( int file, struct stat *st ) ; @@ -63,3 +61,5 @@ extern int _lseek( int file, int ptr, int dir ) ; extern int _read(int file, char *ptr, int len) ; extern int _write( int file, char *ptr, int len ) ; + +extern void mdelay(unsigned int msecs); diff --git a/firmware/src_board/board_lowlevel.c b/firmware/src_board/board_lowlevel.c index 807df22..625160e 100644 --- a/firmware/src_board/board_lowlevel.c +++ b/firmware/src_board/board_lowlevel.c @@ -162,4 +162,24 @@ extern WEAK void LowLevelInit( void ) PMC->PMC_MCKR = BOARD_MCKR ;
/* wait for master clock to be ready */
for ( timeout = 0; !(PMC->PMC_SR & PMC_SR_MCKRDY) && (timeout++ < CLOCK_TIMEOUT) ; );
+
+ /* Configure SysTick for 1ms */
+ SysTick_Config(BOARD_MCK/1000);
+}
+
+/* SysTick based delay function */
+
+volatile uint32_t jiffies;
+
+/* Interrupt handler for SysTick interrupt */
+void SysTick_Handler(void)
+{
+ jiffies++;
+}
+
+void mdelay(unsigned int msecs)
+{
+ uint32_t jiffies_start = jiffies;
+ do {
+ } while ((jiffies - jiffies_start) < msecs);
}
|