int hal_pin_conf_fnc(unsigned gpio, int fnc)
{
- __IO uint32_t *p = &(PINCON->PINSEL0);
- uint32_t mask;
+ __IO uint32_t *p = &(LPC_IOCON->P0_0);
if(fnc & PORT_CONF_FNC_MASK)
fnc = __mfld2val(PORT_CONF_FNC_MASK, fnc);
- p += hal_gpio_get_port_num(gpio)*2;
- if(gpio & 0x10)
- p++;
- gpio &= 0x0f;
- gpio *= 2;
- mask = 3 << gpio;
+ p += hal_gpio_get_port_num(gpio)*32 + (gpio & 0x1f);
- *p = (*p & ~mask) | ((fnc << gpio) & mask);
+ *p = (*p & ~7) | fnc;
return 0;
}
int hal_pin_conf_mode(unsigned gpio, int mode)
{
- __IO uint32_t *p = &(PINCON->PINMODE0);
- uint32_t mask;
+ __IO uint32_t *p = &(LPC_IOCON->P0_0);
if(mode & PORT_CONF_MODE_MASK)
mode = __mfld2val(PORT_CONF_MODE_MASK, mode);
- p += hal_gpio_get_port_num(gpio)*2;
- if(gpio & 0x10)
- p++;
- gpio &= 0x0f;
- gpio *= 2;
- mask = 3 << gpio;
+ p += hal_gpio_get_port_num(gpio)*32 + (gpio & 0x1f);
- *p = (*p & ~mask) | ((mode << gpio) & mask);
+ *p = (*p & ~(3 << 3)) | (mode << 3);
return 0;
}
int hal_pin_conf_od(unsigned gpio, int od)
{
- uint32_t mask = 1 << (gpio & 0x1f);
+ __IO uint32_t *p = &(LPC_IOCON->P0_0);
+
+ p += hal_gpio_get_port_num(gpio)*32 + (gpio & 0x1f);
if(od)
- (&(PINCON->PINMODE_OD0))[hal_gpio_get_port_num(gpio)] |= mask;
+ *p |= (1 << 10);
else
- (&(PINCON->PINMODE_OD0))[hal_gpio_get_port_num(gpio)] &= ~mask;
+ *p &= ~(1 << 10);
return 0;
}
#define HAL_GPIO_PORT_BITS 3
static inline
-GPIO_TypeDef *hal_gpio_get_port_base(unsigned port)
+LPC_GPIO_TypeDef *hal_gpio_get_port_base(unsigned port)
{
- char *p = (char*)GPIO0_BASE;
- p += ((char*)GPIO1_BASE - (char*)GPIO0_BASE) * port;
- return (GPIO_TypeDef *)p;
+ char *p = (char*)LPC_GPIO0_BASE;
+ p += ((char*)LPC_GPIO1_BASE - (char*)LPC_GPIO0_BASE) * port;
+ return (LPC_GPIO_TypeDef *)p;
}
static inline
}
static inline
-GPIO_TypeDef *hal_gpio_get_base(unsigned gpio)
+LPC_GPIO_TypeDef *hal_gpio_get_base(unsigned gpio)
{
return hal_gpio_get_port_base(hal_gpio_get_port_num(gpio));
}
static inline
int hal_gpio_get_value(unsigned gpio)
{
- return ((hal_gpio_get_base(gpio)->FIOPIN) >> (gpio & 0x1f)) & 1;
+ return ((hal_gpio_get_base(gpio)->PIN) >> (gpio & 0x1f)) & 1;
}
static inline
void hal_gpio_set_value(unsigned gpio, int value)
{
if(value)
- hal_gpio_get_base(gpio)->FIOSET = 1 << (gpio & 0x1f);
+ hal_gpio_get_base(gpio)->SET = 1 << (gpio & 0x1f);
else
- hal_gpio_get_base(gpio)->FIOCLR = 1 << (gpio & 0x1f);
+ hal_gpio_get_base(gpio)->CLR = 1 << (gpio & 0x1f);
}
static inline
int hal_gpio_direction_input(unsigned gpio)
{
- hal_gpio_get_base(gpio)->FIODIR &= ~(1 << (gpio & 0x1f));
+ hal_gpio_get_base(gpio)->DIR &= ~(1 << (gpio & 0x1f));
return 0;
}
int hal_gpio_direction_output(unsigned gpio, int value)
{
hal_gpio_set_value(gpio, value);
- hal_gpio_get_base(gpio)->FIODIR |= (1 << (gpio & 0x1f));
+ hal_gpio_get_base(gpio)->DIR |= (1 << (gpio & 0x1f));
return 0;
}
#endif
#ifndef PORT_PIN
#define PORT_PIN(p,n,conf) (((p)<<PORT_SHIFT) | (n) | (conf))
-#define PORT_CONF_MASK 0xff000000
+#define PORT_CONF_MASK 0xff800000
#endif
-#define PORT_CONF_DIR_MASK 0x01000000
+#define PORT_CONF_DIR_MASK 0x00800000
#define PORT_CONF_DIR_IN (0x00000000 | PORT_CONF_SET_DIR)
-#define PORT_CONF_DIR_OUT (0x01000000 | PORT_CONF_SET_DIR)
+#define PORT_CONF_DIR_OUT (0x00800000 | PORT_CONF_SET_DIR)
-#define PORT_CONF_INIT_MASK 0x02000000
+#define PORT_CONF_INIT_MASK 0x01000000
#define PORT_CONF_INIT_LOW 0x00000000
-#define PORT_CONF_INIT_HIGH 0x02000000
+#define PORT_CONF_INIT_HIGH 0x01000000
-#define PORT_CONF_OD_MASK 0x04000000
+#define PORT_CONF_OD_MASK 0x02000000
#define PORT_CONF_OD_OFF 0x00000000
-#define PORT_CONF_OD_ON 0x04000000
+#define PORT_CONF_OD_ON 0x02000000
-#define PORT_CONF_SET_DIR 0x08000000
-
-#define PORT_CONF_MODE_MASK 0x30000000
+#define PORT_CONF_MODE_MASK 0x0c000000
#define PORT_CONF_MODE_PU 0x00000000
-#define PORT_CONF_MODE_REP 0x10000000
-#define PORT_CONF_MODE_NORM 0x20000000
-#define PORT_CONF_MODE_PD 0x30000000
+#define PORT_CONF_MODE_REP 0x04000000
+#define PORT_CONF_MODE_NORM 0x08000000
+#define PORT_CONF_MODE_PD 0x0c000000
+
+#define PORT_CONF_SET_DIR 0x10000000
-#define PORT_CONF_FNC_MASK 0xc0000000
+#define PORT_CONF_FNC_MASK 0xe0000000
#define PORT_CONF_FNC_GPIO 0x00000000
#define PORT_CONF_FNC_0 0x00000000
-#define PORT_CONF_FNC_1 0x40000000
-#define PORT_CONF_FNC_2 0x80000000
-#define PORT_CONF_FNC_3 0xc0000000
+#define PORT_CONF_FNC_1 0x20000000
+#define PORT_CONF_FNC_2 0x40000000
+#define PORT_CONF_FNC_3 0x60000000
+#define PORT_CONF_FNC_4 0x80000000
+#define PORT_CONF_FNC_5 0xa0000000
+#define PORT_CONF_FNC_6 0xc0000000
+#define PORT_CONF_FNC_7 0xe0000000
#define PORT_CONF_GPIO_IN (PORT_CONF_DIR_IN | PORT_CONF_FNC_GPIO | PORT_CONF_MODE_NORM)
#define PORT_CONF_GPIO_IN_PU (PORT_CONF_DIR_IN | PORT_CONF_FNC_GPIO | PORT_CONF_MODE_PU)
#define PORT_CONF_GPIO_OUT_HI_OD (PORT_CONF_GPIO_OUT_LO | PORT_CONF_OD_ON)
#define PORT_CONF_OUT_LO_NORM (PORT_CONF_DIR_OUT | PORT_CONF_INIT_LOW | PORT_CONF_MODE_NORM)
+#define PORT_CONF_OUT_HI_NORM (PORT_CONF_DIR_OUT | PORT_CONF_INIT_HIGH | PORT_CONF_MODE_NORM)
#define PORT_CONF_IN_PU (PORT_CONF_DIR_IN | PORT_CONF_MODE_PU)
+#define PORT_CONF_IN_REP (PORT_CONF_DIR_IN | PORT_CONF_MODE_REP)
#endif /*_HAL_GPIO_H_*/