#include "gpio.h" gpio_port* get_gpio_dev(char port) { switch(port) { case 'a': case 'A': return ((gpio_port *)(GPIO_BASE)); case 'b': case 'B': return ((gpio_port *)(GPIO_BASE + 0xC)); case 'c': case 'C': return ((gpio_port *)(GPIO_BASE + 0x18)); case 'd': case 'D': return ((gpio_port *)(GPIO_BASE + 0x24)); }; return 0; } enum ERL_ERROR gpio_pin_config(char port, int pin, int val, int dir, int ctl) { gpio_port* gport = get_gpio_dev(port); if(!gport) { return ERL_SYSTEM_ERROR; } if ((pin<0) || (pin>31)) { return ERL_SYSTEM_ERROR; } if (val) gport->port_dr._val |= (1<port_dr._val &= ~(1<port_ddr._val |= (1<port_ddr._val &= ~(1<port_ctl._val |= (1<port_ctl._val &= ~(1<31)) { return ERL_SYSTEM_ERROR; } if (val) gport->port_dr._val |= (1<port_dr._val &= ~(1<31)) { return ERL_SYSTEM_ERROR; } gport->port_dr._val ^= (1<