1d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen/* 2d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen wiring.h - Partial implementation of the Wiring API for the ATmega8. 3d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen Part of Arduino - http://www.arduino.cc/ 4d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen 5d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen Copyright (c) 2005-2006 David A. Mellis 6d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen 7d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen This library is free software; you can redistribute it and/or 8d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen modify it under the terms of the GNU Lesser General Public 9d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen License as published by the Free Software Foundation; either 10d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen version 2.1 of the License, or (at your option) any later version. 11d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen 12d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen This library is distributed in the hope that it will be useful, 13d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen but WITHOUT ANY WARRANTY; without even the implied warranty of 14d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 15d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen Lesser General Public License for more details. 16d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen 17d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen You should have received a copy of the GNU Lesser General 18d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen Public License along with this library; if not, write to the 19d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen Free Software Foundation, Inc., 59 Temple Place, Suite 330, 20d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen Boston, MA 02111-1307 USA 21d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen 22d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen $Id$ 23d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen*/ 24d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen 25d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen#ifndef Wiring_h 26d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen#define Wiring_h 27d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen 28d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen#include <avr/io.h> 29d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen#include <stdlib.h> 30d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen#include "binary.h" 31d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen 32d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen#ifdef __cplusplus 33d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chenextern "C"{ 34d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen#endif 35d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen 36d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen#define HIGH 0x1 37d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen#define LOW 0x0 38d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen 39d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen#define INPUT 0x0 40d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen#define OUTPUT 0x1 41d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen 42d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen#define true 0x1 43d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen#define false 0x0 44d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen 45d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen#define PI 3.1415926535897932384626433832795 46d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen#define HALF_PI 1.5707963267948966192313216916398 47d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen#define TWO_PI 6.283185307179586476925286766559 48d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen#define DEG_TO_RAD 0.017453292519943295769236907684886 49d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen#define RAD_TO_DEG 57.295779513082320876798154814105 50d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen 51d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen#define SERIAL 0x0 52d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen#define DISPLAY 0x1 53d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen 54d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen#define LSBFIRST 0 55d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen#define MSBFIRST 1 56d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen 57d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen#define CHANGE 1 58d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen#define FALLING 2 59d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen#define RISING 3 60d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen 61d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) 62d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen#define INTERNAL1V1 2 63d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen#define INTERNAL2V56 3 64d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen#else 65d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen#define INTERNAL 3 66d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen#endif 67d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen#define DEFAULT 1 68d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen#define EXTERNAL 0 69d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen 70d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen// undefine stdlib's abs if encountered 71d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen#ifdef abs 72d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen#undef abs 73d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen#endif 74d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen 75d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen#define min(a,b) ((a)<(b)?(a):(b)) 76d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen#define max(a,b) ((a)>(b)?(a):(b)) 77d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen#define abs(x) ((x)>0?(x):-(x)) 78d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen#define constrain(amt,low,high) ((amt)<(low)?(low):((amt)>(high)?(high):(amt))) 79d06daf9bbc46838400461eb8e15842974e38d82aAdam Hampson#if __AVR_LIBC_VERSION__ < 10701UL 80d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen#define round(x) ((x)>=0?(long)((x)+0.5):(long)((x)-0.5)) 81d06daf9bbc46838400461eb8e15842974e38d82aAdam Hampson#endif 82d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen#define radians(deg) ((deg)*DEG_TO_RAD) 83d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen#define degrees(rad) ((rad)*RAD_TO_DEG) 84d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen#define sq(x) ((x)*(x)) 85d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen 86d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen#define interrupts() sei() 87d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen#define noInterrupts() cli() 88d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen 89d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen#define clockCyclesPerMicrosecond() ( F_CPU / 1000000L ) 90d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen#define clockCyclesToMicroseconds(a) ( ((a) * 1000L) / (F_CPU / 1000L) ) 91d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen#define microsecondsToClockCycles(a) ( ((a) * (F_CPU / 1000L)) / 1000L ) 92d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen 93d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen#define lowByte(w) ((uint8_t) ((w) & 0xff)) 94d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen#define highByte(w) ((uint8_t) ((w) >> 8)) 95d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen 96d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen#define bitRead(value, bit) (((value) >> (bit)) & 0x01) 97d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen#define bitSet(value, bit) ((value) |= (1UL << (bit))) 98d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen#define bitClear(value, bit) ((value) &= ~(1UL << (bit))) 99d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen#define bitWrite(value, bit, bitvalue) (bitvalue ? bitSet(value, bit) : bitClear(value, bit)) 100d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen 101d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen 102d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chentypedef unsigned int word; 103d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen 104d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen#define bit(b) (1UL << (b)) 105d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen 106d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chentypedef uint8_t boolean; 107d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chentypedef uint8_t byte; 108d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen 109d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chenvoid init(void); 110d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen 111d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chenvoid pinMode(uint8_t, uint8_t); 112d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chenvoid digitalWrite(uint8_t, uint8_t); 113d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chenint digitalRead(uint8_t); 114d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chenint analogRead(uint8_t); 115d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chenvoid analogReference(uint8_t mode); 116d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chenvoid analogWrite(uint8_t, int); 117d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen 118d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chenunsigned long millis(void); 119d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chenunsigned long micros(void); 120d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chenvoid delay(unsigned long); 121d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chenvoid delayMicroseconds(unsigned int us); 122d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chenunsigned long pulseIn(uint8_t pin, uint8_t state, unsigned long timeout); 123d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen 124d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chenvoid shiftOut(uint8_t dataPin, uint8_t clockPin, uint8_t bitOrder, uint8_t val); 125d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chenuint8_t shiftIn(uint8_t dataPin, uint8_t clockPin, uint8_t bitOrder); 126d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen 127d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chenvoid attachInterrupt(uint8_t, void (*)(void), int mode); 128d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chenvoid detachInterrupt(uint8_t); 129d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen 130d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chenvoid setup(void); 131d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chenvoid loop(void); 132d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen 133d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen#ifdef __cplusplus 134d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen} // extern "C" 135d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen#endif 136d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen 137d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen#endif 138