hh

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();
}