summaryrefslogtreecommitdiff
path: root/bsp/AE210P/driver/gpio/gpio.c
blob: add7e79cc064c0b679e90d5d6317418912af7074 (plain)
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
84
85
86
#include "gpio.h"
//#include "hal.h"
#include "bsp_hal.h"

struct gpio_dev_t *gpio_p;

//static void _gpio_lisr(int vector)
//{
//	DEBUG(0, 1, "Enter\n");
//	if (vector != IRQ_GPIO_VECTOR)
//		hal_system_error(HAL_ERR_UNHANDLED_INTERRUPT);
//
//	/* Disable GPIO interrupt */
//	uint32_t prv_msk = hal_intc_irq_mask(IRQ_GPIO_VECTOR);
//
//	/* Get int state and then clear it */
//	unsigned int int_sr = IN32(GPIOC_INT_RAW_STATE);
//	gpio_p->int_data = int_sr;
//	OUT32(GPIOC_INT_CLEAR, int_sr);
//
//	/* Clean GPIO pending */
//	hal_intc_irq_clean(IRQ_GPIO_VECTOR);
//
//	/* Enable higher priority interrupt */
//	/* comment it to disable nested interrupt */
//	GIE_ENABLE();
//	hal_raise_bh(&gpio_p->hisr);
//
//	GIE_DISABLE();
//	/* - Enable GPIO interrupt */
//	hal_intc_irq_unmask(prv_msk);
//}

int gpio_init(struct gpio_dev_t *gpio)
{
//	int  status = HAL_SUCCESS;
//	int  core_intl;
//
//	/* initialize global gpio pointer */
//	gpio_p = gpio;
//	core_intl = hal_global_int_ctl(HAL_DISABLE_INTERRUPTS);
//
//	/* INTC */
//	// - Disable GPIO interrupt
//	hal_intc_irq_disable(IRQ_GPIO_VECTOR);
//	// - Clear GPIO interrupt status
//	hal_intc_irq_clean(IRQ_GPIO_VECTOR);
//	// - Setup #PENIRQ trigger mode - edge trigger
//	// - Setup #PENIRQ trigger level - active high
//	hal_intc_irq_config(IRQ_GPIO_VECTOR, IRQ_EDGE_TRIGGER, IRQ_ACTIVE_HIGH);
//
//
//	/* GPIO */
//	/* falling, interrupt when pressed */
//        //OUT32(GPIOC_INT_RISE_NEG, 0xFFFFFFFF);
//	/* rising, interrupt when released */
//        OUT32(GPIOC_INT_RISE_NEG, 0x0);
//	/* enable all gpio interrupt GPIO1-5*/
//        OUT32(GPIOC_INT_ENABLE, 0x3E);
//	/* set the max value to debounce */
//	OUT32(GPIOC_INT_BOUNCE_PRESCALE, 0xFFFF);
//	/* enable debounce */
//	OUT32(GPIOC_INT_BOUNCE_ENABLE, 0x3E);
//
//	status = hal_register_isr(IRQ_GPIO_VECTOR, _gpio_lisr, (void*)0);
//
//	if (status != HAL_SUCCESS){
//		DEBUG(1, 1, "Failed to register GPIO driver LISR!\n");
//		return status;
//	}
//
//	status = hal_create_bh(&gpio->hisr);
//	if (status != HAL_SUCCESS){
//		DEBUG(1, 1, "Failed to create GPIO driver HISR!\n");
//		return status;
//	}
//
//	// - Enable GPIO interrupt
//	hal_intc_irq_enable(IRQ_GPIO_VECTOR);
//
//	/* Restore CPU interrupt controller to previous level */
//	hal_global_int_ctl(core_intl);
//	return status;

	return 0;
}