LCD Library 1.2.1
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.h
Go to the documentation of this file.
00001 // ---------------------------------------------------------------------------
00002 // Created by Florian Fida on 20/01/12
00003 // Copyright 2012 - Under creative commons license 3.0:
00004 //        Attribution-ShareAlike CC BY-SA
00005 //        http://creativecommons.org/licenses/by-sa/3.0/
00006 //
00007 // This software is furnished "as is", without technical support, and with no
00008 // warranty, express or implied, as to its usefulness for any purpose.
00009 // ---------------------------------------------------------------------------
00010 // fio_shiftOut1 functions are based on Shif1 protocol developed by Roman Black 
00011 // (http://www.romanblack.com/shift1.htm)
00012 //
00013 // Thread Safe: No
00014 // Extendable: Yes
00015 //
00016 // @file FastIO.h
00017 // This file implements basic fast IO routines.
00018 // 
00019 // @brief 
00020 //
00021 // @version API 1.0.0
00022 //
00023 // @author Florian Fida -
00024 //
00025 // @todo:
00026 //  support chipkit:
00027 // (https://github.com/chipKIT32/chipKIT32-MAX/blob/master/hardware/pic32/
00028 //   cores/pic32/wiring_digital.c)
00029 // ---------------------------------------------------------------------------
00030 #ifndef _FAST_IO_H_
00031 #define _FAST_IO_H_
00032 
00033 #if (ARDUINO <  100)
00034 #include <WProgram.h>
00035 #else
00036 #include <Arduino.h>
00037 #endif
00038 
00039 #include <pins_arduino.h> // pleasing sanguino core
00040 #include <inttypes.h>
00041 #include <util/delay.h>
00042 
00043 #ifdef __AVR__
00044 #include <util/atomic.h> // for critical section management
00045 #endif
00046 
00047 
00053 #ifndef __AVR__
00054 #define FIO_FALLBACK
00055 #define ATOMIC_BLOCK
00056 #define ATOMIC_RESTORESTATE
00057 #endif
00058 
00059 // PUBLIC CONSTANTS DEFINITIONS
00060 // ---------------------------------------------------------------------------
00066 #define SKIP 0x23
00067 
00068 // PUBLIC TYPE DEFINITIONS
00069 // ---------------------------------------------------------------------------
00070 typedef uint8_t fio_bit;
00071 
00078 #ifndef FIO_FALLBACK
00079 typedef volatile uint8_t *fio_register;
00080 #else
00081 // remove volatile to give optimizer a chance
00082 typedef uint8_t fio_register;
00083 #endif
00084 
00092 fio_register fio_pinToOutputRegister(uint8_t pin, uint8_t initial_state = LOW);
00093 
00101 fio_register fio_pinToInputRegister(uint8_t pin);
00102 
00110 fio_bit fio_pinToBit(uint8_t pin);
00111 
00112 
00122 // __attribute__ ((always_inline)) /* let the optimizer decide that for now */
00123 void fio_digitalWrite ( fio_register pinRegister, fio_bit pinBit, uint8_t value );
00124 
00131 #ifndef FIO_FALLBACK
00132 #define fio_digitalWrite_LOW(reg,bit) *reg &= ~bit
00133 #define fio_digitalWrite_HIGH(reg,bit) *reg |= bit
00134 #define fio_digitalWrite_SWITCH(reg,bit) *reg ^= bit
00135 #define fio_digitalWrite_SWITCHTO(reg,bit,val) fio_digitalWrite_SWITCH(reg,bit)
00136 #else
00137 // reg -> dummy NULL, bit -> pin
00138 #define fio_digitalWrite_HIGH(reg,bit) digitalWrite(bit,HIGH)
00139 #define fio_digitalWrite_LOW(reg,bit) digitalWrite(bit,LOW)
00140 #define fio_digitalWrite_SWITCH(reg,bit) digitalWrite(bit, !digitalRead(bit))
00141 #define fio_digitalWrite_SWITCHTO(reg,bit,val) digitalWrite(bit,val);
00142 #endif
00143 
00153 int fio_digitalRead ( fio_register pinRegister, fio_bit pinBit );
00154 
00166 void fio_shiftOut( fio_register dataRegister, fio_bit dataBit, fio_register clockRegister, 
00167                    fio_bit clockBit, uint8_t value, uint8_t bitOrder );
00168 
00179 void fio_shiftOut(fio_register dataRegister, fio_bit dataBit, fio_register clockRegister, fio_bit clockBit);
00180 
00189 void fio_shiftOut1(fio_register shift1Register, fio_bit shift1Bit, uint8_t value, boolean noLatch = false);
00197 void fio_shiftOut1(uint8_t pin, uint8_t value, boolean noLatch = false);
00205 void fio_shiftOut1_init(fio_register shift1Register, fio_bit shift1Bit);
00212 void fio_shiftOut1_init(uint8_t pin);
00213 
00214 #endif // FAST_IO_H
 All Classes Files Functions Variables Typedefs Defines