/* ***************************************************************************** * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * * Created: 12/18/09 02:40:56 * Copyright (c) 2009 Perry L. Hung. All rights reserved. * * ****************************************************************************/ /** * @file io.h * * @brief */ #ifndef _IO_H #define _IO_H #include #include "gpio.h" #include "adc.h" #ifdef __cplusplus extern "C"{ #endif /* stash these here for now */ #define D0 0 #define D1 1 #define D2 2 #define D3 3 #define D4 4 #define D5 5 #define D6 6 #define D7 7 #define D8 8 #define D9 9 #define D10 10 #define D11 11 #define D12 12 #define D13 13 #define D14 14 #define D15 15 #define D16 16 #define D16 16 #define D17 17 #define D18 18 #define D19 19 #define D20 20 #define D21 21 #define D22 22 #define D23 23 #define D24 24 #define D25 25 #define D26 26 #define D27 27 #define D28 28 #define D29 29 #define D30 30 #define D31 31 #define D32 32 #define D33 33 #define D34 34 #define D35 35 #define D36 36 #define D37 37 #define D38 38 #define D39 39 typedef enum WiringPinMode { OUTPUT, OUTPUT_OPEN_DRAIN, INPUT, INPUT_ANALOG, INPUT_PULLUP, INPUT_PULLDOWN, INPUT_FLOATING, PWM } WiringPinMode; typedef struct PinMapping { GPIO_Port *port; uint32 pin; uint32 adc; TimerCCR timer_channel; } PinMapping; #define ADC_INVALID 0xFFFFFFFF #define TIMER_INVALID (TimerCCR)0xFFFFFFFF /* Set pin to mode * pinMode(pin, mode): * pin -> {0-38, D0-D39, A0-16} * mode -> { * INPUT/INPUT_DIGITAL * INPUT_PULLUP * INPUT_PULLDOWN * INPUT_ANALOG * OUTPUT/OUTPUT_PP * OUTPUT_OPEN_DRAIN * } */ void pinMode(uint8_t, uint8_t); /* * Writes VALUE to digital pin[0-38] * digitalWrite(pin, value): * pin -> {0-38, D0-D39, A0-16} * value -> LOW, HIGH; */ void digitalWrite(uint8_t, uint8_t); /* Read a digital value from pin, the pin mode must be set to * {INPUT, INPUT_PULLUP, INPUT_PULLDOWN} * digitalRead(pin) * pin -> {0-38, D0-D39, A0-16} */ uint32_t digitalRead(uint8_t); /* Read an analog value from pin, the pin mode must be set * to INPUT_ANALOG * analogRead(pin) * pin -> {A0-A16} * */ uint32_t analogRead(uint8_t); #ifdef __cplusplus } // extern "C" #endif #endif