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

power.h

Committer:
Ivop
Date:
2012-01-04
Revision:
2:148b9af2b336
Parent:
0:7a91348b4a02

File content as of revision 2:148b9af2b336:

/* Copyright (C) 2010, 2011 by Ivo van Poorten <ivop@euronet.nl>
 * This file is licensed under the terms of the GNU Lesser
 * General Public License, version 3.
 */

/* see chapter 4 of user manual for details on clocks and power */

#ifndef FASTLIB_POWER_H
#define FASTLIB_POWER_H

#include "fastlib/common.h"

#define FL_PCON     ((volatile uint32_t *) 0x400FC0C0)
#define FL_PCONP    ((volatile uint32_t *) 0x400FC0C4)

#define FL_POWER_DOWN                       (1<<0)
#define FL_DEEP_POWER_DOWN                  (1<<1)
#define FL_BROWN_OUT_REDUCED_POWER_MODE     (1<<2)
#define FL_BROWN_OUT_GLOBAL_DISABLE         (1<<3)
#define FL_BROWN_OUT_RESET_DISABLE          (1<<4)

#define FL_FLAG_SLEEP_MODE                  (1<<8)
#define FL_FLAG_DEEP_SLEEP_MODE             (1<<9)
#define FL_FLAG_POWER_DOWN                  (1<<10)
#define FL_FLAG_DEEP_POWER_DOWN             (1<<11)

static inline void fl_set_power_mode(const unsigned mode) {
    *FL_PCON = mode;
}

static inline unsigned fl_get_power_mode(void) {
    return *FL_PCON;
}

#define FL_POWER(peripheral, pos) \
    static inline void fl_power_##peripheral(const unsigned on_off) { \
        *FL_PCONP &= ~(              1U<<pos); \
        *FL_PCONP |=   (unsigned)on_off<<pos; \
    }

FL_POWER(timer0, 1)
FL_POWER(timer1, 2)
FL_POWER(uart0,  3)
FL_POWER(uart1,  4)
FL_POWER(pwm1,   6)
FL_POWER(i2c0,   7)
FL_POWER(spi,    8)
FL_POWER(rtc,    9)
FL_POWER(ssp1,   10)
FL_POWER(adc,    12)
FL_POWER(can1,   13)
FL_POWER(can2,   14)
FL_POWER(gpio,   15)
FL_POWER(rit,    16)
FL_POWER(mcpwm,  17)
FL_POWER(qei,    18)
FL_POWER(i2c1,   19)
FL_POWER(ssp0,   21)
FL_POWER(timer2, 22)
FL_POWER(timer3, 23)
FL_POWER(uart2,  24)
FL_POWER(uart3,  25)
FL_POWER(i2c2,   26)
FL_POWER(i2s,    27)
FL_POWER(gpdma,  29)
FL_POWER(enet,   30)
FL_POWER(usb,    31)

static inline void fl_power_off_all_peripherals(void) {
    *FL_PCONP = 0;
}

static inline void fl_power_on_all_peripherals(void) {
    *FL_PCONP = ~((1<<0) | (1<<5) | (1<<11) | (1<<20) | (1<<28));
}

#endif