/*------------------------------------------------------------------------------ -- This file is a part of the libuc, microcontroler library -- Copyright (C) 2012, Alexis Jeandet -- -- 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, write to the Free Software -- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ------------------------------------------------------------------------------- -- Author : Alexis Jeandet -- Mail : alexis.jeandet@gmail.com -------------------------------------------------------------------------------*/ #ifndef GPIO_H #define GPIO_H #include #ifdef __cplusplus extern "C" { #endif typedef uint32_t gpio_t; typedef enum { gpiolowspeed = 0x00000, gpiomediumspeed = 0x10000, gpiofastspeed = 0x20000, gpiohighspeed = 0x30000 }gpiospeed_t; #define GPIOSPEEDMASK 0x30000 typedef enum gpiodir_t { gpioindir = 0x00000, gpiooutdir = 0x40000, gpioaf = 0x80000, gpioan = 0xC0000 }gpiodir_t; #define GPIODIRMASK 0xC0000 typedef enum { gpiopushpulltype = 0x000000, gpioopendraintype = 0x100000 }gpioouttype_t; #define GPIOOUTTYPEMASK 0x100000 typedef enum { gpionopulltype = 0x000000, gpiopulluptype = 0x200000, gpiopulldowntype = 0x400000 }gpiopulltype_t; #define GPIOPULLTYPEMASK 0x600000 extern gpio_t gpioopen(uint32_t gpio); extern void gpioclose(gpio_t gpio); extern void gpiosetconfig(gpio_t* gpio); extern void gpiosetdir(gpio_t* gpio,gpiodir_t dir); extern void gpiosetouttype(gpio_t* gpio, gpioouttype_t outtype); extern void gpiosetpulltype(gpio_t* gpio,gpiopulltype_t pulltype); extern void gpiosetspeed(gpio_t* gpio,gpiospeed_t speed); extern void gpioset(gpio_t gpio); extern void gpioclr(gpio_t gpio); extern void gpiosetval(gpio_t gpio,int val); extern int gpiogetval(gpio_t gpio); #define GPIOISINPUT(gpio) (((gpio) & GPIODIRMASK)==gpioindir) #define GPIOISOUTPUT(gpio) (((gpio) & GPIOSPEEDMASK)==gpiooutdir) #define GPIOISLOWSPEED(gpio) (((gpio) & GPIOSPEEDMASK)==gpiolowspeed) #define GPIOISMEDIUMSPEED(gpio) (((gpio) & GPIOSPEEDMASK)==gpiomediumspeed) #define GPIOISFASTPEED(gpio) (((gpio) & GPIOSPEEDMASK)==gpiofastspeed) #define GPIOISHIGHSPEED(gpio) (((gpio) & GPIOSPEEDMASK)==gpiohighspeeds) #define GPIOISPUSHPULL(gpio) (((gpio) & GPIOOUTTYPEMASK)==gpiopushpulltype) #define GPIOISOPENDRAIN(gpio) (((gpio) & GPIOOUTTYPEMASK)==gpioopendraintype) #define GPIOISNOPULL(GPIO) (((gpio) & GPIOPULLTYPEMASK)==gpionopulltype) #define GPIOISPULLUP(GPIO) (((gpio) & GPIOPULLTYPEMASK)==gpiopulluptype) #define GPIOISPULLDOWN(GPIO) (((gpio) & GPIOPULLTYPEMASK)==gpiopulldowntype) #define PA0 ((0<<8)+0) #define PA1 ((0<<8)+1) #define PA2 ((0<<8)+2) #define PA3 ((0<<8)+3) #define PA4 ((0<<8)+4) #define PA5 ((0<<8)+5) #define PA6 ((0<<8)+6) #define PA7 ((0<<8)+7) #define PA8 ((0<<8)+8) #define PA9 ((0<<8)+9) #define PA10 ((0<<8)+10) #define PA11 ((0<<8)+11) #define PA12 ((0<<8)+12) #define PA13 ((0<<8)+13) #define PA14 ((0<<8)+14) #define PA15 ((0<<8)+15) #define PAX ((0<<8)+255) #define PB0 ((1<<8)+0) #define PB1 ((1<<8)+1) #define PB2 ((1<<8)+2) #define PB3 ((1<<8)+3) #define PB4 ((1<<8)+4) #define PB5 ((1<<8)+5) #define PB6 ((1<<8)+6) #define PB7 ((1<<8)+7) #define PB8 ((1<<8)+8) #define PB9 ((1<<8)+9) #define PB10 ((1<<8)+10) #define PB11 ((1<<8)+11) #define PB12 ((1<<8)+12) #define PB13 ((1<<8)+13) #define PB14 ((1<<8)+14) #define PB15 ((1<<8)+15) #define PBX ((1<<8)+255) #define PC0 ((2<<8)+0) #define PC1 ((2<<8)+1) #define PC2 ((2<<8)+2) #define PC3 ((2<<8)+3) #define PC4 ((2<<8)+4) #define PC5 ((2<<8)+5) #define PC6 ((2<<8)+6) #define PC7 ((2<<8)+7) #define PC8 ((2<<8)+8) #define PC9 ((2<<8)+9) #define PC10 ((2<<8)+10) #define PC11 ((2<<8)+11) #define PC12 ((2<<8)+12) #define PC13 ((2<<8)+13) #define PC14 ((2<<8)+14) #define PC15 ((2<<8)+15) #define PCX ((2<<8)+255) #define PD0 ((3<<8)+0) #define PD1 ((3<<8)+1) #define PD2 ((3<<8)+2) #define PD3 ((3<<8)+3) #define PD4 ((3<<8)+4) #define PD5 ((3<<8)+5) #define PD6 ((3<<8)+6) #define PD7 ((3<<8)+7) #define PD8 ((3<<8)+8) #define PD9 ((3<<8)+9) #define PD10 ((3<<8)+10) #define PD11 ((3<<8)+11) #define PD12 ((3<<8)+12) #define PD13 ((3<<8)+13) #define PD14 ((3<<8)+14) #define PD15 ((3<<8)+15) #define PDX ((3<<8)+255) #define PE0 ((4<<8)+0) #define PE1 ((4<<8)+1) #define PE2 ((4<<8)+2) #define PE3 ((4<<8)+3) #define PE4 ((4<<8)+4) #define PE5 ((4<<8)+5) #define PE6 ((4<<8)+6) #define PE7 ((4<<8)+7) #define PE8 ((4<<8)+8) #define PE9 ((4<<8)+9) #define PE10 ((4<<8)+10) #define PE11 ((4<<8)+11) #define PE12 ((4<<8)+12) #define PE13 ((4<<8)+13) #define PE14 ((4<<8)+14) #define PE15 ((4<<8)+15) #define PEX ((4<<8)+255) #define PF0 ((5<<8)+0) #define PF1 ((5<<8)+1) #define PF2 ((5<<8)+2) #define PF3 ((5<<8)+3) #define PF4 ((5<<8)+4) #define PF5 ((5<<8)+5) #define PF6 ((5<<8)+6) #define PF7 ((5<<8)+7) #define PF8 ((5<<8)+8) #define PF9 ((5<<8)+9) #define PF10 ((5<<8)+10) #define PF11 ((5<<8)+11) #define PF12 ((5<<8)+12) #define PF13 ((5<<8)+13) #define PF14 ((5<<8)+14) #define PF15 ((5<<8)+15) #define PFX ((5<<8)+255) #define PG0 ((6<<8)+0) #define PG1 ((6<<8)+1) #define PG2 ((6<<8)+2) #define PG3 ((6<<8)+3) #define PG4 ((6<<8)+4) #define PG5 ((6<<8)+5) #define PG6 ((6<<8)+6) #define PG7 ((6<<8)+7) #define PG8 ((6<<8)+8) #define PG9 ((6<<8)+9) #define PG10 ((6<<8)+10) #define PG11 ((6<<8)+11) #define PG12 ((6<<8)+12) #define PG13 ((6<<8)+13) #define PG14 ((6<<8)+14) #define PG15 ((6<<8)+15) #define PGX ((6<<8)+255) #define PH0 ((7<<8)+0) #define PH1 ((7<<8)+1) #define PH2 ((7<<8)+2) #define PH3 ((7<<8)+3) #define PH4 ((7<<8)+4) #define PH5 ((7<<8)+5) #define PH6 ((7<<8)+6) #define PH7 ((7<<8)+7) #define PH8 ((7<<8)+8) #define PH9 ((7<<8)+9) #define PH10 ((7<<8)+10) #define PH11 ((7<<8)+11) #define PH12 ((7<<8)+12) #define PH13 ((7<<8)+13) #define PH14 ((7<<8)+14) #define PH15 ((7<<8)+15) #define PHX ((7<<8)+255) #define PI0 ((8<<8)+0) #define PI1 ((8<<8)+1) #define PI2 ((8<<8)+2) #define PI3 ((8<<8)+3) #define PI4 ((8<<8)+4) #define PI5 ((8<<8)+5) #define PI6 ((8<<8)+6) #define PI7 ((8<<8)+7) #define PI8 ((8<<8)+8) #define PI9 ((8<<8)+9) #define PI10 ((8<<8)+10) #define PI11 ((8<<8)+11) #define PI12 ((8<<8)+12) #define PI13 ((8<<8)+13) #define PI14 ((8<<8)+14) #define PI15 ((8<<8)+15) #define PIX ((8<<8)+255) #define PJ0 ((9<<8)+0) #define PJ1 ((9<<8)+1) #define PJ2 ((9<<8)+2) #define PJ3 ((9<<8)+3) #define PJ4 ((9<<8)+4) #define PJ5 ((9<<8)+5) #define PJ6 ((9<<8)+6) #define PJ7 ((9<<8)+7) #define PJ8 ((9<<8)+8) #define PJ9 ((9<<8)+9) #define PJ10 ((9<<8)+10) #define PJ11 ((9<<8)+11) #define PJ12 ((9<<8)+12) #define PJ13 ((9<<8)+13) #define PJ14 ((9<<8)+14) #define PJ15 ((9<<8)+15) #define PJX ((9<<8)+255) #define PK0 ((10<<8)+0) #define PK1 ((10<<8)+1) #define PK2 ((10<<8)+2) #define PK3 ((10<<8)+3) #define PK4 ((10<<8)+4) #define PK5 ((10<<8)+5) #define PK6 ((10<<8)+6) #define PK7 ((10<<8)+7) #define PK8 ((10<<8)+8) #define PK9 ((10<<8)+9) #define PK10 ((10<<8)+10) #define PK11 ((10<<8)+11) #define PK12 ((10<<8)+12) #define PK13 ((10<<8)+13) #define PK14 ((10<<8)+14) #define PK15 ((10<<8)+15) #define PKX ((10<<8)+255) #define PL0 ((11<<8)+0) #define PL1 ((11<<8)+1) #define PL2 ((11<<8)+2) #define PL3 ((11<<8)+3) #define PL4 ((11<<8)+4) #define PL5 ((11<<8)+5) #define PL6 ((11<<8)+6) #define PL7 ((11<<8)+7) #define PL8 ((11<<8)+8) #define PL9 ((11<<8)+9) #define PL10 ((11<<8)+10) #define PL11 ((11<<8)+11) #define PL12 ((11<<8)+12) #define PL13 ((11<<8)+13) #define PL14 ((11<<8)+14) #define PL15 ((11<<8)+15) #define PLX ((11<<8)+255) #define PM0 ((12<<8)+0) #define PM1 ((12<<8)+1) #define PM2 ((12<<8)+2) #define PM3 ((12<<8)+3) #define PM4 ((12<<8)+4) #define PM5 ((12<<8)+5) #define PM6 ((12<<8)+6) #define PM7 ((12<<8)+7) #define PM8 ((12<<8)+8) #define PM9 ((12<<8)+9) #define PM10 ((12<<8)+10) #define PM11 ((12<<8)+11) #define PM12 ((12<<8)+12) #define PM13 ((12<<8)+13) #define PM14 ((12<<8)+14) #define PM15 ((12<<8)+15) #define PMX ((12<<8)+255) #define PN0 ((13<<8)+0) #define PN1 ((13<<8)+1) #define PN2 ((13<<8)+2) #define PN3 ((13<<8)+3) #define PN4 ((13<<8)+4) #define PN5 ((13<<8)+5) #define PN6 ((13<<8)+6) #define PN7 ((13<<8)+7) #define PN8 ((13<<8)+8) #define PN9 ((13<<8)+9) #define PN10 ((13<<8)+10) #define PN11 ((13<<8)+11) #define PN12 ((13<<8)+12) #define PN13 ((13<<8)+13) #define PN14 ((13<<8)+14) #define PN15 ((13<<8)+15) #define PNX ((13<<8)+255) #define PO0 ((14<<8)+0) #define PO1 ((14<<8)+1) #define PO2 ((14<<8)+2) #define PO3 ((14<<8)+3) #define PO4 ((14<<8)+4) #define PO5 ((14<<8)+5) #define PO6 ((14<<8)+6) #define PO7 ((14<<8)+7) #define PO8 ((14<<8)+8) #define PO9 ((14<<8)+9) #define PO10 ((14<<8)+10) #define PO11 ((14<<8)+11) #define PO12 ((14<<8)+12) #define PO13 ((14<<8)+13) #define PO14 ((14<<8)+14) #define PO15 ((14<<8)+15) #define POX ((14<<8)+255) #define PP0 ((15<<8)+0) #define PP1 ((15<<8)+1) #define PP2 ((15<<8)+2) #define PP3 ((15<<8)+3) #define PP4 ((15<<8)+4) #define PP5 ((15<<8)+5) #define PP6 ((15<<8)+6) #define PP7 ((15<<8)+7) #define PP8 ((15<<8)+8) #define PP9 ((15<<8)+9) #define PP10 ((15<<8)+10) #define PP11 ((15<<8)+11) #define PP12 ((15<<8)+12) #define PP13 ((15<<8)+13) #define PP14 ((15<<8)+14) #define PP15 ((15<<8)+15) #define PPX ((15<<8)+255) #define PQ0 ((16<<8)+0) #define PQ1 ((16<<8)+1) #define PQ2 ((16<<8)+2) #define PQ3 ((16<<8)+3) #define PQ4 ((16<<8)+4) #define PQ5 ((16<<8)+5) #define PQ6 ((16<<8)+6) #define PQ7 ((16<<8)+7) #define PQ8 ((16<<8)+8) #define PQ9 ((16<<8)+9) #define PQ10 ((16<<8)+10) #define PQ11 ((16<<8)+11) #define PQ12 ((16<<8)+12) #define PQ13 ((16<<8)+13) #define PQ14 ((16<<8)+14) #define PQ15 ((16<<8)+15) #define PQX ((16<<8)+255) #define PR0 ((17<<8)+0) #define PR1 ((17<<8)+1) #define PR2 ((17<<8)+2) #define PR3 ((17<<8)+3) #define PR4 ((17<<8)+4) #define PR5 ((17<<8)+5) #define PR6 ((17<<8)+6) #define PR7 ((17<<8)+7) #define PR8 ((17<<8)+8) #define PR9 ((17<<8)+9) #define PR10 ((17<<8)+10) #define PR11 ((17<<8)+11) #define PR12 ((17<<8)+12) #define PR13 ((17<<8)+13) #define PR14 ((17<<8)+14) #define PR15 ((17<<8)+15) #define PRX ((17<<8)+255) #define PS0 ((18<<8)+0) #define PS1 ((18<<8)+1) #define PS2 ((18<<8)+2) #define PS3 ((18<<8)+3) #define PS4 ((18<<8)+4) #define PS5 ((18<<8)+5) #define PS6 ((18<<8)+6) #define PS7 ((18<<8)+7) #define PS8 ((18<<8)+8) #define PS9 ((18<<8)+9) #define PS10 ((18<<8)+10) #define PS11 ((18<<8)+11) #define PS12 ((18<<8)+12) #define PS13 ((18<<8)+13) #define PS14 ((18<<8)+14) #define PS15 ((18<<8)+15) #define PSX ((18<<8)+255) #define PT0 ((19<<8)+0) #define PT1 ((19<<8)+1) #define PT2 ((19<<8)+2) #define PT3 ((19<<8)+3) #define PT4 ((19<<8)+4) #define PT5 ((19<<8)+5) #define PT6 ((19<<8)+6) #define PT7 ((19<<8)+7) #define PT8 ((19<<8)+8) #define PT9 ((19<<8)+9) #define PT10 ((19<<8)+10) #define PT11 ((19<<8)+11) #define PT12 ((19<<8)+12) #define PT13 ((19<<8)+13) #define PT14 ((19<<8)+14) #define PT15 ((19<<8)+15) #define PTX ((19<<8)+255) #define PU0 ((20<<8)+0) #define PU1 ((20<<8)+1) #define PU2 ((20<<8)+2) #define PU3 ((20<<8)+3) #define PU4 ((20<<8)+4) #define PU5 ((20<<8)+5) #define PU6 ((20<<8)+6) #define PU7 ((20<<8)+7) #define PU8 ((20<<8)+8) #define PU9 ((20<<8)+9) #define PU10 ((20<<8)+10) #define PU11 ((20<<8)+11) #define PU12 ((20<<8)+12) #define PU13 ((20<<8)+13) #define PU14 ((20<<8)+14) #define PU15 ((20<<8)+15) #define PUX ((20<<8)+255) #define PV0 ((21<<8)+0) #define PV1 ((21<<8)+1) #define PV2 ((21<<8)+2) #define PV3 ((21<<8)+3) #define PV4 ((21<<8)+4) #define PV5 ((21<<8)+5) #define PV6 ((21<<8)+6) #define PV7 ((21<<8)+7) #define PV8 ((21<<8)+8) #define PV9 ((21<<8)+9) #define PV10 ((21<<8)+10) #define PV11 ((21<<8)+11) #define PV12 ((21<<8)+12) #define PV13 ((21<<8)+13) #define PV14 ((21<<8)+14) #define PV15 ((21<<8)+15) #define PVX ((21<<8)+255) #define PW0 ((22<<8)+0) #define PW1 ((22<<8)+1) #define PW2 ((22<<8)+2) #define PW3 ((22<<8)+3) #define PW4 ((22<<8)+4) #define PW5 ((22<<8)+5) #define PW6 ((22<<8)+6) #define PW7 ((22<<8)+7) #define PW8 ((22<<8)+8) #define PW9 ((22<<8)+9) #define PW10 ((22<<8)+10) #define PW11 ((22<<8)+11) #define PW12 ((22<<8)+12) #define PW13 ((22<<8)+13) #define PW14 ((22<<8)+14) #define PW15 ((22<<8)+15) #define PWX ((22<<8)+255) #define PX0 ((23<<8)+0) #define PX1 ((23<<8)+1) #define PX2 ((23<<8)+2) #define PX3 ((23<<8)+3) #define PX4 ((23<<8)+4) #define PX5 ((23<<8)+5) #define PX6 ((23<<8)+6) #define PX7 ((23<<8)+7) #define PX8 ((23<<8)+8) #define PX9 ((23<<8)+9) #define PX10 ((23<<8)+10) #define PX11 ((23<<8)+11) #define PX12 ((23<<8)+12) #define PX13 ((23<<8)+13) #define PX14 ((23<<8)+14) #define PX15 ((23<<8)+15) #define PXX ((23<<8)+255) #define PY0 ((24<<8)+0) #define PY1 ((24<<8)+1) #define PY2 ((24<<8)+2) #define PY3 ((24<<8)+3) #define PY4 ((24<<8)+4) #define PY5 ((24<<8)+5) #define PY6 ((24<<8)+6) #define PY7 ((24<<8)+7) #define PY8 ((24<<8)+8) #define PY9 ((24<<8)+9) #define PY10 ((24<<8)+10) #define PY11 ((24<<8)+11) #define PY12 ((24<<8)+12) #define PY13 ((24<<8)+13) #define PY14 ((24<<8)+14) #define PY15 ((24<<8)+15) #define PYX ((24<<8)+255) #define PZ0 ((25<<8)+0) #define PZ1 ((25<<8)+1) #define PZ2 ((25<<8)+2) #define PZ3 ((25<<8)+3) #define PZ4 ((25<<8)+4) #define PZ5 ((25<<8)+5) #define PZ6 ((25<<8)+6) #define PZ7 ((25<<8)+7) #define PZ8 ((25<<8)+8) #define PZ9 ((25<<8)+9) #define PZ10 ((25<<8)+10) #define PZ11 ((25<<8)+11) #define PZ12 ((25<<8)+12) #define PZ13 ((25<<8)+13) #define PZ14 ((25<<8)+14) #define PZ15 ((25<<8)+15) #define PZX ((25<<8)+255) #ifdef __cplusplus } #endif #endif //GPIO_H