source: rtems/bsps/arm/lpc32xx/include/bsp/i2c.h @ 2afb22b

5
Last change on this file since 2afb22b was 2afb22b, checked in by Chris Johns <chrisj@…>, on 12/23/17 at 07:18:56

Remove make preinstall

A speciality of the RTEMS build system was the make preinstall step. It
copied header files from arbitrary locations into the build tree. The
header files were included via the -Bsome/build/tree/path GCC command
line option.

This has at least seven problems:

  • The make preinstall step itself needs time and disk space.
  • Errors in header files show up in the build tree copy. This makes it hard for editors to open the right file to fix the error.
  • There is no clear relationship between source and build tree header files. This makes an audit of the build process difficult.
  • The visibility of all header files in the build tree makes it difficult to enforce API barriers. For example it is discouraged to use BSP-specifics in the cpukit.
  • An introduction of a new build system is difficult.
  • Include paths specified by the -B option are system headers. This may suppress warnings.
  • The parallel build had sporadic failures on some hosts.

This patch removes the make preinstall step. All installed header
files are moved to dedicated include directories in the source tree.
Let @RTEMS_CPU@ be the target architecture, e.g. arm, powerpc, sparc,
etc. Let @RTEMS_BSP_FAMILIY@ be a BSP family base directory, e.g.
erc32, imx, qoriq, etc.

The new cpukit include directories are:

  • cpukit/include
  • cpukit/score/cpu/@RTEMS_CPU@/include
  • cpukit/libnetworking

The new BSP include directories are:

  • bsps/include
  • bsps/@RTEMS_CPU@/include
  • bsps/@RTEMS_CPU@/@RTEMS_BSP_FAMILIY@/include

There are build tree include directories for generated files.

The include directory order favours the most general header file, e.g.
it is not possible to override general header files via the include path
order.

The "bootstrap -p" option was removed. The new "bootstrap -H" option
should be used to regenerate the "headers.am" files.

Update #3254.

  • Property mode set to 100644
