aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHarald Welte <laforge@gnumonks.org>2017-02-03 22:16:47 +0100
committerHarald Welte <laforge@gnumonks.org>2017-02-03 22:22:17 +0100
commit83207e0cadfea41246ac6e62afaa5d03ead6e83c (patch)
tree22fb978cefb61a659185aa03c267cd5a8beba906
parent2819e9c131258132f4647da2128adcfb11a739b1 (diff)
Add 'mdelay()' function to busy-wait for given number of milli-seconds
-rw-r--r--firmware/include_board/board_common.h1
-rw-r--r--firmware/include_board/syscalls.h4
-rw-r--r--firmware/src_board/board_lowlevel.c20
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);
}