XINU
gpio.h
Go to the documentation of this file.
1 /* gpio.h - definintions for the gpio device */
2 
3 /*
4  * Control and Status Register (CSR) definintions for the GPIO.
5  * The code maps the structure structure directly onto the base address
6  * CSR address for the device.
7  */
8 
9 /* Number of GPIO devices in the hardware */
10 #define NGPIO 4
11 
12 struct gpio_csreg {
13  volatile uint32 revision;
14  volatile uint32 res1[3];
15  volatile uint32 sysconfig;
16  volatile uint32 res2[3];
17  volatile uint32 eoi;
20  volatile uint32 irqstatus0;
21  volatile uint32 irqstatus1;
22  volatile uint32 irqset0;
23  volatile uint32 irqset1;
24  volatile uint32 irqclear0;
25  volatile uint32 irqclear1;
26  volatile uint32 irqwaken0;
27  volatile uint32 irqwaken1;
28  volatile uint32 res3[50];
29  volatile uint32 sysstatus;
30  volatile uint32 res4[6];
31  volatile uint32 control;
32  volatile uint32 oe;
33  volatile uint32 datain;
34  volatile uint32 dataout;
35  volatile uint32 level0;
36  volatile uint32 level1;
37  volatile uint32 rising;
38  volatile uint32 falling;
39  volatile uint32 deb_ena;
40  volatile uint32 deb_time;
41  volatile uint32 res5[14];
42  volatile uint32 clear_data;
43  volatile uint32 set_data;
44 };
45 
46 typedef void (*gpiointhook)(uint32, uint32);
47 
48 struct gpiocblk { /* GPIO control block */
49  gpiointhook gphookfn; /* Interrupt hook function */
50 };
51 
52 extern struct gpiocblk gpiotab[];
53 
54 /* Pin Masks */
55 #define PIN_MASK(pin) (1<<pin)
56 #define GPIO_PIN_ALL 0xFFFFFFFF
57 #define GPIO_PIN_00 0x00000001
58 #define GPIO_PIN_01 0x00000002
59 #define GPIO_PIN_02 0x00000004
60 #define GPIO_PIN_03 0x00000008
61 #define GPIO_PIN_04 0x00000010
62 #define GPIO_PIN_05 0x00000020
63 #define GPIO_PIN_06 0x00000040
64 #define GPIO_PIN_07 0x00000080
65 #define GPIO_PIN_08 0x00000100
66 #define GPIO_PIN_09 0x00000200
67 #define GPIO_PIN_10 0x00000400
68 #define GPIO_PIN_11 0x00000800
69 #define GPIO_PIN_12 0x00001000
70 #define GPIO_PIN_13 0x00002000
71 #define GPIO_PIN_14 0x00004000
72 #define GPIO_PIN_15 0x00008000
73 #define GPIO_PIN_16 0x00010000
74 #define GPIO_PIN_17 0x00020000
75 #define GPIO_PIN_18 0x00040000
76 #define GPIO_PIN_19 0x00080000
77 #define GPIO_PIN_20 0x00100000
78 #define GPIO_PIN_21 0x00200000
79 #define GPIO_PIN_22 0x00400000
80 #define GPIO_PIN_23 0x00800000
81 #define GPIO_PIN_24 0x01000000
82 #define GPIO_PIN_25 0x02000000
83 #define GPIO_PIN_26 0x04000000
84 #define GPIO_PIN_27 0x08000000
85 #define GPIO_PIN_28 0x10000000
86 #define GPIO_PIN_29 0x20000000
87 #define GPIO_PIN_30 0x40000000
88 #define GPIO_PIN_31 0x80000000
89 
90 /* Pin values */
91 #define GPIO_VALUE_LOW 0x00
92 #define GPIO_VALUE_HIGH 0x01
93 
94 /* Control features */
95 #define GPIO_OUTPUT_DISABLE 0x00
96 #define GPIO_OUTPUT_ENABLE 0x01
97 #define GPIO_REG_INT_HANDLER 0x02
98 #define GPIO_INTERRUPT_CTL 0x03
99 #define GPIO_DEB_SET_TIME 0x04
100 #define GPIO_READ_PIN 0x05
101 #define GPIO_WRITE_PIN 0x06
102 
103 
104 /* Control Flags */
105 #define GPIO_INT_LINE0_EN 0x01
106 #define GPIO_INT_LINE1_EN 0x02
107 #define GPIO_INT_RISE_TRIG 0x04
108 #define GPIO_INT_FALL_TRIG 0x08
109 #define GPIO_INT_LVL0_TRIG 0x10
110 #define GPIO_INT_LVL1_TRIG 0x20
111 #define GPIO_INT_ALL_LINES (GPIO_INT_LINE0_EN|GPIO_INT_LINE1_EN)
112 #define GPIO_INT_ALL_TRIG (GPIO_INT_RISE_TRIG|GPIO_INT_FALL_TRIG|\
113  GPIO_INT_LVL0_TRIG|GPIO_INT_LVL1_TRIG)
114 
115 
116 /* Base values of the CSR addreses of the four GPIO devices used by */
117 /* init and interrupt processing; read and write functions obtain */
118 /* these CSR addresses from the csrptr field of the device switch */
119 /* table. */
120 
121 #define GPIO0_BASE (struct gpio_csreg *)0x44E07000
122 #define GPIO1_BASE (struct gpio_csreg *)0x4804C000
123 #define GPIO2_BASE (struct gpio_csreg *)0x481AC000
124 #define GPIO3_BASE (struct gpio_csreg *)0x481AE000
125 
126 /* Interrupt vector assignments */
127 
128 #define GPIO0_INT_A 96
129 #define GPIO0_INT_B 97
130 #define GPIO1_INT_A 98
131 #define GPIO1_INT_B 99
132 #define GPIO2_INT_A 32
133 #define GPIO2_INT_B 33
134 #define GPIO3_INT_A 62
135 #define GPIO3_INT_B 63
136 
137 /* PRCM Register addresses used for debounce clock */
138 
139 #define PRCM_FCLK_GPIO1 (uint32 *)0x44E000AC
140 #define PRCM_FCLK_GPIO2 (uint32 *)0x44E000B0
141 #define PRCM_FCLK_GPIO3 (uint32 *)0x44E000B4
142 #define PRCM_FCLK_BIT (0x1<<18)
struct gpiocblk gpiotab[]
Definition: gpioinit.c:5
volatile uint32 irqstatus1raw
Definition: gpio.h:19
volatile uint32 irqset1
Definition: gpio.h:23
volatile uint32 sysconfig
Definition: gpio.h:15
volatile uint32 irqwaken0
Definition: gpio.h:26
volatile uint32 res4[6]
Definition: gpio.h:30
volatile uint32 deb_ena
Definition: gpio.h:39
volatile uint32 irqwaken1
Definition: gpio.h:27
volatile uint32 oe
Definition: gpio.h:32
volatile uint32 eoi
Definition: gpio.h:17
volatile uint32 level1
Definition: gpio.h:36
gpiointhook gphookfn
Definition: gpio.h:49
volatile uint32 res2[3]
Definition: gpio.h:16
volatile uint32 rising
Definition: gpio.h:37
volatile uint32 set_data
Definition: gpio.h:43
volatile uint32 clear_data
Definition: gpio.h:42
Definition: gpio.h:48
void(* gpiointhook)(uint32, uint32)
Definition: gpio.h:46
volatile uint32 sysstatus
Definition: gpio.h:29
volatile uint32 irqset0
Definition: gpio.h:22
volatile uint32 res1[3]
Definition: gpio.h:14
volatile uint32 falling
Definition: gpio.h:38
volatile uint32 irqclear0
Definition: gpio.h:24
volatile uint32 datain
Definition: gpio.h:33
volatile uint32 revision
Definition: gpio.h:13
volatile uint32 res3[50]
Definition: gpio.h:28
volatile uint32 irqstatus0raw
Definition: gpio.h:18
volatile uint32 deb_time
Definition: gpio.h:40
volatile uint32 res5[14]
Definition: gpio.h:41
unsigned int uint32
符号なし32ビット整数(unsigned int)
Definition: kernel.h:15
volatile uint32 irqclear1
Definition: gpio.h:25
volatile uint32 control
Definition: gpio.h:31
volatile uint32 dataout
Definition: gpio.h:34
volatile uint32 level0
Definition: gpio.h:35
volatile uint32 irqstatus1
Definition: gpio.h:21
volatile uint32 irqstatus0
Definition: gpio.h:20