1 /*
2  * Copyright (c) 2006-2018, RT-Thread Development Team
3  *
4  * SPDX-License-Identifier: Apache-2.0
5  *
6  * Change Logs:
7  * Date           Author       Notes
8  * 2017-09-06     ��Ϊ��       first version
9  */
10 
11 
12 #ifndef __OPENLOONGSON_GPIO_H
13 #define __OPENLOONGSON_GPIO_H
14 
15 
16 
17 // ��о1c��gpio�ǰ���0,1,2,3,4...������˳���ŵģ�
18 // ���ڲ����Ĵ�����ʱ�����ǰ���ÿ32��һ�����ֵ�
19 // ��������������ԣ���ÿ���32��gpio����һ��"port"��ÿ��gpio��ÿ���е�������"pin"
20 // port = gpio / 32
21 // pin  = gpio % 32
22 // ����GPIO50��port=1,pin=18
23 #define GPIO_GET_PORT(gpio)                 ((gpio) / 32)
24 #define GPIO_GET_PIN(gpio)                  ((gpio) % 32)
25 
26 
27 // gpio�Ĺ���ģʽ--���롢���
28 typedef enum{
29     gpio_mode_output = 0,       // ���
30     gpio_mode_input = 1         // ����
31 }gpio_mode_t;
32 
33 
34 //  gpio�ߵ͵�ƽֵ
35 typedef enum{
36     gpio_level_low = 0,         // �͵�ƽ
37     gpio_level_high = 1         // �ߵ�ƽ
38 }gpio_level_t;
39 
40 
41 typedef enum {
42     // �����ش���
43 	IRQ_TYPE_EDGE_RISING	= 0x00000001,
44 	// �½��ش���
45 	IRQ_TYPE_EDGE_FALLING	= 0x00000002,
46 	IRQ_TYPE_EDGE_BOTH	= (IRQ_TYPE_EDGE_FALLING | IRQ_TYPE_EDGE_RISING),
47 	// �ߵ�ƽ����
48 	IRQ_TYPE_LEVEL_HIGH	= 0x00000004,
49 	// �͵�ƽ����
50 	IRQ_TYPE_LEVEL_LOW	= 0x00000008,
51 	IRQ_TYPE_LEVEL_MASK	= (IRQ_TYPE_LEVEL_LOW | IRQ_TYPE_LEVEL_HIGH),
52 }gpio_irq_type_t;
53 
54 
55 
56 /*
57  * ��ȡָ��gpio��CFG�Ĵ���
58  * @gpio gpio���
59  * @ret CFG�Ĵ���
60  */
61 volatile unsigned int *gpio_get_cfg_reg(unsigned int gpio);
62 
63 /*
64  * gpio��ʼ��
65  * @gpio gpio���ţ�ȡֵ��Χ[0, 127]
66  * @mode gpio�Ĺ���ģʽ(���롢���)
67  *
68  * ��: ��gpio50��ʼ��Ϊ���
69  * gpio_init(50, gpio_mode_output);
70  */
71 void gpio_init(unsigned int gpio, gpio_mode_t mode);
72 
73 
74 /*
75  * ��ָ��gpio����ߵ�ƽ��͵�ƽ
76  * @gpio gpio���ţ�ȡֵ��Χ[0, 127]
77  * @level ��ƽֵ
78  *
79  * ��: ��gpio50������͵�ƽ
80  * gpio_set(50, gpio_level_low);
81  */
82 void gpio_set(unsigned int gpio, gpio_level_t level);
83 
84 
85 
86 /*
87  * ��ȡָ��gpio���ŵ�ֵ
88  * @gpio gpio���ţ�ȡֵ��Χ[0,127]
89  *
90  * ��: ��ȡgpio50�����ϵ�ֵ
91  * gpio_level_t level;
92  * level = gpio_get(50);
93  */
94 unsigned int gpio_get(unsigned int gpio);
95 
96 
97 
98 /**
99  * �����ж�����
100  * @gpio gpio����
101  * @type �����жϵ��������ߵ�ƽ�������͵�ƽ�����������ش��� or �½��ش���
102  */
103 void gpio_set_irq_type(unsigned int gpio, gpio_irq_type_t type);
104 
105 
106 
107 #endif
108 
109