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
87
88
89
90
91
92
93
94
95
96
97
98
99
|
#ifndef __OPENLOONGSON_GPIO_H
#define __OPENLOONGSON_GPIO_H
// ��о1c��gpio�ǰ���0,1,2,3,4...������˳���ŵģ�
// ���ڲ����Ĵ�����ʱ�����ǰ���ÿ32��һ�����ֵ�
// ��������������ԣ���ÿ���32��gpio����һ��"port"��ÿ��gpio��ÿ���е�������"pin"
// port = gpio / 32
// pin = gpio % 32
// ����GPIO50��port=1,pin=18
#define GPIO_GET_PORT(gpio) ((gpio) / 32)
#define GPIO_GET_PIN(gpio) ((gpio) % 32)
// gpio�Ĺ���ģʽ--���롢���
typedef enum{
gpio_mode_output = 0, // ���
gpio_mode_input = 1 // ����
}gpio_mode_t;
// gpio�ߵ͵�ƽֵ
typedef enum{
gpio_level_low = 0, // �͵�ƽ
gpio_level_high = 1 // �ߵ�ƽ
}gpio_level_t;
typedef enum {
// �����ش���
IRQ_TYPE_EDGE_RISING = 0x00000001,
// �½��ش���
IRQ_TYPE_EDGE_FALLING = 0x00000002,
IRQ_TYPE_EDGE_BOTH = (IRQ_TYPE_EDGE_FALLING | IRQ_TYPE_EDGE_RISING),
// �ߵ�ƽ����
IRQ_TYPE_LEVEL_HIGH = 0x00000004,
// �͵�ƽ����
IRQ_TYPE_LEVEL_LOW = 0x00000008,
IRQ_TYPE_LEVEL_MASK = (IRQ_TYPE_LEVEL_LOW | IRQ_TYPE_LEVEL_HIGH),
}gpio_irq_type_t;
/*
* ��ȡָ��gpio��CFG�Ĵ���
* @gpio gpio���
* @ret CFG�Ĵ���
*/
volatile unsigned int *gpio_get_cfg_reg(unsigned int gpio);
/*
* gpio��ʼ��
* @gpio gpio���ţ�ȡֵ��Χ[0, 127]
* @mode gpio�Ĺ���ģʽ(���롢���)
*
* ��: ��gpio50��ʼ��Ϊ���
* gpio_init(50, gpio_mode_output);
*/
void gpio_init(unsigned int gpio, gpio_mode_t mode);
/*
* ��ָ��gpio����ߵ�ƽ��͵�ƽ
* @gpio gpio���ţ�ȡֵ��Χ[0, 127]
* @level ��ƽֵ
*
* ��: ��gpio50������͵�ƽ
* gpio_set(50, gpio_level_low);
*/
void gpio_set(unsigned int gpio, gpio_level_t level);
/*
* ��ȡָ��gpio���ŵ�ֵ
* @gpio gpio���ţ�ȡֵ��Χ[0,127]
*
* ��: ��ȡgpio50�����ϵ�ֵ
* gpio_level_t level;
* level = gpio_get(50);
*/
unsigned int gpio_get(unsigned int gpio);
/**
* ���������
* @gpio gpio����
* @type �����жϵ��������ߵ�ƽ�������͵�ƽ�����������ش��� or �½��ش���
*/
void gpio_set_irq_type(unsigned int gpio, gpio_irq_type_t type);
#endif
|