Library to access LPC17xx peripherals. It uses static inline functions, constant propagation and dead code elimination to be as fast as possible.

Dependents:   Chua-VGA Wolfram-1D-VGA WolframRnd-1D-VGA Basin-VGA ... more

Committer:
Ivop
Date:
Sun Jul 17 16:03:50 2011 +0000
Revision:
1:bc492a93e116
added systick support, start of ssp (not finished yet)

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Ivop 1:bc492a93e116 1 /* Copyright (C) 2011 by Ivo van Poorten <ivop@euronet.nl>
Ivop 1:bc492a93e116 2 * This file is licensed under the terms of the GNU Lesser
Ivop 1:bc492a93e116 3 * General Public License, version 3.
Ivop 1:bc492a93e116 4 */
Ivop 1:bc492a93e116 5
Ivop 1:bc492a93e116 6 #ifndef FASTLIB_SYSTICK_H
Ivop 1:bc492a93e116 7 #define FASTLIB_SYSTICK_H
Ivop 1:bc492a93e116 8
Ivop 1:bc492a93e116 9 #include "fastlib/common.h"
Ivop 1:bc492a93e116 10
Ivop 1:bc492a93e116 11 #define FL_STCTRL ((volatile uint32_t *) 0xE000E010)
Ivop 1:bc492a93e116 12 #define FL_STRELOAD ((volatile uint32_t *) 0xE000E014)
Ivop 1:bc492a93e116 13 #define FL_STCURR ((volatile uint32_t *) 0xE000E018)
Ivop 1:bc492a93e116 14 #define FL_STCALIB ((volatile uint32_t *) 0xE000E01C)
Ivop 1:bc492a93e116 15
Ivop 1:bc492a93e116 16 static inline void fl_systick_control(const unsigned enable,
Ivop 1:bc492a93e116 17 const unsigned interrupt_enable,
Ivop 1:bc492a93e116 18 const unsigned use_cpu_clock) {
Ivop 1:bc492a93e116 19 *FL_STCTRL = enable | (interrupt_enable<<1) | (use_cpu_clock<<2);
Ivop 1:bc492a93e116 20 }
Ivop 1:bc492a93e116 21
Ivop 1:bc492a93e116 22 static inline unsigned fl_systick_get_counter_flag(void) {
Ivop 1:bc492a93e116 23 return *FL_STCTRL & (1U<<16);
Ivop 1:bc492a93e116 24 }
Ivop 1:bc492a93e116 25
Ivop 1:bc492a93e116 26 static inline void fl_systick_set_reload_value(const unsigned value) {
Ivop 1:bc492a93e116 27 *FL_STRELOAD = value;
Ivop 1:bc492a93e116 28 }
Ivop 1:bc492a93e116 29
Ivop 1:bc492a93e116 30 static inline unsigned fl_systick_get_reload_value(void) {
Ivop 1:bc492a93e116 31 return *FL_STRELOAD;
Ivop 1:bc492a93e116 32 }
Ivop 1:bc492a93e116 33
Ivop 1:bc492a93e116 34 static inline unsigned fl_systick_get_current_value(void) {
Ivop 1:bc492a93e116 35 return *FL_STCURR;
Ivop 1:bc492a93e116 36 }
Ivop 1:bc492a93e116 37
Ivop 1:bc492a93e116 38 static inline void fl_systick_set_calibration(const unsigned reload_value,
Ivop 1:bc492a93e116 39 const unsigned has_skew,
Ivop 1:bc492a93e116 40 const unsigned no_ext_ref_clock) {
Ivop 1:bc492a93e116 41 *FL_STCALIB = reload_value | (has_skew<<30) | (no_ext_ref_clock<<31);
Ivop 1:bc492a93e116 42 }
Ivop 1:bc492a93e116 43
Ivop 1:bc492a93e116 44 static inline unsigned fl_systick_get_calibration_reload_value(void) {
Ivop 1:bc492a93e116 45 return *FL_STCALIB & ((1U<<24)-1);
Ivop 1:bc492a93e116 46 }
Ivop 1:bc492a93e116 47
Ivop 1:bc492a93e116 48 static inline unsigned fl_systick_get_calibration_skew(void) {
Ivop 1:bc492a93e116 49 return *FL_STCALIB & (1U<<30);
Ivop 1:bc492a93e116 50 }
Ivop 1:bc492a93e116 51
Ivop 1:bc492a93e116 52 static inline unsigned fl_systick_get_calibration_noref(void) {
Ivop 1:bc492a93e116 53 return *FL_STCALIB & (1U<<31);
Ivop 1:bc492a93e116 54 }
Ivop 1:bc492a93e116 55
Ivop 1:bc492a93e116 56 #endif