00001
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048 #ifndef _GPIO_H_
00049 #define _GPIO_H_
00050
00051 #include <avr32/io.h>
00052 #include "compiler.h"
00053
00056
00057 #define GPIO_SUCCESS 0
00058 #define GPIO_INVALID_ARGUMENT 1
00059
00060
00061
00064
00065 #define GPIO_PIN_CHANGE 0
00066 #define GPIO_RISING_EDGE 1
00067 #define GPIO_FALLING_EDGE 2
00068
00069
00070
00072 typedef struct
00073 {
00074 unsigned char pin;
00075 unsigned char function;
00076 } gpio_map_t[];
00077
00078
00090
00091
00099 extern int gpio_enable_module(const gpio_map_t gpiomap, unsigned int size);
00100
00116 extern int gpio_enable_module_pin(unsigned int pin, unsigned int function);
00117
00123 extern void gpio_enable_gpio(const gpio_map_t gpiomap, unsigned int size);
00124
00134 extern void gpio_enable_gpio_pin(unsigned int pin);
00135
00136
00137
00138
00139
00140
00141
00142
00143 #if 0
00144
00149 extern void gpio_enable_pin_open_drain(unsigned int pin);
00150
00155 extern void gpio_disable_pin_open_drain(unsigned int pin);
00156
00157 #endif
00158
00163 extern void gpio_enable_pin_pull_up(unsigned int pin);
00164
00169 extern void gpio_disable_pin_pull_up(unsigned int pin);
00170
00171 #if defined(AVR32_GPIO_200_H_INCLUDED) || defined(AVR32_GPIO_210_H_INCLUDED) || defined(AVR32_GPIO_211_H_INCLUDED)
00172
00173
00178 extern void gpio_enable_pin_pull_down(unsigned int pin);
00179
00184 extern void gpio_disable_pin_pull_down(unsigned int pin);
00185
00190 extern void gpio_enable_pin_buskeeper(unsigned int pin);
00191
00196 extern void gpio_disable_pin_buskeeper(unsigned int pin);
00197
00198 #endif
00199
00206 extern int gpio_get_pin_value(unsigned int pin);
00207
00217 extern int gpio_get_gpio_pin_output_value(unsigned int pin);
00218
00229 extern int gpio_get_gpio_open_drain_pin_output_value(unsigned int pin);
00230
00235 extern void gpio_set_gpio_pin(unsigned int pin);
00236
00241 extern void gpio_clr_gpio_pin(unsigned int pin);
00242
00247 extern void gpio_tgl_gpio_pin(unsigned int pin);
00248
00253 extern void gpio_set_gpio_open_drain_pin(unsigned int pin);
00254
00259 extern void gpio_clr_gpio_open_drain_pin(unsigned int pin);
00260
00265 extern void gpio_tgl_gpio_open_drain_pin(unsigned int pin);
00266
00280 extern void gpio_enable_pin_glitch_filter(unsigned int pin);
00281
00286 extern void gpio_disable_pin_glitch_filter(unsigned int pin);
00287
00296 extern int gpio_enable_pin_interrupt(unsigned int pin, unsigned int mode);
00297
00302 extern void gpio_disable_pin_interrupt(unsigned int pin);
00303
00310 extern int gpio_get_pin_interrupt_flag(unsigned int pin);
00311
00316 extern void gpio_clear_pin_interrupt_flag(unsigned int pin);
00317
00319
00320
00321 #if (defined AVR32_GPIO_LOCAL_ADDRESS)
00322
00336
00337
00343 #if (defined __GNUC__)
00344 __attribute__((__always_inline__))
00345 #endif
00346 extern __inline__ void gpio_local_init(void)
00347 {
00348 Set_system_register(AVR32_CPUCR,
00349 Get_system_register(AVR32_CPUCR) | AVR32_CPUCR_LOCEN_MASK);
00350 }
00351
00361 #if (defined __GNUC__)
00362 __attribute__((__always_inline__))
00363 #endif
00364 extern __inline__ void gpio_local_enable_pin_output_driver(unsigned int pin)
00365 {
00366 AVR32_GPIO_LOCAL.port[pin >> 5].oders = 1 << (pin & 0x1F);
00367 }
00368
00375 #if (defined __GNUC__)
00376 __attribute__((__always_inline__))
00377 #endif
00378 extern __inline__ void gpio_local_disable_pin_output_driver(unsigned int pin)
00379 {
00380 AVR32_GPIO_LOCAL.port[pin >> 5].oderc = 1 << (pin & 0x1F);
00381 }
00382
00391 #if (defined __GNUC__)
00392 __attribute__((__always_inline__))
00393 #endif
00394 extern __inline__ int gpio_local_get_pin_value(unsigned int pin)
00395 {
00396 return (AVR32_GPIO_LOCAL.port[pin >> 5].pvr >> (pin & 0x1F)) & 1;
00397 }
00398
00410 #if (defined __GNUC__)
00411 __attribute__((__always_inline__))
00412 #endif
00413 extern __inline__ void gpio_local_set_gpio_pin(unsigned int pin)
00414 {
00415 AVR32_GPIO_LOCAL.port[pin >> 5].ovrs = 1 << (pin & 0x1F);
00416 }
00417
00429 #if (defined __GNUC__)
00430 __attribute__((__always_inline__))
00431 #endif
00432 extern __inline__ void gpio_local_clr_gpio_pin(unsigned int pin)
00433 {
00434 AVR32_GPIO_LOCAL.port[pin >> 5].ovrc = 1 << (pin & 0x1F);
00435 }
00436
00448 #if (defined __GNUC__)
00449 __attribute__((__always_inline__))
00450 #endif
00451 extern __inline__ void gpio_local_tgl_gpio_pin(unsigned int pin)
00452 {
00453 AVR32_GPIO_LOCAL.port[pin >> 5].ovrt = 1 << (pin & 0x1F);
00454 }
00455
00464 #if (defined __GNUC__)
00465 __attribute__((__always_inline__))
00466 #endif
00467 extern __inline__ void gpio_local_init_gpio_open_drain_pin(unsigned int pin)
00468 {
00469 AVR32_GPIO_LOCAL.port[pin >> 5].ovrc = 1 << (pin & 0x1F);
00470 }
00471
00482 #if (defined __GNUC__)
00483 __attribute__((__always_inline__))
00484 #endif
00485 extern __inline__ void gpio_local_set_gpio_open_drain_pin(unsigned int pin)
00486 {
00487 AVR32_GPIO_LOCAL.port[pin >> 5].oderc = 1 << (pin & 0x1F);
00488 }
00489
00500 #if (defined __GNUC__)
00501 __attribute__((__always_inline__))
00502 #endif
00503 extern __inline__ void gpio_local_clr_gpio_open_drain_pin(unsigned int pin)
00504 {
00505 AVR32_GPIO_LOCAL.port[pin >> 5].oders = 1 << (pin & 0x1F);
00506 }
00507
00518 #if (defined __GNUC__)
00519 __attribute__((__always_inline__))
00520 #endif
00521 extern __inline__ void gpio_local_tgl_gpio_open_drain_pin(unsigned int pin)
00522 {
00523 AVR32_GPIO_LOCAL.port[pin >> 5].odert = 1 << (pin & 0x1F);
00524 }
00525
00527 #endif // AVR32_GPIO_LOCAL_ADDRESS
00528
00529 #if UC3L
00531
00544 #if (defined __GNUC__)
00545 __attribute__((__always_inline__))
00546 #endif
00547 extern __inline__ void gpio_enable_pin_periph_event(unsigned int pin)
00548 {
00549 AVR32_GPIO.port[pin >> 5].oderc = 1 << (pin & 0x1F);
00550 AVR32_GPIO.port[pin >> 5].evers = 1 << (pin & 0x1F);
00551 }
00552
00558 #if (defined __GNUC__)
00559 __attribute__((__always_inline__))
00560 #endif
00561 extern __inline__ void gpio_disable_pin_periph_event(unsigned int pin)
00562 {
00563 AVR32_GPIO.port[pin >> 5].everc = 1 << (pin & 0x1F);
00564 }
00565
00575 extern int gpio_configure_pin_periph_event_mode(unsigned int pin, unsigned int mode, unsigned int use_igf);
00576
00578 #endif
00579
00580
00581 #endif // _GPIO_H_