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:
Wed Jan 04 01:42:56 2012 +0000
Revision:
2:148b9af2b336
Parent:
0:7a91348b4a02
fixed bug in fl_uart_send_byte. thanks to smayr for finding it

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Ivop 0:7a91348b4a02 1 /* Copyright (C) 2010, 2011 by Ivo van Poorten <ivop@euronet.nl>
Ivop 0:7a91348b4a02 2 * This file is licensed under the terms of the GNU Lesser
Ivop 0:7a91348b4a02 3 * General Public License, version 3.
Ivop 0:7a91348b4a02 4 */
Ivop 0:7a91348b4a02 5
Ivop 0:7a91348b4a02 6 /* see chapter 4 of user manual for details on clocks and power */
Ivop 0:7a91348b4a02 7
Ivop 0:7a91348b4a02 8 #ifndef FASTLIB_POWER_H
Ivop 0:7a91348b4a02 9 #define FASTLIB_POWER_H
Ivop 0:7a91348b4a02 10
Ivop 0:7a91348b4a02 11 #include "fastlib/common.h"
Ivop 0:7a91348b4a02 12
Ivop 0:7a91348b4a02 13 #define FL_PCON ((volatile uint32_t *) 0x400FC0C0)
Ivop 0:7a91348b4a02 14 #define FL_PCONP ((volatile uint32_t *) 0x400FC0C4)
Ivop 0:7a91348b4a02 15
Ivop 0:7a91348b4a02 16 #define FL_POWER_DOWN (1<<0)
Ivop 0:7a91348b4a02 17 #define FL_DEEP_POWER_DOWN (1<<1)
Ivop 0:7a91348b4a02 18 #define FL_BROWN_OUT_REDUCED_POWER_MODE (1<<2)
Ivop 0:7a91348b4a02 19 #define FL_BROWN_OUT_GLOBAL_DISABLE (1<<3)
Ivop 0:7a91348b4a02 20 #define FL_BROWN_OUT_RESET_DISABLE (1<<4)
Ivop 0:7a91348b4a02 21
Ivop 0:7a91348b4a02 22 #define FL_FLAG_SLEEP_MODE (1<<8)
Ivop 0:7a91348b4a02 23 #define FL_FLAG_DEEP_SLEEP_MODE (1<<9)
Ivop 0:7a91348b4a02 24 #define FL_FLAG_POWER_DOWN (1<<10)
Ivop 0:7a91348b4a02 25 #define FL_FLAG_DEEP_POWER_DOWN (1<<11)
Ivop 0:7a91348b4a02 26
Ivop 0:7a91348b4a02 27 static inline void fl_set_power_mode(const unsigned mode) {
Ivop 0:7a91348b4a02 28 *FL_PCON = mode;
Ivop 0:7a91348b4a02 29 }
Ivop 0:7a91348b4a02 30
Ivop 0:7a91348b4a02 31 static inline unsigned fl_get_power_mode(void) {
Ivop 0:7a91348b4a02 32 return *FL_PCON;
Ivop 0:7a91348b4a02 33 }
Ivop 0:7a91348b4a02 34
Ivop 0:7a91348b4a02 35 #define FL_POWER(peripheral, pos) \
Ivop 0:7a91348b4a02 36 static inline void fl_power_##peripheral(const unsigned on_off) { \
Ivop 0:7a91348b4a02 37 *FL_PCONP &= ~( 1U<<pos); \
Ivop 0:7a91348b4a02 38 *FL_PCONP |= (unsigned)on_off<<pos; \
Ivop 0:7a91348b4a02 39 }
Ivop 0:7a91348b4a02 40
Ivop 0:7a91348b4a02 41 FL_POWER(timer0, 1)
Ivop 0:7a91348b4a02 42 FL_POWER(timer1, 2)
Ivop 0:7a91348b4a02 43 FL_POWER(uart0, 3)
Ivop 0:7a91348b4a02 44 FL_POWER(uart1, 4)
Ivop 0:7a91348b4a02 45 FL_POWER(pwm1, 6)
Ivop 0:7a91348b4a02 46 FL_POWER(i2c0, 7)
Ivop 0:7a91348b4a02 47 FL_POWER(spi, 8)
Ivop 0:7a91348b4a02 48 FL_POWER(rtc, 9)
Ivop 0:7a91348b4a02 49 FL_POWER(ssp1, 10)
Ivop 0:7a91348b4a02 50 FL_POWER(adc, 12)
Ivop 0:7a91348b4a02 51 FL_POWER(can1, 13)
Ivop 0:7a91348b4a02 52 FL_POWER(can2, 14)
Ivop 0:7a91348b4a02 53 FL_POWER(gpio, 15)
Ivop 0:7a91348b4a02 54 FL_POWER(rit, 16)
Ivop 0:7a91348b4a02 55 FL_POWER(mcpwm, 17)
Ivop 0:7a91348b4a02 56 FL_POWER(qei, 18)
Ivop 0:7a91348b4a02 57 FL_POWER(i2c1, 19)
Ivop 0:7a91348b4a02 58 FL_POWER(ssp0, 21)
Ivop 0:7a91348b4a02 59 FL_POWER(timer2, 22)
Ivop 0:7a91348b4a02 60 FL_POWER(timer3, 23)
Ivop 0:7a91348b4a02 61 FL_POWER(uart2, 24)
Ivop 0:7a91348b4a02 62 FL_POWER(uart3, 25)
Ivop 0:7a91348b4a02 63 FL_POWER(i2c2, 26)
Ivop 0:7a91348b4a02 64 FL_POWER(i2s, 27)
Ivop 0:7a91348b4a02 65 FL_POWER(gpdma, 29)
Ivop 0:7a91348b4a02 66 FL_POWER(enet, 30)
Ivop 0:7a91348b4a02 67 FL_POWER(usb, 31)
Ivop 0:7a91348b4a02 68
Ivop 0:7a91348b4a02 69 static inline void fl_power_off_all_peripherals(void) {
Ivop 0:7a91348b4a02 70 *FL_PCONP = 0;
Ivop 0:7a91348b4a02 71 }
Ivop 0:7a91348b4a02 72
Ivop 0:7a91348b4a02 73 static inline void fl_power_on_all_peripherals(void) {
Ivop 0:7a91348b4a02 74 *FL_PCONP = ~((1<<0) | (1<<5) | (1<<11) | (1<<20) | (1<<28));
Ivop 0:7a91348b4a02 75 }
Ivop 0:7a91348b4a02 76
Ivop 0:7a91348b4a02 77 #endif