mirror of
git://projects.qi-hardware.com/iris.git
synced 2024-09-30 07:16:21 +03:00
314 lines
7.7 KiB
Plaintext
314 lines
7.7 KiB
Plaintext
GPIO control:
|
|
|
|
#define GPIO_BASE 0xB0010000
|
|
|
|
#define IRQ_GPIO3 25
|
|
#define IRQ_GPIO2 26
|
|
#define IRQ_GPIO1 27
|
|
#define IRQ_GPIO0 28
|
|
|
|
#define GPIO_IRQ_LOLEVEL 0
|
|
#define GPIO_IRQ_HILEVEL 1
|
|
#define GPIO_IRQ_FALLEDG 2
|
|
#define GPIO_IRQ_RAISEDG 3
|
|
|
|
// GP ... Registers: one set for each port of 32 pins; total 128 pins means 4 groups. Total size: 4 * 0x30 == 0xc0.
|
|
#define GPIO_GPDR(n) (GPIO_BASE + (0x00 + (n)*0x30)) // D: data
|
|
#define GPIO_GPDIR(n) (GPIO_BASE + (0x04 + (n)*0x30)) // DI: data in: 0 is input; 1 is output. Disable interrupts on the pin before touching this.
|
|
#define GPIO_GPODR(n) (GPIO_BASE + (0x08 + (n)*0x30)) // OD:
|
|
#define GPIO_GPPUR(n) (GPIO_BASE + (0x0c + (n)*0x30)) // PU: pull-up (1 is enable)
|
|
#define GPIO_GPALR(n) (GPIO_BASE + (0x10 + (n)*0x30)) // AL: alternate lower: per 2 bit; 00 means use as gpio; other values mean use as alternate function
|
|
#define GPIO_GPAUR(n) (GPIO_BASE + (0x14 + (n)*0x30)) // AU: alternate upper: same thing, needs 2 registers because it's 2 bits per pin.
|
|
#define GPIO_GPIDLR(n) (GPIO_BASE + (0x18 + (n)*0x30)) // IDL: interrupt detect lower: per 2 bit (GPIO_IRQ_*)
|
|
#define GPIO_GPIDUR(n) (GPIO_BASE + (0x1c + (n)*0x30)) // IDU: interrupt detect upper: same thing, upper 16 bit
|
|
#define GPIO_GPIER(n) (GPIO_BASE + (0x20 + (n)*0x30)) // IE: interrupt enable (0 is disable)
|
|
#define GPIO_GPIMR(n) (GPIO_BASE + (0x24 + (n)*0x30)) // IM:
|
|
#define GPIO_GPFR(n) (GPIO_BASE + (0x28 + (n)*0x30)) // F: flag: set on interrupt; cleared by user.
|
|
|
|
#define IRQ_GPIO_0 48
|
|
#define NUM_GPIO 128
|
|
|
|
// Pins for alternate functions:
|
|
|
|
#define __gpio_as_ssi() \
|
|
do { \
|
|
REG_GPIO_GPALR(2) &= 0xFC00FFFF; \
|
|
REG_GPIO_GPALR(2) |= 0x01550000; \
|
|
} while (0)
|
|
|
|
#define __gpio_as_uart3() \
|
|
do { \
|
|
REG_GPIO_GPAUR(0) &= 0xFFFF0000; \
|
|
REG_GPIO_GPAUR(0) |= 0x00005555; \
|
|
} while (0)
|
|
|
|
#define __gpio_as_uart2() \
|
|
do { \
|
|
REG_GPIO_GPALR(3) &= 0x3FFFFFFF; \
|
|
REG_GPIO_GPALR(3) |= 0x40000000; \
|
|
REG_GPIO_GPAUR(3) &= 0xF3FFFFFF; \
|
|
REG_GPIO_GPAUR(3) |= 0x04000000; \
|
|
} while (0)
|
|
|
|
#define __gpio_as_uart1() \
|
|
do { \
|
|
REG_GPIO_GPAUR(0) &= 0xFFF0FFFF; \
|
|
REG_GPIO_GPAUR(0) |= 0x00050000; \
|
|
} while (0)
|
|
|
|
#define __gpio_as_uart0() \
|
|
do { \
|
|
REG_GPIO_GPAUR(3) &= 0x0FFFFFFF; \
|
|
REG_GPIO_GPAUR(3) |= 0x50000000; \
|
|
} while (0)
|
|
|
|
|
|
#define __gpio_as_scc0() \
|
|
do { \
|
|
REG_GPIO_GPALR(2) &= 0xFFFFFFCC; \
|
|
REG_GPIO_GPALR(2) |= 0x00000011; \
|
|
} while (0)
|
|
|
|
#define __gpio_as_scc1() \
|
|
do { \
|
|
REG_GPIO_GPALR(2) &= 0xFFFFFF33; \
|
|
REG_GPIO_GPALR(2) |= 0x00000044; \
|
|
} while (0)
|
|
|
|
#define __gpio_as_scc() \
|
|
do { \
|
|
__gpio_as_scc0(); \
|
|
__gpio_as_scc1(); \
|
|
} while (0)
|
|
|
|
#define __gpio_as_dma() \
|
|
do { \
|
|
REG_GPIO_GPALR(0) &= 0x00FFFFFF; \
|
|
REG_GPIO_GPALR(0) |= 0x55000000; \
|
|
REG_GPIO_GPAUR(0) &= 0xFF0FFFFF; \
|
|
REG_GPIO_GPAUR(0) |= 0x00500000; \
|
|
} while (0)
|
|
|
|
#define __gpio_as_msc() \
|
|
do { \
|
|
REG_GPIO_GPALR(1) &= 0xFFFF000F; \
|
|
REG_GPIO_GPALR(1) |= 0x00005550; \
|
|
} while (0)
|
|
|
|
#define __gpio_as_pcmcia() \
|
|
do { \
|
|
REG_GPIO_GPAUR(2) &= 0xF000FFFF; \
|
|
REG_GPIO_GPAUR(2) |= 0x05550000; \
|
|
} while (0)
|
|
|
|
#define __gpio_as_emc(csmask) \
|
|
do { \
|
|
REG_GPIO_GPALR(2) &= 0x3FFFFFFF; \
|
|
REG_GPIO_GPALR(2) |= 0x40000000; \
|
|
REG_GPIO_GPAUR(2) &= 0xFFFF0000; \
|
|
REG_GPIO_GPAUR(2) |= 0x00005555; \
|
|
} while (0)
|
|
|
|
#define __gpio_as_lcd_slave() \
|
|
do { \
|
|
REG_GPIO_GPALR(1) &= 0x0000FFFF; \
|
|
REG_GPIO_GPALR(1) |= 0x55550000; \
|
|
REG_GPIO_GPAUR(1) &= 0x00000000; \
|
|
REG_GPIO_GPAUR(1) |= 0x55555555; \
|
|
} while (0)
|
|
|
|
#define __gpio_as_lcd_master() \
|
|
do { \
|
|
REG_GPIO_GPALR(1) &= 0x0000FFFF; \
|
|
REG_GPIO_GPALR(1) |= 0x55550000; \
|
|
REG_GPIO_GPAUR(1) &= 0x00000000; \
|
|
REG_GPIO_GPAUR(1) |= 0x556A5555; \
|
|
} while (0)
|
|
|
|
#define __gpio_as_usb() \
|
|
do { \
|
|
REG_GPIO_GPAUR(0) &= 0x00FFFFFF; \
|
|
REG_GPIO_GPAUR(0) |= 0x55000000; \
|
|
} while (0)
|
|
|
|
#define __gpio_as_ac97() \
|
|
do { \
|
|
REG_GPIO_GPALR(2) &= 0xC3FF03FF; \
|
|
REG_GPIO_GPALR(2) |= 0x24005400; \
|
|
} while (0)
|
|
|
|
#define __gpio_as_i2s_slave() \
|
|
do { \
|
|
REG_GPIO_GPALR(2) &= 0xC3FF0CFF; \
|
|
REG_GPIO_GPALR(2) |= 0x14005100; \
|
|
} while (0)
|
|
|
|
#define __gpio_as_i2s_master() \
|
|
do { \
|
|
REG_GPIO_GPALR(2) &= 0xC3FF0CFF; \
|
|
REG_GPIO_GPALR(2) |= 0x28005100; \
|
|
} while (0)
|
|
|
|
#define __gpio_as_eth() \
|
|
do { \
|
|
REG_GPIO_GPAUR(3) &= 0xFC000000; \
|
|
REG_GPIO_GPAUR(3) |= 0x01555555; \
|
|
} while (0)
|
|
|
|
#define __gpio_as_pwm() \
|
|
do { \
|
|
REG_GPIO_GPAUR(2) &= 0x0FFFFFFF; \
|
|
REG_GPIO_GPAUR(2) |= 0x50000000; \
|
|
} while (0)
|
|
|
|
#define __gpio_as_ps2() \
|
|
do { \
|
|
REG_GPIO_GPALR(1) &= 0xFFFFFFF0; \
|
|
REG_GPIO_GPALR(1) |= 0x00000005; \
|
|
} while (0)
|
|
|
|
#define __gpio_as_uprt() \
|
|
do { \
|
|
REG_GPIO_GPALR(1) &= 0x0000000F; \
|
|
REG_GPIO_GPALR(1) |= 0x55555550; \
|
|
REG_GPIO_GPALR(3) &= 0xC0000000; \
|
|
REG_GPIO_GPALR(3) |= 0x15555555; \
|
|
} while (0)
|
|
|
|
#define __gpio_as_cim() \
|
|
do { \
|
|
REG_GPIO_GPALR(0) &= 0xFF000000; \
|
|
REG_GPIO_GPALR(0) |= 0x00555555; \
|
|
} while (0)
|
|
|
|
|
|
// Pins on the trendtac:
|
|
0 keyboard
|
|
1 keyboard
|
|
2 keyboard
|
|
3 keyboard
|
|
4 keyboard
|
|
5 keyboard
|
|
6 keyboard
|
|
7 keyboard
|
|
8 keyboard interrupt
|
|
9
|
|
10
|
|
11
|
|
12
|
|
13 touchpad right button
|
|
14
|
|
15
|
|
16 touchpad left button
|
|
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 keyboard
|
|
97 keyboard
|
|
98 keyboard
|
|
99 keyboard
|
|
100 keyboard
|
|
101 keyboard
|
|
102 keyboard
|
|
103 keyboard
|
|
104 keyboard
|
|
105 keyboard
|
|
106 keyboard
|
|
107 keyboard
|
|
108 keyboard
|
|
109 keyboard
|
|
110 keyboard
|
|
111 keyboard
|
|
112
|
|
113
|
|
114
|
|
115
|
|
116
|
|
117
|
|
118
|
|
119
|
|
120
|
|
121
|
|
122
|
|
123
|
|
124
|
|
125 keyboard
|
|
126
|
|
127
|