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
pinsel.h@0:7a91348b4a02, 2011-07-03 (annotated)
- Committer:
- Ivop
- Date:
- Sun Jul 03 17:11:55 2011 +0000
- Revision:
- 0:7a91348b4a02
Who changed what in which revision?
User | Revision | Line number | New 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 |