Add .gitignore
[rapper.git] / bitbucket_lpc1768 / io-pin.h
1 /*
2  * IO functions for NXP LPC1768. (generated file, check io-pin.ss)
3  *
4  * See also: http://bitbucket.org/jpc/lpc1768/
5  *
6  * Copyright (c) 2010 LoEE - Jakub Piotr Cłapa
7  * This program is released under the new BSD license.
8  */
9 #ifndef IO_PIN_H
10 #define IO_PIN_H
11
12 #include "CMSIS/LPC17xx.h"
13
14 enum pin_port {
15 P0 = 0,
16 P1 = 32,
17 P2 = 64,
18 P3 = 96,
19 P4 = 128,
20 };
21
22 enum pin_dir {
23   PIN_IN = 0,
24   PIN_OUT = 1,
25 };
26
27 extern void invalid_pin_error () __attribute__((error ("Invalid IO pin number.")));
28
29 extern __inline__ __attribute__((always_inline))
30 int pin_read (int pin_no)
31 {
32   switch(pin_no) {
33     case 0 ... 31:
34       return LPC_GPIO0->FIOPIN & (1 << (pin_no - 0));
35     case 32 ... 63:
36       return LPC_GPIO1->FIOPIN & (1 << (pin_no - 32));
37     case 64 ... 95:
38       return LPC_GPIO2->FIOPIN & (1 << (pin_no - 64));
39     case 96 ... 127:
40       return LPC_GPIO3->FIOPIN & (1 << (pin_no - 96));
41     case 128 ... 159:
42       return LPC_GPIO4->FIOPIN & (1 << (pin_no - 128));
43     default:
44       invalid_pin_error ();
45       break;
46   }
47   return 0;
48 }
49
50 extern __inline__ __attribute__((always_inline))
51 void pin_write (int pin_no, int value)
52 {
53   switch(pin_no) {
54     case 0 ... 31:
55       if (value) {
56         LPC_GPIO0->FIOSET = (1 << (pin_no - 0));
57       } else {
58         LPC_GPIO0->FIOCLR = (1 << (pin_no - 0));
59       }
60       break;
61     case 32 ... 63:
62       if (value) {
63         LPC_GPIO1->FIOSET = (1 << (pin_no - 32));
64       } else {
65         LPC_GPIO1->FIOCLR = (1 << (pin_no - 32));
66       }
67       break;
68     case 64 ... 95:
69       if (value) {
70         LPC_GPIO2->FIOSET = (1 << (pin_no - 64));
71       } else {
72         LPC_GPIO2->FIOCLR = (1 << (pin_no - 64));
73       }
74       break;
75     case 96 ... 127:
76       if (value) {
77         LPC_GPIO3->FIOSET = (1 << (pin_no - 96));
78       } else {
79         LPC_GPIO3->FIOCLR = (1 << (pin_no - 96));
80       }
81       break;
82     case 128 ... 159:
83       if (value) {
84         LPC_GPIO4->FIOSET = (1 << (pin_no - 128));
85       } else {
86         LPC_GPIO4->FIOCLR = (1 << (pin_no - 128));
87       }
88       break;
89     default:
90       invalid_pin_error ();
91       break;
92   }
93 }
94
95 extern __inline__ __attribute__((always_inline))
96 void pin_dir (int pin_no, enum pin_dir dir)
97 {
98   switch(pin_no) {
99     case 0 ... 31:
100       if (dir == PIN_OUT) {
101         LPC_GPIO0->FIODIR |= (1 << (pin_no - 0));
102       } else {
103         LPC_GPIO0->FIODIR &= (1 << (pin_no - 0));
104       }
105       break;
106     case 32 ... 63:
107       if (dir == PIN_OUT) {
108         LPC_GPIO1->FIODIR |= (1 << (pin_no - 32));
109       } else {
110         LPC_GPIO1->FIODIR &= (1 << (pin_no - 32));
111       }
112       break;
113     case 64 ... 95:
114       if (dir == PIN_OUT) {
115         LPC_GPIO2->FIODIR |= (1 << (pin_no - 64));
116       } else {
117         LPC_GPIO2->FIODIR &= (1 << (pin_no - 64));
118       }
119       break;
120     case 96 ... 127:
121       if (dir == PIN_OUT) {
122         LPC_GPIO3->FIODIR |= (1 << (pin_no - 96));
123       } else {
124         LPC_GPIO3->FIODIR &= (1 << (pin_no - 96));
125       }
126       break;
127     case 128 ... 159:
128       if (dir == PIN_OUT) {
129         LPC_GPIO4->FIODIR |= (1 << (pin_no - 128));
130       } else {
131         LPC_GPIO4->FIODIR &= (1 << (pin_no - 128));
132       }
133       break;
134     default:
135       invalid_pin_error ();
136       break;
137   }
138 }
139
140 #endif