Fork of Smoothie to port to mbed non-LPC targets.

Dependencies:   mbed

Fork of Smoothie by Stéphane Cachat

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?

UserRevisionLine numberNew 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 }