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