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 #ifndef FASTLIB_PINSEL_H
Ivop 0:7a91348b4a02 7 #define FASTLIB_PINSEL_H
Ivop 0:7a91348b4a02 8
Ivop 0:7a91348b4a02 9 #include "fastlib/common.h"
Ivop 0:7a91348b4a02 10
Ivop 0:7a91348b4a02 11 #define FL_PINSEL0 ((volatile uint32_t *) 0x4002c000)
Ivop 0:7a91348b4a02 12 #define FL_PINMODE0 ((volatile uint32_t *) 0x4002c040)
Ivop 0:7a91348b4a02 13 #define FL_PINMODE_OD0 ((volatile uint32_t *) 0x4002c068)
Ivop 0:7a91348b4a02 14
Ivop 0:7a91348b4a02 15 #define FL_PULLUP 0
Ivop 0:7a91348b4a02 16 #define FL_REPEATER 1
Ivop 0:7a91348b4a02 17 #define FL_TRISTATE 2
Ivop 0:7a91348b4a02 18 #define FL_FLOATING 2
Ivop 0:7a91348b4a02 19 #define FL_PULLDOWN 3
Ivop 0:7a91348b4a02 20
Ivop 0:7a91348b4a02 21 #define FL_FUNC_DEFAULT 0
Ivop 0:7a91348b4a02 22 #define FL_FUNC_ALT1 1
Ivop 0:7a91348b4a02 23 #define FL_FUNC_ALT2 2
Ivop 0:7a91348b4a02 24 #define FL_FUNC_ALT3 3
Ivop 0:7a91348b4a02 25
Ivop 0:7a91348b4a02 26 /* fl_pinsel(port,pin,func,resistor,opendrain) :
Ivop 0:7a91348b4a02 27 *
Ivop 0:7a91348b4a02 28 * port 0-4
Ivop 0:7a91348b4a02 29 * pin 0-31
Ivop 0:7a91348b4a02 30 * func 0-3 (-1 is ignore) default/alt1/alt2/alt3
Ivop 0:7a91348b4a02 31 * resistor 0-3 (-1 is ignore) pull-up, repeater, tri-state, pull-down
Ivop 0:7a91348b4a02 32 * opendrain 0-1 (-1 is ignore) off, on
Ivop 0:7a91348b4a02 33 */
Ivop 0:7a91348b4a02 34
Ivop 0:7a91348b4a02 35 static inline void fl_pinsel(unsigned port, unsigned pin, const int func, const int resistor, const int opendrain) {
Ivop 0:7a91348b4a02 36 if (opendrain >= 0) {
Ivop 0:7a91348b4a02 37 *(FL_PINMODE_OD0 + port) &= ~( 1U << pin);
Ivop 0:7a91348b4a02 38 *(FL_PINMODE_OD0 + port) |= opendrain << pin ;
Ivop 0:7a91348b4a02 39 }
Ivop 0:7a91348b4a02 40
Ivop 0:7a91348b4a02 41 if (func == -1 && resistor == -1) return;
Ivop 0:7a91348b4a02 42
Ivop 0:7a91348b4a02 43 port <<= 1;
Ivop 0:7a91348b4a02 44 if (pin >= 16) {
Ivop 0:7a91348b4a02 45 pin -= 16;
Ivop 0:7a91348b4a02 46 port++;
Ivop 0:7a91348b4a02 47 }
Ivop 0:7a91348b4a02 48 pin <<= 1;
Ivop 0:7a91348b4a02 49
Ivop 0:7a91348b4a02 50 if (func >= 0) {
Ivop 0:7a91348b4a02 51 *(FL_PINSEL0 + port) &= ~( 3U << pin);
Ivop 0:7a91348b4a02 52 *(FL_PINSEL0 + port) |= func << pin ;
Ivop 0:7a91348b4a02 53 }
Ivop 0:7a91348b4a02 54 if (resistor >= 0) {
Ivop 0:7a91348b4a02 55 *(FL_PINMODE0 + port) &= ~((uint32_t) 3U << pin);
Ivop 0:7a91348b4a02 56 *(FL_PINMODE0 + port) |= (uint32_t)resistor << pin ;
Ivop 0:7a91348b4a02 57 }
Ivop 0:7a91348b4a02 58 }
Ivop 0:7a91348b4a02 59
Ivop 0:7a91348b4a02 60 /* Perhaps move this to i2c.h later??? */
Ivop 0:7a91348b4a02 61
Ivop 0:7a91348b4a02 62 #define FL_I2CPADCFG ((volatile uint32_t *) 0x4002C07C)
Ivop 0:7a91348b4a02 63
Ivop 0:7a91348b4a02 64 #define FL_SDA0_STANDARD_DRIVE (0<<0)
Ivop 0:7a91348b4a02 65 #define FL_SDA0_FAST_DRIVE (1<<0)
Ivop 0:7a91348b4a02 66 #define FL_SDA0_GLITCH_ENABLE (0<<1)
Ivop 0:7a91348b4a02 67 #define FL_SDA0_GLITCH_DISABLE (1<<1)
Ivop 0:7a91348b4a02 68 #define FL_SCL0_STANDARD_DRIVE (0<<2)
Ivop 0:7a91348b4a02 69 #define FL_SCL0_FAST_DRIVE (1<<2)
Ivop 0:7a91348b4a02 70 #define FL_SCL0_GLITCH_ENABLE (0<<3)
Ivop 0:7a91348b4a02 71 #define FL_SCL0_GLITCH_DISABLE (1<<3)
Ivop 0:7a91348b4a02 72
Ivop 0:7a91348b4a02 73 /* pins P0.27 and P0.28 */
Ivop 0:7a91348b4a02 74 static inline void fl_i2c_pad_config(const unsigned config) {
Ivop 0:7a91348b4a02 75 *FL_I2CPADCFG = config;
Ivop 0:7a91348b4a02 76 }
Ivop 0:7a91348b4a02 77
Ivop 0:7a91348b4a02 78 #endif