/* gpio_arduino.c D.J.Whale 04/04/2016
*
* A very simple interface to the GPIO port on the Arduino.
*
* Arduino internally uses the 'wiring' library, but experiments have shown
* that it is really slow.
*
* See 'Faster IO on the Arduino' on the SKPang blog:
* http://skpang.co.uk/blog/archives/323
*
* So this module uses direct register writes, and provides a placeholder for
* compile-time selection of bitmasks and bitpatterns to support more Arduino
* boards in the future.
*/
//TODO: there might be platform specific macros here to
//extract register address and bitmask
//really, what we want is to be able to pass in a uint8_t which is a GPIO number
//and this get converted (at compile time preferably) into the register access code
//required to read/write and configure that bit. The actual mapping shoudl probably
//be in the C code for gpio_arduino
//something a bit like this, but this is not correct yet
//#define GPIO_0 PORTB,0x01
//#define GPIO_1 PORTB,0x02
//#define GPIO_2 PORTB,0x04
//#define GPIO_3 PORTB,0x08
//#define GPIO_4 PORTB,0x10
//#define GPIO_5 PORTB,0x20
//#define GPIO_6 PORTB,0x40
//#define GPIO_7 PORTB,0x90
//#define GPIO_8 PORTC,0x01
//#define GPIO_9 PORTC,0x02
//#define GPIO_10 PORTC,0x04
//#define GPIO_14 PORTC,0x08
//#define GPIO_15 PORTC,0x10
//#define GPIO_16 PORTC,0x20
/***** INCLUDES *****/
#include "gpio.h"
#include <arduino.h>
/***** CONFIGURATION *****/
/***** CONSTANTS *****/
/***** VARIABLES *****/
/****** MACROS *****/
//#define INP_GPIO(g)
//#define OUT_GPIO(g)
//#define GPIO_SET
//#define GPIO_CLR
//#define GPIO_READ(g)
//#define GPIO_HIGH(g)
//#define GPIO_LOW(g)
void gpio_init()
{
//TODO
}
void gpio_setin(uint8_t g)
{
//TODO this is a temporary hack. Need to use PORT registers
pinMode(g, INPUT);
}
void gpio_setout(uint8_t g)
{
//TODO this is a temporary hack. Need to use PORT registers
pinMode(g, OUTPUT);
}
void gpio_high(uint8_t g)
{
//TODO this is a temporary hack. Need to use PORT registers
digitalWrite(g, 1);
}
void gpio_low(uint8_t g)
{
//TODO this is a temporary hack. Need to use PORT registers
digitalWrite(g, 0);
}
void gpio_write(uint8_t g, uint8_t v)
{
//TODO this is a temporary hack. Need to use PORT registers
digitalWrite(g, v);
}
uint8_t gpio_read(uint8_t g)
{
//TODO this is a temporary hack. Need to use PORT registers
return digitalRead(g);
}
/***** END OF FILE *****/