6 int hal_pin_conf_fnc(unsigned gpio, int fnc)
8 __IO uint32_t *p = &(PINCON->PINSEL0);
11 if(fnc & PORT_CONF_FNC_MASK)
12 fnc = __mfld2val(PORT_CONF_FNC_MASK, fnc);
14 p += hal_gpio_get_port_num(gpio)*2;
21 *p = (*p & ~mask) | ((fnc << gpio) & mask);
26 int hal_pin_conf_mode(unsigned gpio, int mode)
28 __IO uint32_t *p = &(PINCON->PINMODE0);
31 if(mode & PORT_CONF_MODE_MASK)
32 mode = __mfld2val(PORT_CONF_MODE_MASK, mode);
34 p += hal_gpio_get_port_num(gpio)*2;
41 *p = (*p & ~mask) | ((mode << gpio) & mask);
46 int hal_pin_conf_od(unsigned gpio, int od)
48 uint32_t mask = 1 << (gpio & 0x1f);
51 (&(PINCON->PINMODE_OD0))[hal_gpio_get_port_num(gpio)] |= mask;
53 (&(PINCON->PINMODE_OD0))[hal_gpio_get_port_num(gpio)] &= ~mask;
58 int hal_pin_conf_set(unsigned gpio, int conf)
60 gpio &= ~PORT_CONF_MASK;
61 hal_pin_conf_mode(gpio, conf & PORT_CONF_MODE_MASK);
62 hal_pin_conf_od(gpio, conf & PORT_CONF_OD_MASK);
63 if(conf & PORT_CONF_SET_DIR) {
64 if((conf & PORT_CONF_DIR_MASK) == (PORT_CONF_DIR_IN & PORT_CONF_DIR_MASK))
65 hal_gpio_direction_input(gpio);
67 hal_gpio_direction_output(gpio, conf & PORT_CONF_INIT_HIGH);
69 hal_pin_conf_fnc(gpio, conf & PORT_CONF_FNC_MASK);