annotate packages/devs/spi/freescale/dspi/current/include/spi_freescale_dspi.h @ 3166:c7cb4340f6eb

Add: support for 32 channel eDMA, support for cached memory.
author vae
date Wed, 09 May 2012 22:07:24 +0000
parents a18d3fded36e
children 99686efcd5ba
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
3081
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
1 #ifndef CYGONCE_DEVS_SPI_FREESCALE_DSPI_H
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
2 #define CYGONCE_DEVS_SPI_FREESCALE_DSPI_H
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
3 //=============================================================================
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
4 //
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
5 // spi_freescale_dspi.h
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
6 //
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
7 // Header definitions for Freescale DSPI driver.
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
8 //
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
9 //=============================================================================
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
10 // ####ECOSGPLCOPYRIGHTBEGIN####
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
11 // -------------------------------------------
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
12 // This file is part of eCos, the Embedded Configurable Operating System.
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
13 // Copyright (C) 2011 Free Software Foundation, Inc.
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
14 //
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
15 // eCos is free software; you can redistribute it and/or modify it under
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
16 // the terms of the GNU General Public License as published by the Free
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
17 // Software Foundation; either version 2 or (at your option) any later
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
18 // version.
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
19 //
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
20 // eCos is distributed in the hope that it will be useful, but WITHOUT
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
21 // ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
22 // FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
23 // for more details.
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
24 //
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
25 // You should have received a copy of the GNU General Public License
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
26 // along with eCos; if not, write to the Free Software Foundation, Inc.,
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
27 // 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
28 //
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
29 // As a special exception, if other files instantiate templates or use
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
30 // macros or inline functions from this file, or you compile this file
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
31 // and link it with other works to produce a work based on this file,
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
32 // this file does not by itself cause the resulting work to be covered by
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
33 // the GNU General Public License. However the source code for this file
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
34 // must still be made available in accordance with section (3) of the GNU
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
35 // General Public License v2.
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
36 //
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
37 // This exception does not invalidate any other reasons why a work based
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
38 // on this file might be covered by the GNU General Public License.
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
39 // -------------------------------------------
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
40 // ####ECOSGPLCOPYRIGHTEND####
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
41 //=============================================================================
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
42 //#####DESCRIPTIONBEGIN####
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
43 //
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
44 // Author(s): ilijak
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
45 // Date: 2011-11-03
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
46 // Purpose: Freescale DSPI driver definitions.
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
47 // Description:
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
48 // Usage: #include <cyg/io/spi_freescale_dspi.h>
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
49 //
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
50 //####DESCRIPTIONEND####
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
51 //
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
52 //=============================================================================
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
53
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
54 #include <pkgconf/hal.h>
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
55 #include <pkgconf/io_spi.h>
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
56 #include <pkgconf/devs_spi_freescale_dspi.h>
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
57 #include <pkgconf/hal_freescale_edma.h>
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
58
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
59 #include <cyg/infra/cyg_type.h>
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
60 #include <cyg/hal/drv_api.h>
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
61 #include <cyg/io/spi.h>
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
62 #include <cyg/hal/freescale_edma.h>
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
63 #include <cyg/io/spi_freescale_dspi_io.h>
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
64
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
65 //-----------------------------------------------------------------------------
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
66 // Macro for defining a SPI device and attaching it to the appropriate bus.
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
67 //
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
68 // _name_ is the name of the SPI device. This will be used to reference a
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
69 // data structure of type cyg_spi_device which can be passed to the
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
70 // SPI driver API without needing a cast.
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
71 // _bus_ is the bus number to which this device is attached (0, 1 or 2).
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
72 // _csnum_ is the chip select line used for this device, numbered from 0.
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
73 // _fmsz_ is set device SPI frame size (bits)
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
74 // _clpol_ is the SPI bus clock polarity used by the device. This must be
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
75 // set to 1 if clock inactive state is high, 0 if clock inactive
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
76 // state is low.
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
77 // _clpha_ is the SPI bus clock phase used by the device.
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
78 // _brate_ is the SPI bus clock baud rate used by the device, measured in Hz.
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
79 // _csup_dly_ is the minimum delay between chip select assert and transfer
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
80 // start, measured in microseconds.
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
81 // _csdw_dly_ is the minimum delay between transfer end and chip select deassert,
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
82 // measured in delay units.
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
83 // _trbt_dly_ is the minimum delay between consecutive transfers.
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
84 // _dlu_ is delay unit in ns
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
85 // _dbr_ is enabling double baud rate feature
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
86
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
87
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
88 #define CYGNUM_DSPI_DELAY_UNIT(__val) (__val/10)
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
89
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
90 #define CYG_SPI_BUS_NAME(_b_) cyg_spi_dspi_bus ## _b_
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
91
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
92 #define CYG_DEVS_SPI_FREESCALE_DSPI_DEVICE( \
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
93 _name_, _bus_, _csnum_, _fmsz_, _clpol_, _clpha_, _brate_, _csup_dly_, _csdw_dly_, _trbt_dly_, _dlu_, _dbr_ \
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
94 ) \
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
95 cyg_spi_freescale_dspi_device_t _name_ ##_fs_dspi CYG_SPI_DEVICE_ON_BUS(_bus_) = { \
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
96 { .spi_bus = (cyg_spi_bus*) &CYG_SPI_BUS_NAME(_bus_) }, \
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
97 .dev_num = _csnum_, \
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
98 .clocking.bus_16bit = _fmsz_ > 8 ? 1 : 0, \
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
99 .clocking.frame_size = _fmsz_, \
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
100 .clocking.cl_pol = _clpol_, \
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
101 .clocking.cl_pha = _clpha_, \
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
102 .clocking.cl_brate = _brate_, \
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
103 .clocking.cs_up_udly = _csup_dly_, \
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
104 .clocking.cs_dw_udly = _csdw_dly_, \
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
105 .clocking.tr_bt_udly = _trbt_dly_, \
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
106 .clocking.dl_unit = CYGNUM_DSPI_DELAY_UNIT(_dlu_), \
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
107 .clocking.cl_dbr = _dbr_, \
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
108 .clocking.dspi_ctar = 0 \
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
109 }; \
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
110 extern cyg_spi_device _name_ __attribute__((alias ( #_name_ "_fs_dspi" )))
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
111
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
112 enum { SPI_DMA_CHAN_TX_I, SPI_DMA_CHAN_RX_I };
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
113
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
114 //-----------------------------------------------------------------------------
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
115 // Freescale DSPI bus configuration and state.
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
116
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
117 typedef struct cyg_spi_freescale_dspi_bus_setup_s
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
118 {
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
119 cyghwr_devs_freescale_dspi_t* dspi_p; // Base address of SPI register block.
3166
c7cb4340f6eb Add: support for 32 channel eDMA, support for cached memory.
vae
parents: 3081
diff changeset
120 cyghwr_hal_freescale_dma_set_t* dma_set_p; // DMA configuration block.
3081
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
121 cyg_vector_t intr_num; // DSPI interrupt vector
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
122 cyg_priority_t intr_prio; // Interrupt priority
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
123 cyg_uint32 mcr_opt ; // Module Configuratyon Register options
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
124 const cyg_uint32* spi_pin_list_p; // List of GPIOs used by the SPI interface.
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
125 const cyg_uint32* cs_pin_list_p; // List of GPIOs used as chip selects.
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
126 cyg_uint8 cs_pin_num; // Number of chip selects for this bus.
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
127 } cyg_spi_freescale_dspi_bus_setup_t;
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
128
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
129 #define SPI_DMA_CHAN_I(__dma_set,__rt) (__dma_set->chan_p[SPI_DMA_CHAN_ ## __rt ## _I].dma_chan_i)
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
130
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
131 typedef struct cyg_spi_freescale_dspi_bus_s
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
132 {
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
133 // ---- Upper layer data ----
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
134 cyg_spi_bus spi_bus; // Upper layer SPI bus data.
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
135
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
136 // ---- Bus configuration constants ----
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
137 const cyg_spi_freescale_dspi_bus_setup_t* setup_p;
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
138 // ---- Driver state (private) ----
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
139 // DMA transfer control descriptors
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
140 const cyghwr_hal_freescale_edma_tcd_t* tx_dma_tcd_ini_p; // TCD init.
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
141 const cyghwr_hal_freescale_edma_tcd_t* rx_dma_tcd_ini_p; // data
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
142 volatile cyghwr_hal_freescale_edma_tcd_t* rx_dma_tcd_p; // DMA TCD (RX)
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
143 volatile cyghwr_hal_freescale_edma_tcd_t* tx_dma_tcd_p; // DMA TCD (TX)
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
144 volatile cyg_uint32* pushque_p; // Tx command queue
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
145 cyg_uint16 pushque_n; // Tx command buffer size
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
146 cyg_uint8 txfifo_n; // TxFIFO size
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
147 cyg_uint8 rxfifo_n; // RxFIFO size
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
148 cyg_interrupt intr_data; // Interrupt state
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
149 cyg_handle_t intr_handle; // Interrupt handle
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
150 cyg_drv_mutex_t transfer_mutex; // Transfer mutex.
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
151 cyg_drv_cond_t transfer_done; // Transfer condition variable.
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
152 cyg_uint32 clock_freq; // Clock provided by hal
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
153 } cyg_spi_freescale_dspi_bus_t;
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
154
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
155 //-----------------------------------------------------------------------------
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
156 // Freescale DSPI device.
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
157
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
158 typedef struct cyg_freescale_dspi_clocking_s {
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
159 cyg_uint32 dspi_ctar; // DSPI Clock and Transfer Attributes Rregister shadow.
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
160 cyg_uint32 cl_brate; // Clock baud rate.
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
161 cyg_uint8 bus_16bit; // Use 16 bit (1) or 8 bit (0) transfers.
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
162 cyg_uint8 cl_pol; // Clock polarity (0 or 1).
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
163 cyg_uint8 cl_pha; // Clock phase (0 or 1).
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
164 cyg_uint8 cl_dbr; // Use double baud-rate feature if needed
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
165 cyg_uint8 cs_up_udly; // Minimum delay in us/ns between CS up and transfer start.
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
166 cyg_uint8 cs_dw_udly; // Minimum delay in us/ns between transfer end and CS down.
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
167 cyg_uint8 tr_bt_udly; // Minimum delay in us/ns between two transfers.
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
168 cyg_uint8 dl_unit; // Delay unit (1/10 * ns)
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
169 cyg_uint8 lsb_first; // LSbit shifted first.
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
170 cyg_uint8 frame_size; // Device SPI frame size (bits).
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
171 } cyg_freescale_dspi_clocking_t;;
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
172
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
173 typedef struct cyg_spi_freescale_dspi_device_s
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
174 {
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
175 // ---- Upper layer data ----
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
176 cyg_spi_device spi_device; // Upper layer SPI device data.
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
177
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
178 // ---- Device setup (user configurable) ----
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
179 cyg_freescale_dspi_clocking_t clocking;
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
180 cyg_uint8 dev_num; // Device SPI select.
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
181 cyg_uint8 chip_sel;
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
182 // ---- Device state (private) ----
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
183 } cyg_spi_freescale_dspi_device_t;
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
184
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
185 //-----------------------------------------------------------------------------
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
186 // Exported bus data structures.
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
187
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
188 #ifdef CYGHWR_DEVS_SPI_FREESCALE_DSPI0
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
189 externC cyg_spi_freescale_dspi_bus_t cyg_spi_dspi_bus0;
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
190 #endif
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
191
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
192 #ifdef CYGHWR_DEVS_SPI_FREESCALE_DSPI1
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
193 externC cyg_spi_freescale_dspi_bus_t cyg_spi_dspi_bus1;
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
194 #endif
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
195
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
196 #ifdef CYGHWR_DEVS_SPI_FREESCALE_DSPI2
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
197 externC cyg_spi_freescale_dspi_bus_t cyg_spi_dspi_bus2;
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
198 #endif
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
199
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
200 __externC void cyghwr_devs_freescale_dspi_diag(cyg_spi_freescale_dspi_bus_t* spi_bus_p);
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
201 __externC void cyghwr_devs_freescale_dspi_diag_array(char* name_p,
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
202 volatile cyg_uint32* fifo_p,
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
203 cyg_uint32 fifo_n);
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
204
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
205 //=============================================================================
a18d3fded36e * cdl/spi_freescale_dspi.cdl:
vae
parents:
diff changeset
206 #endif // CYGONCE_DEVS_SPI_FREESCALE_DSPI_H