Fork of Smoothie to port to mbed non-LPC targets.
Fork of Smoothie by
libs/gpio.cpp@3:f151d08d335c, 2014-03-02 (annotated)
- Committer:
- Bigcheese
- Date:
- Sun Mar 02 06:33:08 2014 +0000
- Revision:
- 3:f151d08d335c
- Parent:
- 2:1df0b61d3b5a
Bunch of stuff. Need to locally merge in updated USB changes.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Michael J. Spencer |
2:1df0b61d3b5a | 1 | #include "gpio.h" |
Michael J. Spencer |
2:1df0b61d3b5a | 2 | |
Michael J. Spencer |
2:1df0b61d3b5a | 3 | #include "LPC17xx.h" |
Michael J. Spencer |
2:1df0b61d3b5a | 4 | #include "lpc17xx_pinsel.h" |
Michael J. Spencer |
2:1df0b61d3b5a | 5 | #include "lpc17xx_gpio.h" |
Michael J. Spencer |
2:1df0b61d3b5a | 6 | |
Michael J. Spencer |
2:1df0b61d3b5a | 7 | GPIO::GPIO(PinName pin) { |
Michael J. Spencer |
2:1df0b61d3b5a | 8 | this->port = (pin >> 5) & 7; |
Michael J. Spencer |
2:1df0b61d3b5a | 9 | this->pin = pin & 0x1F; |
Michael J. Spencer |
2:1df0b61d3b5a | 10 | |
Michael J. Spencer |
2:1df0b61d3b5a | 11 | setup(); |
Michael J. Spencer |
2:1df0b61d3b5a | 12 | } |
Michael J. Spencer |
2:1df0b61d3b5a | 13 | |
Michael J. Spencer |
2:1df0b61d3b5a | 14 | GPIO::GPIO(uint8_t port, uint8_t pin) { |
Michael J. Spencer |
2:1df0b61d3b5a | 15 | GPIO::port = port; |
Michael J. Spencer |
2:1df0b61d3b5a | 16 | GPIO::pin = pin; |
Michael J. Spencer |
2:1df0b61d3b5a | 17 | |
Michael J. Spencer |
2:1df0b61d3b5a | 18 | setup(); |
Michael J. Spencer |
2:1df0b61d3b5a | 19 | } |
Michael J. Spencer |
2:1df0b61d3b5a | 20 | |
Michael J. Spencer |
2:1df0b61d3b5a | 21 | GPIO::GPIO(uint8_t port, uint8_t pin, uint8_t direction) { |
Michael J. Spencer |
2:1df0b61d3b5a | 22 | GPIO::port = port; |
Michael J. Spencer |
2:1df0b61d3b5a | 23 | GPIO::pin = pin; |
Michael J. Spencer |
2:1df0b61d3b5a | 24 | |
Michael J. Spencer |
2:1df0b61d3b5a | 25 | setup(); |
Michael J. Spencer |
2:1df0b61d3b5a | 26 | |
Michael J. Spencer |
2:1df0b61d3b5a | 27 | set_direction(direction); |
Michael J. Spencer |
2:1df0b61d3b5a | 28 | } |
Michael J. Spencer |
2:1df0b61d3b5a | 29 | // GPIO::~GPIO() {} |
Michael J. Spencer |
2:1df0b61d3b5a | 30 | |
Michael J. Spencer |
2:1df0b61d3b5a | 31 | void GPIO::setup() { |
Michael J. Spencer |
2:1df0b61d3b5a | 32 | PINSEL_CFG_Type PinCfg; |
Michael J. Spencer |
2:1df0b61d3b5a | 33 | PinCfg.Funcnum = 0; |
Michael J. Spencer |
2:1df0b61d3b5a | 34 | PinCfg.OpenDrain = PINSEL_PINMODE_NORMAL; |
Michael J. Spencer |
2:1df0b61d3b5a | 35 | PinCfg.Pinmode = PINSEL_PINMODE_TRISTATE; |
Michael J. Spencer |
2:1df0b61d3b5a | 36 | PinCfg.Portnum = GPIO::port; |
Michael J. Spencer |
2:1df0b61d3b5a | 37 | PinCfg.Pinnum = GPIO::pin; |
Michael J. Spencer |
2:1df0b61d3b5a | 38 | PINSEL_ConfigPin(&PinCfg); |
Michael J. Spencer |
2:1df0b61d3b5a | 39 | } |
Michael J. Spencer |
2:1df0b61d3b5a | 40 | |
Michael J. Spencer |
2:1df0b61d3b5a | 41 | void GPIO::set_direction(uint8_t direction) { |
Michael J. Spencer |
2:1df0b61d3b5a | 42 | FIO_SetDir(port, 1UL << pin, direction); |
Michael J. Spencer |
2:1df0b61d3b5a | 43 | } |
Michael J. Spencer |
2:1df0b61d3b5a | 44 | |
Michael J. Spencer |
2:1df0b61d3b5a | 45 | void GPIO::output() { |
Michael J. Spencer |
2:1df0b61d3b5a | 46 | set_direction(1); |
Michael J. Spencer |
2:1df0b61d3b5a | 47 | } |
Michael J. Spencer |
2:1df0b61d3b5a | 48 | |
Michael J. Spencer |
2:1df0b61d3b5a | 49 | void GPIO::input() { |
Michael J. Spencer |
2:1df0b61d3b5a | 50 | set_direction(0); |
Michael J. Spencer |
2:1df0b61d3b5a | 51 | } |
Michael J. Spencer |
2:1df0b61d3b5a | 52 | |
Michael J. Spencer |
2:1df0b61d3b5a | 53 | void GPIO::write(uint8_t value) { |
Michael J. Spencer |
2:1df0b61d3b5a | 54 | output(); |
Michael J. Spencer |
2:1df0b61d3b5a | 55 | if (value) |
Michael J. Spencer |
2:1df0b61d3b5a | 56 | set(); |
Michael J. Spencer |
2:1df0b61d3b5a | 57 | else |
Michael J. Spencer |
2:1df0b61d3b5a | 58 | clear(); |
Michael J. Spencer |
2:1df0b61d3b5a | 59 | } |
Michael J. Spencer |
2:1df0b61d3b5a | 60 | |
Michael J. Spencer |
2:1df0b61d3b5a | 61 | void GPIO::set() { |
Michael J. Spencer |
2:1df0b61d3b5a | 62 | FIO_SetValue(port, 1UL << pin); |
Michael J. Spencer |
2:1df0b61d3b5a | 63 | } |
Michael J. Spencer |
2:1df0b61d3b5a | 64 | |
Michael J. Spencer |
2:1df0b61d3b5a | 65 | void GPIO::clear() { |
Michael J. Spencer |
2:1df0b61d3b5a | 66 | FIO_ClearValue(port, 1UL << pin); |
Michael J. Spencer |
2:1df0b61d3b5a | 67 | } |
Michael J. Spencer |
2:1df0b61d3b5a | 68 | |
Michael J. Spencer |
2:1df0b61d3b5a | 69 | uint8_t GPIO::get() { |
Michael J. Spencer |
2:1df0b61d3b5a | 70 | return (FIO_ReadValue(port) & (1UL << pin))?255:0; |
Michael J. Spencer |
2:1df0b61d3b5a | 71 | } |
Michael J. Spencer |
2:1df0b61d3b5a | 72 | |
Michael J. Spencer |
2:1df0b61d3b5a | 73 | int GPIO::operator=(int value) { |
Michael J. Spencer |
2:1df0b61d3b5a | 74 | if (value) |
Michael J. Spencer |
2:1df0b61d3b5a | 75 | set(); |
Michael J. Spencer |
2:1df0b61d3b5a | 76 | else |
Michael J. Spencer |
2:1df0b61d3b5a | 77 | clear(); |
Michael J. Spencer |
2:1df0b61d3b5a | 78 | return value; |
Michael J. Spencer |
2:1df0b61d3b5a | 79 | } |