00001
00038 #include <gpio/port.h>
00039 #include <regs/xmega_port.h>
00040
00041
00042 void port_select_gpio(void *port, pin_mask_t pin_mask,
00043 port_pin_flags_t flags)
00044 {
00045 unsigned char pin;
00046
00047 for (pin = 0; pin < 8; pin++) {
00048 if (pin_mask & (1 << pin))
00049 port_write_reg(port, PIN0CTRL + pin, flags);
00050 }
00051
00052
00053 if (flags & PORT_DIR_OUTPUT) {
00054 if (flags & PORT_INIT_HIGH)
00055 port_write_reg(port, OUTSET, pin_mask);
00056 else
00057 port_write_reg(port, OUTCLR, pin_mask);
00058 port_write_reg(port, DIRSET, pin_mask);
00059 } else {
00060 port_write_reg(port, DIRCLR, pin_mask);
00061 }
00062 }
00063
00075 void gpio_set_value_noninline(gpio_pin_t pin, bool value)
00076 {
00077 gpio_set_value_inline(pin, value);
00078 }
00079
00088 bool gpio_get_value_noninline(gpio_pin_t pin)
00089 {
00090 return gpio_get_value_inline(pin);
00091 }