summaryrefslogtreecommitdiff
path: root/bsp/ls1cdev
diff options
context:
space:
mode:
author勤为本 <[email protected]>2017-07-20 17:35:03 +0800
committer勤为本 <[email protected]>2017-07-20 17:35:03 +0800
commit358612c8a2fc7c178a8e3086128e6943b77e1979 (patch)
tree92689fb0c111db2a028366fc6a3895628d177949 /bsp/ls1cdev
parentd1bb7c61f4d46d07ae0ce4735c857b742974cafb (diff)
支持GPIO中断(外部中断)
Diffstat (limited to 'bsp/ls1cdev')
-rw-r--r--bsp/ls1cdev/libraries/ls1c_gpio.c59
-rw-r--r--bsp/ls1cdev/libraries/ls1c_gpio.h20
-rw-r--r--bsp/ls1cdev/libraries/ls1c_regs.h34
3 files changed, 110 insertions, 3 deletions
diff --git a/bsp/ls1cdev/libraries/ls1c_gpio.c b/bsp/ls1cdev/libraries/ls1c_gpio.c
index 11d696d48e..d0f0633b4e 100644
--- a/bsp/ls1cdev/libraries/ls1c_gpio.c
+++ b/bsp/ls1cdev/libraries/ls1c_gpio.c
@@ -204,4 +204,63 @@ unsigned int gpio_get(unsigned int gpio)
}
+/**
+ * ���������
+ * @gpio gpio����
+ * @type �����жϵ��������ߵ�ƽ�������͵�ƽ�����������ش��� or �½��ش���
+ */
+void gpio_set_irq_type(unsigned int gpio, gpio_irq_type_t type)
+{
+ volatile unsigned int *int_pol; // �жϼ���ѡ��Ĵ���
+ volatile unsigned int *int_edge; // �жϱ���ѡ��Ĵ���
+ unsigned int port = GPIO_GET_PORT(gpio);
+ unsigned int pin = GPIO_GET_PIN(gpio);
+
+ // ��ȡ�Ĵ�����ַ
+ switch (port)
+ {
+ case 0: // GPIO[31:0]
+ int_pol = (volatile unsigned int *)LS1C_INT2_POL;
+ int_edge = (volatile unsigned int *)LS1C_INT2_EDGE;
+ break;
+
+ case 1: // GPIO[63:32]
+ int_pol = (volatile unsigned int *)LS1C_INT3_POL;
+ int_edge = (volatile unsigned int *)LS1C_INT3_EDGE;
+ break;
+
+ case 2: // GPIO[95:64]
+ int_pol = (volatile unsigned int *)LS1C_INT4_POL;
+ int_edge = (volatile unsigned int *)LS1C_INT4_EDGE;
+ break;
+ }
+
+ // ���������
+ switch (type)
+ {
+ case IRQ_TYPE_EDGE_RISING:
+ *int_pol |= (1 << pin);
+ *int_edge |= (1 << pin);
+ break;
+
+ case IRQ_TYPE_EDGE_FALLING:
+ *int_pol &= ~(1 << pin);
+ *int_edge |= (1 << pin);
+ break;
+
+ case IRQ_TYPE_LEVEL_HIGH:
+ *int_pol |= (1 << pin);
+ *int_edge &= ~(1 << pin);
+ break;
+
+ case IRQ_TYPE_LEVEL_LOW:
+ *int_pol &= ~(1 << pin);
+ *int_edge &= ~(1 << pin);
+ break;
+ }
+
+ return ;
+}
+
+
diff --git a/bsp/ls1cdev/libraries/ls1c_gpio.h b/bsp/ls1cdev/libraries/ls1c_gpio.h
index d20085cf4a..1609684bd3 100644
--- a/bsp/ls1cdev/libraries/ls1c_gpio.h
+++ b/bsp/ls1cdev/libraries/ls1c_gpio.h
@@ -29,6 +29,19 @@ typedef enum{
}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;
+
/*
@@ -73,6 +86,13 @@ 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
diff --git a/bsp/ls1cdev/libraries/ls1c_regs.h b/bsp/ls1cdev/libraries/ls1c_regs.h
index 22ac433fda..fb67086d34 100644
--- a/bsp/ls1cdev/libraries/ls1c_regs.h
+++ b/bsp/ls1cdev/libraries/ls1c_regs.h
@@ -74,13 +74,41 @@
+// �ж����üĴ���
+#define LS1C_INT0_SR (0xbfd01040)
+#define LS1C_INT0_EN (0xbfd01044)
+#define LS1C_INT0_SET (0xbfd01048)
+#define LS1C_INT0_CLR (0xbfd0104c)
+#define LS1C_INT0_POL (0xbfd01050)
+#define LS1C_INT0_EDGE (0xbfd01054)
+#define LS1c_INT1_SR (0xbfd01058)
+#define LS1C_INT1_EN (0xbfd0105c)
+#define LS1C_INT1_SET (0xbfd01060)
+#define LS1C_INT1_CLR (0xbfd01064)
+#define LS1C_INT1_POL (0xbfd01068)
+#define LS1C_INT1_EDGE (0xbfd0106c)
+#define LS1C_INT2_SR (0xbfd01070)
+#define LS1C_INT2_EN (0xbfd01074)
+#define LS1C_INT2_SET (0xbfd01078)
+#define LS1C_INT2_CLR (0xbfd0107c)
+#define LS1C_INT2_POL (0xbfd01080)
+#define LS1C_INT2_EDGE (0xbfd01084)
+#define LS1C_INT3_SR (0xbfd01088)
+#define LS1C_INT3_EN (0xbfd0108c)
+#define LS1C_INT3_SET (0xbfd01090)
+#define LS1C_INT3_CLR (0xbfd01094)
+#define LS1C_INT3_POL (0xbfd01098)
+#define LS1C_INT3_EDGE (0xbfd0109c)
-
-
-
+#define LS1C_INT4_SR (0xbfd010a0)
+#define LS1C_INT4_EN (0xbfd010a4)
+#define LS1C_INT4_SET (0xbfd010a8)
+#define LS1C_INT4_CLR (0xbfd010ac)
+#define LS1C_INT4_POL (0xbfd010b0)
+#define LS1C_INT4_EDGE (0xbfd010b4)