summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libcpu/powerpc/mpc55xx/include/dspi.h
blob: 4ad2479851c27e33b28811181a20aa22c19e4646 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
/**
 * @file
 *
 * @ingroup mpc55xx_dspi
 *
 * @brief Header file for the LibI2C bus driver for the Deserial Serial Peripheral Interface (DSPI).
 */

/*
 * Copyright (c) 2008
 * Embedded Brains GmbH
 * Obere Lagerstr. 30
 * D-82178 Puchheim
 * Germany
 * rtems@embedded-brains.de
 *
 * The license and distribution terms for this file may be found in the file
 * LICENSE in this distribution or at http://www.rtems.com/license/LICENSE.
 */

/** 
 * @defgroup mpc55xx_dspi Deserial Serial Peripheral Interface (DSPI)
 * 
 * @ingroup mpc55xx
 */

#ifndef LIBCPU_POWERPC_MPC55XX_DSPI_H
#define LIBCPU_POWERPC_MPC55XX_DSPI_H

#include <rtems/libi2c.h>

#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */

struct DSPI_tag;

/**
 * @brief LibI2C bus driver entry.
 */
typedef struct {
	/**
	 * @brief Standard bus driver fields.
	 */
	rtems_libi2c_bus_t bus;

	/**
	 * @brief Index in the bus table: @ref mpc55xx_dspi_bus_table.
	 */
	unsigned table_index;

	/**
	 * @brief Bus number (available after rtems_libi2c_register_bus()).
	 *
	 * @note You must set it in the initialization code after the bus registration.
	 */
	unsigned bus_number;

	/**
	 * @brief Hardware registers.
	 */
	volatile struct DSPI_tag *regs;

	/**
	 * @brief Selects SPI master or slave mode.
	 */
	int master;

	/**
	 * @brief Data for the Push Register.
	 */
	union DSPI_PUSHR_tag push_data;

	/**
	 * @brief eDMA channel for transmission.
	 *
	 * The channel is fixed to particular DSPI.
	 */
	int edma_channel_transmit;

	/**
	 * @brief eDMA channel to generate the push data.
	 *
	 * You can choose any available channel.
	 */
	int edma_channel_push;

	/**
	 * @brief eDMA channel for receiving.
	 *
	 * The channel is fixed to particular DSPI.
	 */
	int edma_channel_receive;

	/**
	 * @brief Semaphore ID for a transmit update.
	 */
	rtems_id edma_channel_transmit_update;

	/**
	 * @brief Semaphore ID for a receive update.
	 */
	rtems_id edma_channel_receive_update;

	/**
	 * @brief Transmit error status.
	 */
	uint32_t edma_channel_transmit_error;

	/**
	 * @brief Receive error status.
	 */
	uint32_t edma_channel_receive_error;

	/**
	 * @brief Idle character transmitted in read only mode.
	 */
	uint32_t idle_char;
} mpc55xx_dspi_bus_entry;

/**
 * @brief Number of DSPIs.
 */
#define MPC55XX_DSPI_NUMBER 4

/**
 * @brief Table with bus driver entries.
 */
extern mpc55xx_dspi_bus_entry mpc55xx_dspi_bus_table [ /* MPC55XX_DSPI_NUMBER */ ];

#ifdef __cplusplus
}
#endif /* __cplusplus */

#endif /* LIBCPU_POWERPC_MPC55XX_DSPI_H */