Go to the documentation of this file.00001
00037
00038
00039
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086 #ifndef _GPIO_H_
00087 #define _GPIO_H_
00088
00089 #include <arch/avr32.h>
00090 #include <avr32/io.h>
00091
00092
00095
00096 #define GPIO_SUCCESS 0 //!< Function successfully completed.
00097 #define GPIO_INVALID_ARGUMENT 1 //!< Input parameters are out of range.
00098
00099
00100
00103
00104 #define GPIO_PIN_CHANGE 0 //!< Interrupt triggered upon pin change.
00105 #define GPIO_RISING_EDGE 1 //!< Interrupt triggered upon rising edge.
00106 #define GPIO_FALLING_EDGE 2 //!< Interrupt triggered upon falling edge.
00107
00108
00109
00111 typedef struct
00112 {
00113 unsigned char pin;
00114 unsigned char function;
00115 } gpio_map_t[];
00116
00117
00129
00130
00138 extern int gpio_enable_module(const gpio_map_t gpiomap, unsigned int size);
00139
00155 extern int gpio_enable_module_pin(unsigned int pin, unsigned int function);
00156
00162 extern void gpio_enable_gpio(const gpio_map_t gpiomap, unsigned int size);
00163
00173 extern void gpio_enable_gpio_pin(unsigned int pin);
00174
00175
00176
00177
00178
00179
00180
00181
00182 #if 0
00183
00188 extern void gpio_enable_pin_open_drain(unsigned int pin);
00189
00194 extern void gpio_disable_pin_open_drain(unsigned int pin);
00195
00196 #endif
00197
00202 extern void gpio_enable_pin_pull_up(unsigned int pin);
00203
00208 extern void gpio_disable_pin_pull_up(unsigned int pin);
00209
00210 #if defined(AVR32_GPIO_200_H_INCLUDED) || defined(AVR32_GPIO_210_H_INCLUDED) || defined(AVR32_GPIO_211_H_INCLUDED)
00211
00212
00217 extern void gpio_enable_pin_pull_down(unsigned int pin);
00218
00223 extern void gpio_disable_pin_pull_down(unsigned int pin);
00224
00229 extern void gpio_enable_pin_buskeeper(unsigned int pin);
00230
00235 extern void gpio_disable_pin_buskeeper(unsigned int pin);
00236
00237 #endif
00238
00245 extern int gpio_get_pin_value(unsigned int pin);
00246
00256 extern int gpio_get_gpio_pin_output_value(unsigned int pin);
00257
00268 extern int gpio_get_gpio_open_drain_pin_output_value(unsigned int pin);
00269
00274 extern void gpio_set_gpio_pin(unsigned int pin);
00275
00280 extern void gpio_clr_gpio_pin(unsigned int pin);
00281
00286 extern void gpio_tgl_gpio_pin(unsigned int pin);
00287
00292 extern void gpio_set_gpio_open_drain_pin(unsigned int pin);
00293
00298 extern void gpio_clr_gpio_open_drain_pin(unsigned int pin);
00299
00304 extern void gpio_tgl_gpio_open_drain_pin(unsigned int pin);
00305
00319 extern void gpio_enable_pin_glitch_filter(unsigned int pin);
00320
00325 extern void gpio_disable_pin_glitch_filter(unsigned int pin);
00326
00335 extern int gpio_enable_pin_interrupt(unsigned int pin, unsigned int mode);
00336
00341 extern void gpio_disable_pin_interrupt(unsigned int pin);
00342
00349 extern int gpio_get_pin_interrupt_flag(unsigned int pin);
00350
00355 extern void gpio_clear_pin_interrupt_flag(unsigned int pin);
00356
00358
00359
00360 #if (defined AVR32_GPIO_LOCAL_ADDRESS)
00361
00375
00376
00382 #if (defined __GNUC__)
00383 __attribute__((__always_inline__))
00384 #endif
00385 extern __inline__ void gpio_local_init(void)
00386 {
00387 Set_system_register(AVR32_CPUCR,
00388 Get_system_register(AVR32_CPUCR) | AVR32_CPUCR_LOCEN_MASK);
00389 }
00390
00400 #if (defined __GNUC__)
00401 __attribute__((__always_inline__))
00402 #endif
00403 extern __inline__ void gpio_local_enable_pin_output_driver(unsigned int pin)
00404 {
00405 AVR32_GPIO_LOCAL.port[pin >> 5].oders = 1 << (pin & 0x1F);
00406 }
00407
00414 #if (defined __GNUC__)
00415 __attribute__((__always_inline__))
00416 #endif
00417 extern __inline__ void gpio_local_disable_pin_output_driver(unsigned int pin)
00418 {
00419 AVR32_GPIO_LOCAL.port[pin >> 5].oderc = 1 << (pin & 0x1F);
00420 }
00421
00430 #if (defined __GNUC__)
00431 __attribute__((__always_inline__))
00432 #endif
00433 extern __inline__ int gpio_local_get_pin_value(unsigned int pin)
00434 {
00435 return (AVR32_GPIO_LOCAL.port[pin >> 5].pvr >> (pin & 0x1F)) & 1;
00436 }
00437
00449 #if (defined __GNUC__)
00450 __attribute__((__always_inline__))
00451 #endif
00452 extern __inline__ void gpio_local_set_gpio_pin(unsigned int pin)
00453 {
00454 AVR32_GPIO_LOCAL.port[pin >> 5].ovrs = 1 << (pin & 0x1F);
00455 }
00456
00468 #if (defined __GNUC__)
00469 __attribute__((__always_inline__))
00470 #endif
00471 extern __inline__ void gpio_local_clr_gpio_pin(unsigned int pin)
00472 {
00473 AVR32_GPIO_LOCAL.port[pin >> 5].ovrc = 1 << (pin & 0x1F);
00474 }
00475
00487 #if (defined __GNUC__)
00488 __attribute__((__always_inline__))
00489 #endif
00490 extern __inline__ void gpio_local_tgl_gpio_pin(unsigned int pin)
00491 {
00492 AVR32_GPIO_LOCAL.port[pin >> 5].ovrt = 1 << (pin & 0x1F);
00493 }
00494
00503 #if (defined __GNUC__)
00504 __attribute__((__always_inline__))
00505 #endif
00506 extern __inline__ void gpio_local_init_gpio_open_drain_pin(unsigned int pin)
00507 {
00508 AVR32_GPIO_LOCAL.port[pin >> 5].ovrc = 1 << (pin & 0x1F);
00509 }
00510
00521 #if (defined __GNUC__)
00522 __attribute__((__always_inline__))
00523 #endif
00524 extern __inline__ void gpio_local_set_gpio_open_drain_pin(unsigned int pin)
00525 {
00526 AVR32_GPIO_LOCAL.port[pin >> 5].oderc = 1 << (pin & 0x1F);
00527 }
00528
00539 #if (defined __GNUC__)
00540 __attribute__((__always_inline__))
00541 #endif
00542 extern __inline__ void gpio_local_clr_gpio_open_drain_pin(unsigned int pin)
00543 {
00544 AVR32_GPIO_LOCAL.port[pin >> 5].oders = 1 << (pin & 0x1F);
00545 }
00546
00557 #if (defined __GNUC__)
00558 __attribute__((__always_inline__))
00559 #endif
00560 extern __inline__ void gpio_local_tgl_gpio_open_drain_pin(unsigned int pin)
00561 {
00562 AVR32_GPIO_LOCAL.port[pin >> 5].odert = 1 << (pin & 0x1F);
00563 }
00564
00566 #endif // AVR32_GPIO_LOCAL_ADDRESS
00567
00568 #if UC3L
00569
00570
00583 #if (defined __GNUC__)
00584 __attribute__((__always_inline__))
00585 #endif
00586 extern __inline__ void gpio_enable_pin_periph_event(unsigned int pin)
00587 {
00588 AVR32_GPIO.port[pin >> 5].oderc = 1 << (pin & 0x1F);
00589 AVR32_GPIO.port[pin >> 5].evers = 1 << (pin & 0x1F);
00590 }
00591
00597 #if (defined __GNUC__)
00598 __attribute__((__always_inline__))
00599 #endif
00600 extern __inline__ void gpio_disable_pin_periph_event(unsigned int pin)
00601 {
00602 AVR32_GPIO.port[pin >> 5].everc = 1 << (pin & 0x1F);
00603 }
00604
00614 extern int gpio_configure_pin_periph_event_mode(unsigned int pin, unsigned int mode, unsigned int use_igf);
00615
00617 #endif // UC3L
00618
00619 #endif // _GPIO_H_