File size: 6.0 KB
RevLine 
[3103d4cb]1/**
2 * @file
3 *
4 * @ingroup lpc32xx_i2c
5 *
6 * @brief I2C support API.
7 */
8
9/*
10 * Copyright (c) 2010
11 * embedded brains GmbH
12 * Obere Lagerstr. 30
13 * D-82178 Puchheim
14 * Germany
15 * <rtems@embedded-brains.de>
16 *
17 * The license and distribution terms for this file may be
18 * found in the file LICENSE in this distribution or at
[c499856]19 * http://www.rtems.org/license/LICENSE.
[3103d4cb]20 */
21
22#ifndef LIBBSP_ARM_LPC32XX_I2C_H
23#define LIBBSP_ARM_LPC32XX_I2C_H
24
25#include <rtems.h>
26
27#include <bsp/lpc32xx.h>
28
29#ifdef __cplusplus
30extern "C" {
31#endif /* __cplusplus */
32
33/**
34 * @defgroup lpc32xx_i2c I2C Support
35 *
[2d6543d4]36 * @ingroup arm_lpc32xx
[3103d4cb]37 *
38 * @brief I2C Support
39 *
40 * All writes and reads will be performed in master mode.  Exclusive bus access
41 * will be assumed.
42 *
43 * @{
44 */
45
46/**
47 * @name I2C Clock Control Register (I2CCLK_CTRL)
48 *
49 * @{
50 */
51
[4a14d7b1]52#define I2CCLK_1_EN BSP_BIT32(0)
53#define I2CCLK_2_EN BSP_BIT32(1)
54#define I2CCLK_1_HIGH_DRIVE BSP_BIT32(2)
55#define I2CCLK_2_HIGH_DRIVE BSP_BIT32(3)
56#define I2CCLK_USB_HIGH_DRIVE BSP_BIT32(4)
[3103d4cb]57
58/** @} */
59
60/**
61 * @name I2C TX Data FIFO Register (I2Cn_TX)
62 *
63 * @{
64 */
65
[4a14d7b1]66#define I2C_TX_READ BSP_BIT32(0)
67#define I2C_TX_ADDR(val) BSP_FLD32(val, 1, 7)
68#define I2C_TX_START BSP_BIT32(8)
69#define I2C_TX_STOP BSP_BIT32(9)
[3103d4cb]70
71/** @} */
72
73/**
74 * @name I2C Status Register (I2Cn_STAT)
75 *
76 * @{
77 */
78
[4a14d7b1]79#define I2C_STAT_TDI BSP_BIT32(0)
80#define I2C_STAT_AFI BSP_BIT32(1)
81#define I2C_STAT_NAI BSP_BIT32(2)
82#define I2C_STAT_DRMI BSP_BIT32(3)
83#define I2C_STAT_DRSI BSP_BIT32(4)
84#define I2C_STAT_ACTIVE BSP_BIT32(5)
85#define I2C_STAT_SCL BSP_BIT32(6)
86#define I2C_STAT_SDA BSP_BIT32(7)
87#define I2C_STAT_RFF BSP_BIT32(8)
88#define I2C_STAT_RFE BSP_BIT32(9)
89#define I2C_STAT_TFF BSP_BIT32(10)
90#define I2C_STAT_TFE BSP_BIT32(11)
91#define I2C_STAT_TFFS BSP_BIT32(12)
92#define I2C_STAT_TFES BSP_BIT32(13)
[3103d4cb]93
94/** @} */
95
96/**
97 * @name I2C Control Register (I2Cn_CTRL)
98 *
99 * @{
100 */
101
[4a14d7b1]102#define I2C_CTRL_TDIE BSP_BIT32(0)
103#define I2C_CTRL_AFIE BSP_BIT32(1)
104#define I2C_CTRL_NAIE BSP_BIT32(2)
105#define I2C_CTRL_DRMIE BSP_BIT32(3)
106#define I2C_CTRL_DRSIE BSP_BIT32(4)
107#define I2C_CTRL_RFFIE BSP_BIT32(5)
108#define I2C_CTRL_RFDAIE BSP_BIT32(6)
109#define I2C_CTRL_TFFIO BSP_BIT32(7)
110#define I2C_CTRL_RESET BSP_BIT32(8)
111#define I2C_CTRL_SEVEN BSP_BIT32(9)
112#define I2C_CTRL_TFFSIE BSP_BIT32(10)
[3103d4cb]113
114/** @} */
115
116/**
117 * @brief Initializes the I2C module @a i2c.
118 *
119 * Valid @a clock_in_hz values are 100000 and 400000.
120 *
121 * @retval RTEMS_SUCCESSFUL Successful operation.
122 * @retval RTEMS_INVALID_ID Invalid @a i2c value.
123 * @retval RTEMS_INVALID_CLOCK Invalid @a clock_in_hz value.
124 */
125rtems_status_code lpc32xx_i2c_init(
126  volatile lpc32xx_i2c *i2c,
127  unsigned clock_in_hz
128);
129
130/**
131 * @brief Resets the I2C module @a i2c.
132 */
133void lpc32xx_i2c_reset(volatile lpc32xx_i2c *i2c);
134
135/**
136 * @brief Sets the I2C module @a i2c clock.
137 *
138 * Valid @a clock_in_hz values are 100000 and 400000.
139 *
140 * @retval RTEMS_SUCCESSFUL Successful operation.
141 * @retval RTEMS_INVALID_CLOCK Invalid @a clock_in_hz value.
142 */
143rtems_status_code lpc32xx_i2c_clock(
144  volatile lpc32xx_i2c *i2c,
145  unsigned clock_in_hz
146);
147
148/**
149 * @brief Starts a write transaction on the I2C module @a i2c.
150 *
151 * The address parameter @a addr must not contain the read/write bit.
152 *
153 * The error status may be delayed to the next
154 * lpc32xx_i2c_write_with_optional_stop() due to controller flaws.
155 *
156 * @retval RTEMS_SUCCESSFUL Successful operation.
157 * @retval RTEMS_IO_ERROR Received a NACK from the slave.
158 */
159rtems_status_code lpc32xx_i2c_write_start(
160  volatile lpc32xx_i2c *i2c,
161  unsigned addr
162);
163
164/**
165 * @brief Writes data via the I2C module @a i2c with optional stop.
166 *
167 * The error status may be delayed to the next
168 * lpc32xx_i2c_write_with_optional_stop() due to controller flaws.
169 *
170 * @retval RTEMS_SUCCESSFUL Successful operation.
171 * @retval RTEMS_IO_ERROR Received a NACK from the slave.
172 */
173rtems_status_code lpc32xx_i2c_write_with_optional_stop(
174  volatile lpc32xx_i2c *i2c,
175  const uint8_t *out,
176  size_t n,
177  bool stop
178);
179
180/**
181 * @brief Starts a read transaction on the I2C module @a i2c.
182 *
183 * The address parameter @a addr must not contain the read/write bit.
184 *
185 * The error status may be delayed to the next
186 * lpc32xx_i2c_read_with_optional_stop() due to controller flaws.
187 *
188 * @retval RTEMS_SUCCESSFUL Successful operation.
189 * @retval RTEMS_IO_ERROR Received a NACK from the slave.
190 */
191rtems_status_code lpc32xx_i2c_read_start(
192  volatile lpc32xx_i2c *i2c,
193  unsigned addr
194);
195
196/**
197 * @brief Reads data via the I2C module @a i2c with optional stop.
198 *
199 * @retval RTEMS_SUCCESSFUL Successful operation.
200 * @retval RTEMS_IO_ERROR Received a NACK from the slave.
201 * @retval RTEMS_NOT_IMPLEMENTED Stop is @a false.
202 */
203rtems_status_code lpc32xx_i2c_read_with_optional_stop(
204  volatile lpc32xx_i2c *i2c,
205  uint8_t *in,
206  size_t n,
207  bool stop
208);
209
210/**
211 * @brief Writes and reads data via the I2C module @a i2c.
212 *
213 * This will be one bus transaction.
214 *
215 * @retval RTEMS_SUCCESSFUL Successful operation.
216 * @retval RTEMS_IO_ERROR Received a NACK from the slave.
217 */
218rtems_status_code lpc32xx_i2c_write_and_read(
219  volatile lpc32xx_i2c *i2c,
220  unsigned addr,
221  const uint8_t *out,
222  size_t out_size,
223  uint8_t *in,
224  size_t in_size
225);
226
227/**
228 * @brief Writes data via the I2C module @a i2c.
229 *
230 * This will be one bus transaction.
231 *
232 * @retval RTEMS_SUCCESSFUL Successful operation.
233 * @retval RTEMS_IO_ERROR Received a NACK from the slave.
234 */
235static inline rtems_status_code lpc32xx_i2c_write(
236  volatile lpc32xx_i2c *i2c,
237  unsigned addr,
238  const uint8_t *out,
239  size_t out_size
240)
241{
242  return lpc32xx_i2c_write_and_read(i2c, addr, out, out_size, NULL, 0);
243}
244
245/**
246 * @brief Reads data via the I2C module @a i2c.
247 *
248 * This will be one bus transaction.
249 *
250 * @retval RTEMS_SUCCESSFUL Successful operation.
251 * @retval RTEMS_IO_ERROR Received a NACK from the slave.
252 */
253static inline rtems_status_code lpc32xx_i2c_read(
254  volatile lpc32xx_i2c *i2c,
255  unsigned addr,
256  uint8_t *in,
257  size_t in_size
258)
259{
260  return lpc32xx_i2c_write_and_read(i2c, addr, NULL, 0, in, in_size);
261}
262
263/** @} */
264
265#ifdef __cplusplus
266}
267#endif /* __cplusplus */
268
269#endif /* LIBBSP_ARM_LPC32XX_I2C_H */
Note: See TracBrowser for help on using the repository browser.