1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 | #include "osapi.h" #include "user_interface.h" #include "pwm.h" #include "uart.h" #include "mem.h" #include "espmissingincludes.h" #include "stdint.h" #include "gpio.h" os_timer_t sensor_timer; /** * @brief gpio_interrupt_callback * @param interruptMask A mask indicating which GPIOs have changed. * @param arg Optional argument. */ static void gpio_interrupt_callback(uint32 interruptMask, void *arg) { uint32 gpio_status = GPIO_REG_READ(GPIO_STATUS_ADDRESS); gpio_intr_ack(interruptMask); static uint32_t val = 0; val ^= 1; GPIO_OUTPUT_SET(1, val); int pin; for (pin = 0; pin < 16; pin++) { if ((interruptMask & (1 << pin)) != 0) { // Do something //gpio_pin_intr_state_set(GPIO_ID_PIN(pin), GPIO_PIN_INTR_ANYEDGE); //uint32_t sensorState = GPIO_INPUT_GET(3); //GPIO_OUTPUT_SET(1, sensorState); } } } void gpio_setup_interrupts(void) { uint8_t pin; for (pin = 0; pin < 16; pin++) { //gpio_pin_intr_state_set(GPIO_ID_PIN(pin), GPIO_PIN_INTR_DISABLE); gpio_pin_intr_state_set(GPIO_ID_PIN(pin), GPIO_PIN_INTR_ANYEDGE); } //gpio_pin_intr_state_set(GPIO_ID_PIN(3), GPIO_PIN_INTR_ANYEDGE); } void gpio_user_init(void) { /* Set serial TX to GPIO output. */ PIN_FUNC_SELECT(PERIPHS_IO_MUX_U0TXD_U, FUNC_GPIO1); /* Set serial RX to GPIO.*/ PIN_FUNC_SELECT(PERIPHS_IO_MUX_U0RXD_U, FUNC_GPIO3); /* Change from output to input. */ GPIO_DIS_OUTPUT(3); } void read_hall_effect_sensor(void *pArg) { uint32_t sensorState = GPIO_INPUT_GET(3); GPIO_OUTPUT_SET(1, sensorState); } void user_init() { gpio_user_init(); GPIO_OUTPUT_SET(1, 1); // It would be better to use an interrupt, fix later. //os_timer_setfn(&sensor_timer, read_hall_effect_sensor, NULL); //os_timer_arm(&sensor_timer, 200, 1); gpio_setup_interrupts(); } |