xref: /btstack/port/msp432p401lp-cc256x/ti/devices/msp432p4xx/driverlib/spi.h (revision 5fd0122a3e19d95e11e1f3eb8a08a2b2acb2557e)
1*5fd0122aSMatthias Ringwald /* --COPYRIGHT--,BSD
2*5fd0122aSMatthias Ringwald  * Copyright (c) 2017, Texas Instruments Incorporated
3*5fd0122aSMatthias Ringwald  * All rights reserved.
4*5fd0122aSMatthias Ringwald  *
5*5fd0122aSMatthias Ringwald  * Redistribution and use in source and binary forms, with or without
6*5fd0122aSMatthias Ringwald  * modification, are permitted provided that the following conditions
7*5fd0122aSMatthias Ringwald  * are met:
8*5fd0122aSMatthias Ringwald  *
9*5fd0122aSMatthias Ringwald  * *  Redistributions of source code must retain the above copyright
10*5fd0122aSMatthias Ringwald  *    notice, this list of conditions and the following disclaimer.
11*5fd0122aSMatthias Ringwald  *
12*5fd0122aSMatthias Ringwald  * *  Redistributions in binary form must reproduce the above copyright
13*5fd0122aSMatthias Ringwald  *    notice, this list of conditions and the following disclaimer in the
14*5fd0122aSMatthias Ringwald  *    documentation and/or other materials provided with the distribution.
15*5fd0122aSMatthias Ringwald  *
16*5fd0122aSMatthias Ringwald  * *  Neither the name of Texas Instruments Incorporated nor the names of
17*5fd0122aSMatthias Ringwald  *    its contributors may be used to endorse or promote products derived
18*5fd0122aSMatthias Ringwald  *    from this software without specific prior written permission.
19*5fd0122aSMatthias Ringwald  *
20*5fd0122aSMatthias Ringwald  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21*5fd0122aSMatthias Ringwald  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
22*5fd0122aSMatthias Ringwald  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
23*5fd0122aSMatthias Ringwald  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
24*5fd0122aSMatthias Ringwald  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
25*5fd0122aSMatthias Ringwald  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
26*5fd0122aSMatthias Ringwald  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
27*5fd0122aSMatthias Ringwald  * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
28*5fd0122aSMatthias Ringwald  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
29*5fd0122aSMatthias Ringwald  * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
30*5fd0122aSMatthias Ringwald  * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31*5fd0122aSMatthias Ringwald  * --/COPYRIGHT--*/
32*5fd0122aSMatthias Ringwald #ifndef SPI_H_
33*5fd0122aSMatthias Ringwald #define SPI_H_
34*5fd0122aSMatthias Ringwald 
35*5fd0122aSMatthias Ringwald //*****************************************************************************
36*5fd0122aSMatthias Ringwald //
37*5fd0122aSMatthias Ringwald //! \addtogroup spi_api
38*5fd0122aSMatthias Ringwald //! @{
39*5fd0122aSMatthias Ringwald //
40*5fd0122aSMatthias Ringwald //*****************************************************************************
41*5fd0122aSMatthias Ringwald 
42*5fd0122aSMatthias Ringwald //*****************************************************************************
43*5fd0122aSMatthias Ringwald //
44*5fd0122aSMatthias Ringwald // If building with a C++ compiler, make all of the definitions in this header
45*5fd0122aSMatthias Ringwald // have a C binding.
46*5fd0122aSMatthias Ringwald //
47*5fd0122aSMatthias Ringwald //*****************************************************************************
48*5fd0122aSMatthias Ringwald #ifdef __cplusplus
49*5fd0122aSMatthias Ringwald extern "C"
50*5fd0122aSMatthias Ringwald {
51*5fd0122aSMatthias Ringwald #endif
52*5fd0122aSMatthias Ringwald 
53*5fd0122aSMatthias Ringwald #include <stdbool.h>
54*5fd0122aSMatthias Ringwald #include <stdint.h>
55*5fd0122aSMatthias Ringwald #include <ti/devices/msp432p4xx/inc/msp.h>
56*5fd0122aSMatthias Ringwald #include <ti/devices/msp432p4xx/driverlib/eusci.h>
57*5fd0122aSMatthias Ringwald 
58*5fd0122aSMatthias Ringwald /* Configuration Defines */
59*5fd0122aSMatthias Ringwald #define EUSCI_SPI_CLOCKSOURCE_ACLK    EUSCI_B_CTLW0_SSEL__ACLK
60*5fd0122aSMatthias Ringwald #define EUSCI_SPI_CLOCKSOURCE_SMCLK   EUSCI_B_CTLW0_SSEL__SMCLK
61*5fd0122aSMatthias Ringwald 
62*5fd0122aSMatthias Ringwald #define EUSCI_SPI_MSB_FIRST    EUSCI_B_CTLW0_MSB
63*5fd0122aSMatthias Ringwald #define EUSCI_SPI_LSB_FIRST    0x00
64*5fd0122aSMatthias Ringwald 
65*5fd0122aSMatthias Ringwald #define EUSCI_SPI_BUSY        EUSCI_A_STATW_BUSY
66*5fd0122aSMatthias Ringwald #define EUSCI_SPI_NOT_BUSY    0x00
67*5fd0122aSMatthias Ringwald 
68*5fd0122aSMatthias Ringwald #define EUSCI_SPI_PHASE_DATA_CHANGED_ONFIRST_CAPTURED_ON_NEXT    0x00
69*5fd0122aSMatthias Ringwald #define EUSCI_SPI_PHASE_DATA_CAPTURED_ONFIRST_CHANGED_ON_NEXT    EUSCI_B_CTLW0_CKPH
70*5fd0122aSMatthias Ringwald 
71*5fd0122aSMatthias Ringwald #define EUSCI_SPI_3PIN                      EUSCI_B_CTLW0_MODE_0
72*5fd0122aSMatthias Ringwald #define EUSCI_SPI_4PIN_UCxSTE_ACTIVE_HIGH   EUSCI_B_CTLW0_MODE_1
73*5fd0122aSMatthias Ringwald #define EUSCI_SPI_4PIN_UCxSTE_ACTIVE_LOW    EUSCI_B_CTLW0_MODE_2
74*5fd0122aSMatthias Ringwald 
75*5fd0122aSMatthias Ringwald #define EUSCI_SPI_CLOCKPOLARITY_INACTIVITY_HIGH    EUSCI_B_CTLW0_CKPL
76*5fd0122aSMatthias Ringwald #define EUSCI_SPI_CLOCKPOLARITY_INACTIVITY_LOW     0x00
77*5fd0122aSMatthias Ringwald 
78*5fd0122aSMatthias Ringwald #define EUSCI_SPI_TRANSMIT_INTERRUPT    EUSCI_B_IE_TXIE
79*5fd0122aSMatthias Ringwald #define EUSCI_SPI_RECEIVE_INTERRUPT     EUSCI_B_IE_RXIE
80*5fd0122aSMatthias Ringwald 
81*5fd0122aSMatthias Ringwald #define EUSCI_SPI_ENABLE_SIGNAL_FOR_4WIRE_SLAVE           EUSCI_B_CTLW0_STEM
82*5fd0122aSMatthias Ringwald #define EUSCI_SPI_PREVENT_CONFLICTS_WITH_OTHER_MASTERS    0x00
83*5fd0122aSMatthias Ringwald 
84*5fd0122aSMatthias Ringwald //*****************************************************************************
85*5fd0122aSMatthias Ringwald //
86*5fd0122aSMatthias Ringwald //!     ypedef eUSCI_SPI_MasterConfig
87*5fd0122aSMatthias Ringwald //! \brief Type definition for \link _eUSCI_SPI_MasterConfig \endlink structure
88*5fd0122aSMatthias Ringwald //!
89*5fd0122aSMatthias Ringwald //! \struct _eUSCI_SPI_MasterConfig
90*5fd0122aSMatthias Ringwald //! \brief Configuration structure for master mode in the \b SPI module. See
91*5fd0122aSMatthias Ringwald //!          \link SPI_initMaster \endlink for parameter documentation.
92*5fd0122aSMatthias Ringwald //
93*5fd0122aSMatthias Ringwald //*****************************************************************************
94*5fd0122aSMatthias Ringwald typedef struct _eUSCI_SPI_MasterConfig
95*5fd0122aSMatthias Ringwald {
96*5fd0122aSMatthias Ringwald     uint_fast8_t selectClockSource;
97*5fd0122aSMatthias Ringwald     uint32_t clockSourceFrequency;
98*5fd0122aSMatthias Ringwald     uint32_t desiredSpiClock;
99*5fd0122aSMatthias Ringwald     uint_fast16_t msbFirst;
100*5fd0122aSMatthias Ringwald     uint_fast16_t clockPhase;
101*5fd0122aSMatthias Ringwald     uint_fast16_t clockPolarity;
102*5fd0122aSMatthias Ringwald     uint_fast16_t spiMode;
103*5fd0122aSMatthias Ringwald } eUSCI_SPI_MasterConfig;
104*5fd0122aSMatthias Ringwald 
105*5fd0122aSMatthias Ringwald //*****************************************************************************
106*5fd0122aSMatthias Ringwald //
107*5fd0122aSMatthias Ringwald //!     ypedef eUSCI_SPI_SlaveConfig
108*5fd0122aSMatthias Ringwald //! \brief Type definition for \link _eUSCI_SPI_SlaveConfig \endlink structure
109*5fd0122aSMatthias Ringwald //!
110*5fd0122aSMatthias Ringwald //! \struct _eUSCI_SPI_SlaveConfig
111*5fd0122aSMatthias Ringwald //! \brief Configuration structure for slave mode in the \b SPI module. See
112*5fd0122aSMatthias Ringwald //!          \link SPI_initSlave \endlink for parameter documentation.
113*5fd0122aSMatthias Ringwald //
114*5fd0122aSMatthias Ringwald //*****************************************************************************
115*5fd0122aSMatthias Ringwald typedef struct _eUSCI_SPI_SlaveConfig
116*5fd0122aSMatthias Ringwald {
117*5fd0122aSMatthias Ringwald     uint_fast16_t msbFirst;
118*5fd0122aSMatthias Ringwald     uint_fast16_t clockPhase;
119*5fd0122aSMatthias Ringwald     uint_fast16_t clockPolarity;
120*5fd0122aSMatthias Ringwald     uint_fast16_t spiMode;
121*5fd0122aSMatthias Ringwald } eUSCI_SPI_SlaveConfig;
122*5fd0122aSMatthias Ringwald 
123*5fd0122aSMatthias Ringwald //*****************************************************************************
124*5fd0122aSMatthias Ringwald //
125*5fd0122aSMatthias Ringwald //! Initializes the SPI Master block.
126*5fd0122aSMatthias Ringwald //!
127*5fd0122aSMatthias Ringwald //! \param moduleInstance is the instance of the eUSCI A/B module. Valid
128*5fd0122aSMatthias Ringwald //! parameters vary from part to part, but can include:
129*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A0_BASE
130*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A1_BASE
131*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A2_BASE
132*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A3_BASE
133*5fd0122aSMatthias Ringwald //!         - \b EUSCI_B0_BASE
134*5fd0122aSMatthias Ringwald //!         - \b EUSCI_B1_BASE
135*5fd0122aSMatthias Ringwald //!         - \b EUSCI_B2_BASE
136*5fd0122aSMatthias Ringwald //!         - \b EUSCI_B3_BASE
137*5fd0122aSMatthias Ringwald //! \param config Configuration structure for SPI master mode
138*5fd0122aSMatthias Ringwald //!
139*5fd0122aSMatthias Ringwald //! <hr>
140*5fd0122aSMatthias Ringwald //! <b>Configuration options for \link eUSCI_SPI_MasterConfig \endlink structure.</b>
141*5fd0122aSMatthias Ringwald //! <hr>
142*5fd0122aSMatthias Ringwald //!
143*5fd0122aSMatthias Ringwald //! \param selectClockSource selects clock source. Valid values are
144*5fd0122aSMatthias Ringwald //!         - \b  EUSCI_SPI_CLOCKSOURCE_ACLK
145*5fd0122aSMatthias Ringwald //!         - \b  EUSCI_SPI_CLOCKSOURCE_SMCLK
146*5fd0122aSMatthias Ringwald //! \param clockSourceFrequency is the frequency of the selected clock source
147*5fd0122aSMatthias Ringwald //! \param desiredSpiClock is the desired clock rate for SPI communication
148*5fd0122aSMatthias Ringwald //! \param msbFirst controls the direction of the receive and transmit shift
149*5fd0122aSMatthias Ringwald //!      register. Valid values are
150*5fd0122aSMatthias Ringwald //!         - \b  EUSCI_SPI_MSB_FIRST
151*5fd0122aSMatthias Ringwald //!         - \b  EUSCI_SPI_LSB_FIRST [Default Value]
152*5fd0122aSMatthias Ringwald //! \param clockPhase is clock phase select.
153*5fd0122aSMatthias Ringwald //!         Valid values are
154*5fd0122aSMatthias Ringwald //!         - \b  EUSCI_SPI_PHASE_DATA_CHANGED_ONFIRST_CAPTURED_ON_NEXT
155*5fd0122aSMatthias Ringwald //!                                                          [Default Value]
156*5fd0122aSMatthias Ringwald //!         - \b  EUSCI_SPI_PHASE_DATA_CAPTURED_ONFIRST_CHANGED_ON_NEXT
157*5fd0122aSMatthias Ringwald //! \param clockPolarity is clock polarity select.
158*5fd0122aSMatthias Ringwald //!         Valid values are
159*5fd0122aSMatthias Ringwald //!         - \b  EUSCI_SPI_CLOCKPOLARITY_INACTIVITY_HIGH
160*5fd0122aSMatthias Ringwald //!         - \b  EUSCI_SPI_CLOCKPOLARITY_INACTIVITY_LOW  [Default Value]
161*5fd0122aSMatthias Ringwald //! \param spiMode is SPI mode select.
162*5fd0122aSMatthias Ringwald //!         Valid values are
163*5fd0122aSMatthias Ringwald //!         - \b  EUSCI_SPI_3PIN [Default Value]
164*5fd0122aSMatthias Ringwald //!         - \b  EUSCI_SPI_4PIN_UCxSTE_ACTIVE_HIGH
165*5fd0122aSMatthias Ringwald //!         - \b  EUSCI_SPI_4PIN_UCxSTE_ACTIVE_LOW
166*5fd0122aSMatthias Ringwald //! Upon successful initialization of the SPI master block, this function
167*5fd0122aSMatthias Ringwald //! will have set the bus speed for the master, but the SPI Master block
168*5fd0122aSMatthias Ringwald //! still remains disabled and must be enabled with SPI_enableModule()
169*5fd0122aSMatthias Ringwald //!
170*5fd0122aSMatthias Ringwald //! Modified bits are \b UCCKPH, \b UCCKPL, \b UC7BIT, \b UCMSB,\b UCSSELx,
171*5fd0122aSMatthias Ringwald //! \b UCSWRST bits of \b UCAxCTLW0 register
172*5fd0122aSMatthias Ringwald //!
173*5fd0122aSMatthias Ringwald //! \return true
174*5fd0122aSMatthias Ringwald //
175*5fd0122aSMatthias Ringwald //*****************************************************************************
176*5fd0122aSMatthias Ringwald extern bool SPI_initMaster(uint32_t moduleInstance,
177*5fd0122aSMatthias Ringwald         const eUSCI_SPI_MasterConfig *config);
178*5fd0122aSMatthias Ringwald 
179*5fd0122aSMatthias Ringwald //*****************************************************************************
180*5fd0122aSMatthias Ringwald //
181*5fd0122aSMatthias Ringwald //! Selects 4Pin Functionality
182*5fd0122aSMatthias Ringwald //!
183*5fd0122aSMatthias Ringwald //! \param moduleInstance is the instance of the eUSCI A/B module. Valid
184*5fd0122aSMatthias Ringwald //! parameters vary from part to part, but can include:
185*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A0_BASE
186*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A1_BASE
187*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A2_BASE
188*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A3_BASE
189*5fd0122aSMatthias Ringwald //!         - \b EUSCI_B0_BASE
190*5fd0122aSMatthias Ringwald //!         - \b EUSCI_B1_BASE
191*5fd0122aSMatthias Ringwald //!         - \b EUSCI_B2_BASE
192*5fd0122aSMatthias Ringwald //!         - \b EUSCI_B3_BASE
193*5fd0122aSMatthias Ringwald //!
194*5fd0122aSMatthias Ringwald //! \param select4PinFunctionality selects Clock source. Valid values are
195*5fd0122aSMatthias Ringwald //!         - \b EUSCI_SPI_PREVENT_CONFLICTS_WITH_OTHER_MASTERS
196*5fd0122aSMatthias Ringwald //!         - \b EUSCI_SPI_ENABLE_SIGNAL_FOR_4WIRE_SLAVE
197*5fd0122aSMatthias Ringwald //! This function should be invoked only in 4-wire mode. Invoking this function
198*5fd0122aSMatthias Ringwald //! has no effect in 3-wire mode.
199*5fd0122aSMatthias Ringwald //!
200*5fd0122aSMatthias Ringwald //! Modified bits are \b UCSTEM bit of \b UCAxCTLW0 register
201*5fd0122aSMatthias Ringwald //!
202*5fd0122aSMatthias Ringwald //! \return true
203*5fd0122aSMatthias Ringwald //
204*5fd0122aSMatthias Ringwald //*****************************************************************************
205*5fd0122aSMatthias Ringwald extern void SPI_selectFourPinFunctionality(uint32_t moduleInstance,
206*5fd0122aSMatthias Ringwald         uint_fast8_t select4PinFunctionality);
207*5fd0122aSMatthias Ringwald 
208*5fd0122aSMatthias Ringwald //*****************************************************************************
209*5fd0122aSMatthias Ringwald //
210*5fd0122aSMatthias Ringwald //! Initializes the SPI Master clock.At the end of this function call, SPI
211*5fd0122aSMatthias Ringwald //! module is left enabled.
212*5fd0122aSMatthias Ringwald //!
213*5fd0122aSMatthias Ringwald //! \param moduleInstance is the instance of the eUSCI A/B module. Valid
214*5fd0122aSMatthias Ringwald //! parameters vary from part to part, but can include:
215*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A0_BASE
216*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A1_BASE
217*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A2_BASE
218*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A3_BASE
219*5fd0122aSMatthias Ringwald //!         - \b EUSCI_B0_BASE
220*5fd0122aSMatthias Ringwald //!         - \b EUSCI_B1_BASE
221*5fd0122aSMatthias Ringwald //!         - \b EUSCI_B2_BASE
222*5fd0122aSMatthias Ringwald //!         - \b EUSCI_B3_BASE
223*5fd0122aSMatthias Ringwald //!
224*5fd0122aSMatthias Ringwald //! \param clockSourceFrequency is the frequency of the selected clock source
225*5fd0122aSMatthias Ringwald //! \param desiredSpiClock is the desired clock rate for SPI communication.
226*5fd0122aSMatthias Ringwald //!
227*5fd0122aSMatthias Ringwald //! Modified bits are \b UCSWRST bit of \b UCAxCTLW0 register and
228*5fd0122aSMatthias Ringwald //! \b UCAxBRW register
229*5fd0122aSMatthias Ringwald //!
230*5fd0122aSMatthias Ringwald //! \return None
231*5fd0122aSMatthias Ringwald //
232*5fd0122aSMatthias Ringwald //*****************************************************************************
233*5fd0122aSMatthias Ringwald extern void SPI_changeMasterClock(uint32_t moduleInstance,
234*5fd0122aSMatthias Ringwald         uint32_t clockSourceFrequency, uint32_t desiredSpiClock);
235*5fd0122aSMatthias Ringwald 
236*5fd0122aSMatthias Ringwald //*****************************************************************************
237*5fd0122aSMatthias Ringwald //
238*5fd0122aSMatthias Ringwald //! Initializes the SPI Slave block.
239*5fd0122aSMatthias Ringwald //!
240*5fd0122aSMatthias Ringwald //! \param moduleInstance is the instance of the eUSCI A/B module. Valid
241*5fd0122aSMatthias Ringwald //! parameters vary from part to part, but can include:
242*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A0_BASE
243*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A1_BASE
244*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A2_BASE
245*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A3_BASE
246*5fd0122aSMatthias Ringwald //!         - \b EUSCI_B0_BASE
247*5fd0122aSMatthias Ringwald //!         - \b EUSCI_B1_BASE
248*5fd0122aSMatthias Ringwald //!         - \b EUSCI_B2_BASE
249*5fd0122aSMatthias Ringwald //!         - \b EUSCI_B3_BASE
250*5fd0122aSMatthias Ringwald //! \param config Configuration structure for SPI slave mode
251*5fd0122aSMatthias Ringwald //!
252*5fd0122aSMatthias Ringwald //! <hr>
253*5fd0122aSMatthias Ringwald //! <b>Configuration options for \link eUSCI_SPI_SlaveConfig \endlink structure.</b>
254*5fd0122aSMatthias Ringwald //! <hr>
255*5fd0122aSMatthias Ringwald //!
256*5fd0122aSMatthias Ringwald //! \param msbFirst controls the direction of the receive and transmit shift
257*5fd0122aSMatthias Ringwald //!      register. Valid values are
258*5fd0122aSMatthias Ringwald //!         - \b  EUSCI_SPI_MSB_FIRST
259*5fd0122aSMatthias Ringwald //!         - \b  EUSCI_SPI_LSB_FIRST [Default Value]
260*5fd0122aSMatthias Ringwald //! \param clockPhase is clock phase select.
261*5fd0122aSMatthias Ringwald //!         Valid values are
262*5fd0122aSMatthias Ringwald //!         - \b  EUSCI_SPI_PHASE_DATA_CHANGED_ONFIRST_CAPTURED_ON_NEXT
263*5fd0122aSMatthias Ringwald //!                                                          [Default Value]
264*5fd0122aSMatthias Ringwald //!         - \b  EUSCI_SPI_PHASE_DATA_CAPTURED_ONFIRST_CHANGED_ON_NEXT
265*5fd0122aSMatthias Ringwald //! \param clockPolarity is clock polarity select.
266*5fd0122aSMatthias Ringwald //!         Valid values are
267*5fd0122aSMatthias Ringwald //!         - \b  EUSCI_SPI_CLOCKPOLARITY_INACTIVITY_HIGH
268*5fd0122aSMatthias Ringwald //!         - \b  EUSCI_SPI_CLOCKPOLARITY_INACTIVITY_LOW [Default Value]
269*5fd0122aSMatthias Ringwald //! \param spiMode is SPI mode select.
270*5fd0122aSMatthias Ringwald //!         Valid values are
271*5fd0122aSMatthias Ringwald //!         - \b  EUSCI_SPI_3PIN [Default Value]
272*5fd0122aSMatthias Ringwald //!         - \b  EUSCI_SPI_4PIN_UCxSTE_ACTIVE_HIGH
273*5fd0122aSMatthias Ringwald //!         - \b  EUSCI_SPI_4PIN_UCxSTE_ACTIVE_LOW
274*5fd0122aSMatthias Ringwald //! Upon successful initialization of the SPI slave block, this function
275*5fd0122aSMatthias Ringwald //! will have initialized the slave block, but the SPI Slave block
276*5fd0122aSMatthias Ringwald //! still remains disabled and must be enabled with SPI_enableModule()
277*5fd0122aSMatthias Ringwald //!
278*5fd0122aSMatthias Ringwald //! Modified bits are \b UCMSB, \b UC7BIT, \b UCMST, \b UCCKPL, \b UCCKPH,
279*5fd0122aSMatthias Ringwald //! \b UCMODE, \b UCSWRST bits of \b UCAxCTLW0
280*5fd0122aSMatthias Ringwald //!
281*5fd0122aSMatthias Ringwald //! \return true
282*5fd0122aSMatthias Ringwald //*****************************************************************************
283*5fd0122aSMatthias Ringwald extern bool SPI_initSlave(uint32_t moduleInstance,
284*5fd0122aSMatthias Ringwald         const eUSCI_SPI_SlaveConfig *config);
285*5fd0122aSMatthias Ringwald 
286*5fd0122aSMatthias Ringwald //*****************************************************************************
287*5fd0122aSMatthias Ringwald //
288*5fd0122aSMatthias Ringwald //! Changes the SPI clock phase and polarity.At the end of this function call,
289*5fd0122aSMatthias Ringwald //! SPI module is left enabled.
290*5fd0122aSMatthias Ringwald //!
291*5fd0122aSMatthias Ringwald //! \param moduleInstance is the instance of the eUSCI A/B module. Valid
292*5fd0122aSMatthias Ringwald //! parameters vary from part to part, but can include:
293*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A0_BASE
294*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A1_BASE
295*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A2_BASE
296*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A3_BASE
297*5fd0122aSMatthias Ringwald //!         - \b EUSCI_B0_BASE
298*5fd0122aSMatthias Ringwald //!         - \b EUSCI_B1_BASE
299*5fd0122aSMatthias Ringwald //!         - \b EUSCI_B2_BASE
300*5fd0122aSMatthias Ringwald //!         - \b EUSCI_B3_BASE
301*5fd0122aSMatthias Ringwald //!
302*5fd0122aSMatthias Ringwald //! \param clockPhase is clock phase select.
303*5fd0122aSMatthias Ringwald //!         Valid values are:
304*5fd0122aSMatthias Ringwald //!             - \b EUSCI_SPI_PHASE_DATA_CHANGED_ONFIRST_CAPTURED_ON_NEXT
305*5fd0122aSMatthias Ringwald //!                                                          [Default Value]
306*5fd0122aSMatthias Ringwald //!             - \b EUSCI_SPI_PHASE_DATA_CAPTURED_ONFIRST_CHANGED_ON_NEXT
307*5fd0122aSMatthias Ringwald //! \param clockPolarity is clock polarity select.
308*5fd0122aSMatthias Ringwald //!         Valid values are:
309*5fd0122aSMatthias Ringwald //!             - \b EUSCI_SPI_CLOCKPOLARITY_INACTIVITY_HIGH
310*5fd0122aSMatthias Ringwald //!             - \b EUSCI_SPI_CLOCKPOLARITY_INACTIVITY_LOW  [Default Value]
311*5fd0122aSMatthias Ringwald //!
312*5fd0122aSMatthias Ringwald //! Modified bits are \b UCSWRST, \b UCCKPH, \b UCCKPL, \b UCSWRST bits of
313*5fd0122aSMatthias Ringwald //! \b UCAxCTLW0
314*5fd0122aSMatthias Ringwald //!
315*5fd0122aSMatthias Ringwald //! \return None
316*5fd0122aSMatthias Ringwald //
317*5fd0122aSMatthias Ringwald //*****************************************************************************
318*5fd0122aSMatthias Ringwald extern void SPI_changeClockPhasePolarity(uint32_t moduleInstance,
319*5fd0122aSMatthias Ringwald         uint_fast16_t clockPhase, uint_fast16_t clockPolarity);
320*5fd0122aSMatthias Ringwald 
321*5fd0122aSMatthias Ringwald //*****************************************************************************
322*5fd0122aSMatthias Ringwald //
323*5fd0122aSMatthias Ringwald //! Transmits a byte from the SPI Module.
324*5fd0122aSMatthias Ringwald //!
325*5fd0122aSMatthias Ringwald //! \param moduleInstance is the instance of the eUSCI A/B module. Valid
326*5fd0122aSMatthias Ringwald //! parameters vary from part to part, but can include:
327*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A0_BASE
328*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A1_BASE
329*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A2_BASE
330*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A3_BASE
331*5fd0122aSMatthias Ringwald //!         - \b EUSCI_B0_BASE
332*5fd0122aSMatthias Ringwald //!         - \b EUSCI_B1_BASE
333*5fd0122aSMatthias Ringwald //!         - \b EUSCI_B2_BASE
334*5fd0122aSMatthias Ringwald //!         - \b EUSCI_B3_BASE
335*5fd0122aSMatthias Ringwald //!
336*5fd0122aSMatthias Ringwald //! \param transmitData data to be transmitted from the SPI module
337*5fd0122aSMatthias Ringwald //!
338*5fd0122aSMatthias Ringwald //! This function will place the supplied data into SPI transmit data register
339*5fd0122aSMatthias Ringwald //! to start transmission
340*5fd0122aSMatthias Ringwald //!
341*5fd0122aSMatthias Ringwald //! Modified register is \b UCAxTXBUF
342*5fd0122aSMatthias Ringwald //!
343*5fd0122aSMatthias Ringwald //! \return None.
344*5fd0122aSMatthias Ringwald //
345*5fd0122aSMatthias Ringwald //*****************************************************************************
346*5fd0122aSMatthias Ringwald extern void SPI_transmitData(uint32_t moduleInstance,
347*5fd0122aSMatthias Ringwald         uint_fast8_t transmitData);
348*5fd0122aSMatthias Ringwald 
349*5fd0122aSMatthias Ringwald //*****************************************************************************
350*5fd0122aSMatthias Ringwald //
351*5fd0122aSMatthias Ringwald //! Receives a byte that has been sent to the SPI Module.
352*5fd0122aSMatthias Ringwald //!
353*5fd0122aSMatthias Ringwald //! \param moduleInstance is the instance of the eUSCI A/B module. Valid
354*5fd0122aSMatthias Ringwald //! parameters vary from part to part, but can include:
355*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A0_BASE
356*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A1_BASE
357*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A2_BASE
358*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A3_BASE
359*5fd0122aSMatthias Ringwald //!         - \b EUSCI_B0_BASE
360*5fd0122aSMatthias Ringwald //!         - \b EUSCI_B1_BASE
361*5fd0122aSMatthias Ringwald //!         - \b EUSCI_B2_BASE
362*5fd0122aSMatthias Ringwald //!         - \b EUSCI_B3_BASE
363*5fd0122aSMatthias Ringwald //!
364*5fd0122aSMatthias Ringwald //!
365*5fd0122aSMatthias Ringwald //! This function reads a byte of data from the SPI receive data Register.
366*5fd0122aSMatthias Ringwald //!
367*5fd0122aSMatthias Ringwald //! \return Returns the byte received from by the SPI module, cast as an
368*5fd0122aSMatthias Ringwald //! uint8_t.
369*5fd0122aSMatthias Ringwald //
370*5fd0122aSMatthias Ringwald //*****************************************************************************
371*5fd0122aSMatthias Ringwald extern uint8_t SPI_receiveData(uint32_t moduleInstance);
372*5fd0122aSMatthias Ringwald 
373*5fd0122aSMatthias Ringwald //*****************************************************************************
374*5fd0122aSMatthias Ringwald //
375*5fd0122aSMatthias Ringwald //! Enables the SPI block.
376*5fd0122aSMatthias Ringwald //!
377*5fd0122aSMatthias Ringwald //! \param moduleInstance is the instance of the eUSCI A/B module. Valid
378*5fd0122aSMatthias Ringwald //! parameters vary from part to part, but can include:
379*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A0_BASE
380*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A1_BASE
381*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A2_BASE
382*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A3_BASE
383*5fd0122aSMatthias Ringwald //!         - \b EUSCI_B0_BASE
384*5fd0122aSMatthias Ringwald //!         - \b EUSCI_B1_BASE
385*5fd0122aSMatthias Ringwald //!         - \b EUSCI_B2_BASE
386*5fd0122aSMatthias Ringwald //!         - \b EUSCI_B3_BASE
387*5fd0122aSMatthias Ringwald //!
388*5fd0122aSMatthias Ringwald //!
389*5fd0122aSMatthias Ringwald //! This will enable operation of the SPI block.
390*5fd0122aSMatthias Ringwald //! Modified bits are \b UCSWRST bit of \b UCAxCTLW0 register.
391*5fd0122aSMatthias Ringwald //!
392*5fd0122aSMatthias Ringwald //! \return None.
393*5fd0122aSMatthias Ringwald //
394*5fd0122aSMatthias Ringwald //*****************************************************************************
395*5fd0122aSMatthias Ringwald extern void SPI_enableModule(uint32_t moduleInstance);
396*5fd0122aSMatthias Ringwald 
397*5fd0122aSMatthias Ringwald //*****************************************************************************
398*5fd0122aSMatthias Ringwald //
399*5fd0122aSMatthias Ringwald //! Disables the SPI block.
400*5fd0122aSMatthias Ringwald //!
401*5fd0122aSMatthias Ringwald //! \param moduleInstance is the instance of the eUSCI A/B module. Valid
402*5fd0122aSMatthias Ringwald //! parameters vary from part to part, but can include:
403*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A0_BASE
404*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A1_BASE
405*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A2_BASE
406*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A3_BASE
407*5fd0122aSMatthias Ringwald //!         - \b EUSCI_B0_BASE
408*5fd0122aSMatthias Ringwald //!         - \b EUSCI_B1_BASE
409*5fd0122aSMatthias Ringwald //!         - \b EUSCI_B2_BASE
410*5fd0122aSMatthias Ringwald //!         - \b EUSCI_B3_BASE
411*5fd0122aSMatthias Ringwald //!
412*5fd0122aSMatthias Ringwald //!
413*5fd0122aSMatthias Ringwald //! This will disable operation of the SPI block.
414*5fd0122aSMatthias Ringwald //!
415*5fd0122aSMatthias Ringwald //! Modified bits are \b UCSWRST bit of \b UCAxCTLW0 register.
416*5fd0122aSMatthias Ringwald //!
417*5fd0122aSMatthias Ringwald //! \return None.
418*5fd0122aSMatthias Ringwald //
419*5fd0122aSMatthias Ringwald //*****************************************************************************
420*5fd0122aSMatthias Ringwald extern void SPI_disableModule(uint32_t moduleInstance);
421*5fd0122aSMatthias Ringwald 
422*5fd0122aSMatthias Ringwald //*****************************************************************************
423*5fd0122aSMatthias Ringwald //
424*5fd0122aSMatthias Ringwald //! Returns the address of the RX Buffer of the SPI for the DMA module.
425*5fd0122aSMatthias Ringwald //!
426*5fd0122aSMatthias Ringwald //! \param moduleInstance is the instance of the eUSCI A/B module. Valid
427*5fd0122aSMatthias Ringwald //! parameters vary from part to part, but can include:
428*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A0_BASE
429*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A1_BASE
430*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A2_BASE
431*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A3_BASE
432*5fd0122aSMatthias Ringwald //!         - \b EUSCI_B0_BASE
433*5fd0122aSMatthias Ringwald //!         - \b EUSCI_B1_BASE
434*5fd0122aSMatthias Ringwald //!         - \b EUSCI_B2_BASE
435*5fd0122aSMatthias Ringwald //!         - \b EUSCI_B3_BASE
436*5fd0122aSMatthias Ringwald //!
437*5fd0122aSMatthias Ringwald //!
438*5fd0122aSMatthias Ringwald //! Returns the address of the SPI RX Buffer. This can be used in conjunction
439*5fd0122aSMatthias Ringwald //! with the DMA to store the received data directly to memory.
440*5fd0122aSMatthias Ringwald //!
441*5fd0122aSMatthias Ringwald //! \return NONE
442*5fd0122aSMatthias Ringwald //
443*5fd0122aSMatthias Ringwald //*****************************************************************************
444*5fd0122aSMatthias Ringwald extern uint32_t SPI_getReceiveBufferAddressForDMA(uint32_t moduleInstance);
445*5fd0122aSMatthias Ringwald 
446*5fd0122aSMatthias Ringwald //*****************************************************************************
447*5fd0122aSMatthias Ringwald //
448*5fd0122aSMatthias Ringwald //! Returns the address of the TX Buffer of the SPI for the DMA module.
449*5fd0122aSMatthias Ringwald //!
450*5fd0122aSMatthias Ringwald //! \param moduleInstance is the instance of the eUSCI A/B module. Valid
451*5fd0122aSMatthias Ringwald //! parameters vary from part to part, but can include:
452*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A0_BASE
453*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A1_BASE
454*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A2_BASE
455*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A3_BASE
456*5fd0122aSMatthias Ringwald //!         - \b EUSCI_B0_BASE
457*5fd0122aSMatthias Ringwald //!         - \b EUSCI_B1_BASE
458*5fd0122aSMatthias Ringwald //!         - \b EUSCI_B2_BASE
459*5fd0122aSMatthias Ringwald //!         - \b EUSCI_B3_BASE
460*5fd0122aSMatthias Ringwald //!
461*5fd0122aSMatthias Ringwald //!
462*5fd0122aSMatthias Ringwald //! Returns the address of the SPI TX Buffer. This can be used in conjunction
463*5fd0122aSMatthias Ringwald //! with the DMA to obtain transmitted data directly from memory.
464*5fd0122aSMatthias Ringwald //!
465*5fd0122aSMatthias Ringwald //! \return NONE
466*5fd0122aSMatthias Ringwald //
467*5fd0122aSMatthias Ringwald //*****************************************************************************
468*5fd0122aSMatthias Ringwald extern uint32_t SPI_getTransmitBufferAddressForDMA(uint32_t moduleInstance);
469*5fd0122aSMatthias Ringwald 
470*5fd0122aSMatthias Ringwald //*****************************************************************************
471*5fd0122aSMatthias Ringwald //
472*5fd0122aSMatthias Ringwald //! Indicates whether or not the SPI bus is busy.
473*5fd0122aSMatthias Ringwald //!
474*5fd0122aSMatthias Ringwald //! \param moduleInstance is the instance of the eUSCI A/B module. Valid
475*5fd0122aSMatthias Ringwald //! parameters vary from part to part, but can include:
476*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A0_BASE
477*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A1_BASE
478*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A2_BASE
479*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A3_BASE
480*5fd0122aSMatthias Ringwald //!         - \b EUSCI_B0_BASE
481*5fd0122aSMatthias Ringwald //!         - \b EUSCI_B1_BASE
482*5fd0122aSMatthias Ringwald //!         - \b EUSCI_B2_BASE
483*5fd0122aSMatthias Ringwald //!         - \b EUSCI_B3_BASE
484*5fd0122aSMatthias Ringwald //!
485*5fd0122aSMatthias Ringwald //!
486*5fd0122aSMatthias Ringwald //! This function returns an indication of whether or not the SPI bus is
487*5fd0122aSMatthias Ringwald //! busy.This function checks the status of the bus via UCBBUSY bit
488*5fd0122aSMatthias Ringwald //!
489*5fd0122aSMatthias Ringwald //! \return EUSCI_SPI_BUSY if the SPI module transmitting or receiving
490*5fd0122aSMatthias Ringwald //! is busy; otherwise, returns EUSCI_SPI_NOT_BUSY.
491*5fd0122aSMatthias Ringwald //
492*5fd0122aSMatthias Ringwald //*****************************************************************************
493*5fd0122aSMatthias Ringwald extern uint_fast8_t SPI_isBusy(uint32_t moduleInstance);
494*5fd0122aSMatthias Ringwald 
495*5fd0122aSMatthias Ringwald //*****************************************************************************
496*5fd0122aSMatthias Ringwald //
497*5fd0122aSMatthias Ringwald //! Enables individual SPI interrupt sources.
498*5fd0122aSMatthias Ringwald //!
499*5fd0122aSMatthias Ringwald //! \param moduleInstance is the instance of the eUSCI A/B module. Valid
500*5fd0122aSMatthias Ringwald //! parameters vary from part to part, but can include:
501*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A0_BASE
502*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A1_BASE
503*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A2_BASE
504*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A3_BASE
505*5fd0122aSMatthias Ringwald //!         - \b EUSCI_B0_BASE
506*5fd0122aSMatthias Ringwald //!         - \b EUSCI_B1_BASE
507*5fd0122aSMatthias Ringwald //!         - \b EUSCI_B2_BASE
508*5fd0122aSMatthias Ringwald //!         - \b EUSCI_B3_BASE
509*5fd0122aSMatthias Ringwald //!
510*5fd0122aSMatthias Ringwald //! \param mask is the bit mask of the interrupt sources to be enabled.
511*5fd0122aSMatthias Ringwald //!
512*5fd0122aSMatthias Ringwald //! Enables the indicated SPI interrupt sources.  Only the sources that
513*5fd0122aSMatthias Ringwald //! are enabled can be reflected to the processor interrupt; disabled sources
514*5fd0122aSMatthias Ringwald //! have no effect on the processor.
515*5fd0122aSMatthias Ringwald //!
516*5fd0122aSMatthias Ringwald //! The mask parameter is the logical OR of any of the following:
517*5fd0122aSMatthias Ringwald //!       - \b EUSCI_SPI_RECEIVE_INTERRUPT Receive interrupt
518*5fd0122aSMatthias Ringwald //!       - \b EUSCI_SPI_TRANSMIT_INTERRUPT Transmit interrupt
519*5fd0122aSMatthias Ringwald //!
520*5fd0122aSMatthias Ringwald //! Modified registers are \b UCAxIFG and \b UCAxIE
521*5fd0122aSMatthias Ringwald //!
522*5fd0122aSMatthias Ringwald //! \return None.
523*5fd0122aSMatthias Ringwald //
524*5fd0122aSMatthias Ringwald //*****************************************************************************
525*5fd0122aSMatthias Ringwald extern void SPI_enableInterrupt(uint32_t moduleInstance, uint_fast16_t mask);
526*5fd0122aSMatthias Ringwald 
527*5fd0122aSMatthias Ringwald //*****************************************************************************
528*5fd0122aSMatthias Ringwald //
529*5fd0122aSMatthias Ringwald //! Disables individual SPI interrupt sources.
530*5fd0122aSMatthias Ringwald //!
531*5fd0122aSMatthias Ringwald //! \param moduleInstance is the instance of the eUSCI A/B module. Valid
532*5fd0122aSMatthias Ringwald //! parameters vary from part to part, but can include:
533*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A0_BASE
534*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A1_BASE
535*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A2_BASE
536*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A3_BASE
537*5fd0122aSMatthias Ringwald //!         - \b EUSCI_B0_BASE
538*5fd0122aSMatthias Ringwald //!         - \b EUSCI_B1_BASE
539*5fd0122aSMatthias Ringwald //!         - \b EUSCI_B2_BASE
540*5fd0122aSMatthias Ringwald //!         - \b EUSCI_B3_BASE
541*5fd0122aSMatthias Ringwald //!
542*5fd0122aSMatthias Ringwald //! \param mask is the bit mask of the interrupt sources to be
543*5fd0122aSMatthias Ringwald //! disabled.
544*5fd0122aSMatthias Ringwald //!
545*5fd0122aSMatthias Ringwald //! Disables the indicated SPI interrupt sources.  Only the sources that
546*5fd0122aSMatthias Ringwald //! are enabled can be reflected to the processor interrupt; disabled sources
547*5fd0122aSMatthias Ringwald //! have no effect on the processor.
548*5fd0122aSMatthias Ringwald //!
549*5fd0122aSMatthias Ringwald //! The mask parameter is the logical OR of any of the following:
550*5fd0122aSMatthias Ringwald //!       - \b EUSCI_SPI_RECEIVE_INTERRUPT Receive interrupt
551*5fd0122aSMatthias Ringwald //!       - \b EUSCI_SPI_TRANSMIT_INTERRUPT Transmit interrupt
552*5fd0122aSMatthias Ringwald //!
553*5fd0122aSMatthias Ringwald //! Modified register is \b UCAxIE
554*5fd0122aSMatthias Ringwald //!
555*5fd0122aSMatthias Ringwald //! \return None.
556*5fd0122aSMatthias Ringwald //
557*5fd0122aSMatthias Ringwald //*****************************************************************************
558*5fd0122aSMatthias Ringwald extern void SPI_disableInterrupt(uint32_t moduleInstance, uint_fast16_t mask);
559*5fd0122aSMatthias Ringwald 
560*5fd0122aSMatthias Ringwald //*****************************************************************************
561*5fd0122aSMatthias Ringwald //
562*5fd0122aSMatthias Ringwald //! Gets the current SPI interrupt status.
563*5fd0122aSMatthias Ringwald //!
564*5fd0122aSMatthias Ringwald //! \param moduleInstance is the instance of the eUSCI A/B module. Valid
565*5fd0122aSMatthias Ringwald //! parameters vary from part to part, but can include:
566*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A0_BASE
567*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A1_BASE
568*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A2_BASE
569*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A3_BASE
570*5fd0122aSMatthias Ringwald //!         - \b EUSCI_B0_BASE
571*5fd0122aSMatthias Ringwald //!         - \b EUSCI_B1_BASE
572*5fd0122aSMatthias Ringwald //!         - \b EUSCI_B2_BASE
573*5fd0122aSMatthias Ringwald //!         - \b EUSCI_B3_BASE
574*5fd0122aSMatthias Ringwald //! \param mask Mask of interrupt to filter. This can include:
575*5fd0122aSMatthias Ringwald //!          - \b EUSCI_SPI_RECEIVE_INTERRUPT -Receive interrupt
576*5fd0122aSMatthias Ringwald //!          - \b EUSCI_SPI_TRANSMIT_INTERRUPT - Transmit interrupt
577*5fd0122aSMatthias Ringwald //!
578*5fd0122aSMatthias Ringwald //! Modified registers are \b UCAxIFG.
579*5fd0122aSMatthias Ringwald //!
580*5fd0122aSMatthias Ringwald //! \return The current interrupt status as the mask of the set flags
581*5fd0122aSMatthias Ringwald //! Mask parameter can be either any of the following selection:
582*5fd0122aSMatthias Ringwald //! - \b EUSCI_SPI_RECEIVE_INTERRUPT -Receive interrupt
583*5fd0122aSMatthias Ringwald //! - \b EUSCI_SPI_TRANSMIT_INTERRUPT - Transmit interrupt
584*5fd0122aSMatthias Ringwald //
585*5fd0122aSMatthias Ringwald //*****************************************************************************
586*5fd0122aSMatthias Ringwald extern uint_fast8_t SPI_getInterruptStatus(uint32_t moduleInstance,
587*5fd0122aSMatthias Ringwald         uint16_t mask);
588*5fd0122aSMatthias Ringwald 
589*5fd0122aSMatthias Ringwald //*****************************************************************************
590*5fd0122aSMatthias Ringwald //
591*5fd0122aSMatthias Ringwald //! Gets the current SPI interrupt status masked with the enabled interrupts.
592*5fd0122aSMatthias Ringwald //! This function is useful to call in ISRs to get a list of pending
593*5fd0122aSMatthias Ringwald //! interrupts that are actually enabled and could have caused
594*5fd0122aSMatthias Ringwald //! the ISR.
595*5fd0122aSMatthias Ringwald //!
596*5fd0122aSMatthias Ringwald //! \param moduleInstance is the instance of the eUSCI A/B module. Valid
597*5fd0122aSMatthias Ringwald //! parameters vary from part to part, but can include:
598*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A0_BASE
599*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A1_BASE
600*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A2_BASE
601*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A3_BASE
602*5fd0122aSMatthias Ringwald //!         - \b EUSCI_B0_BASE
603*5fd0122aSMatthias Ringwald //!         - \b EUSCI_B1_BASE
604*5fd0122aSMatthias Ringwald //!         - \b EUSCI_B2_BASE
605*5fd0122aSMatthias Ringwald //!         - \b EUSCI_B3_BASE
606*5fd0122aSMatthias Ringwald //!
607*5fd0122aSMatthias Ringwald //! Modified registers are \b UCAxIFG.
608*5fd0122aSMatthias Ringwald //!
609*5fd0122aSMatthias Ringwald //! \return The current interrupt status as the mask of the set flags
610*5fd0122aSMatthias Ringwald //! Mask parameter can be either any of the following selection:
611*5fd0122aSMatthias Ringwald //! - \b EUSCI_SPI_RECEIVE_INTERRUPT -Receive interrupt
612*5fd0122aSMatthias Ringwald //! - \b EUSCI_SPI_TRANSMIT_INTERRUPT - Transmit interrupt
613*5fd0122aSMatthias Ringwald //
614*5fd0122aSMatthias Ringwald //*****************************************************************************
615*5fd0122aSMatthias Ringwald extern uint_fast8_t SPI_getEnabledInterruptStatus(uint32_t moduleInstance);
616*5fd0122aSMatthias Ringwald 
617*5fd0122aSMatthias Ringwald //*****************************************************************************
618*5fd0122aSMatthias Ringwald //
619*5fd0122aSMatthias Ringwald //! Clears the selected SPI interrupt status flag.
620*5fd0122aSMatthias Ringwald //!
621*5fd0122aSMatthias Ringwald //! \param moduleInstance is the instance of the eUSCI A/B module. Valid
622*5fd0122aSMatthias Ringwald //! parameters vary from part to part, but can include:
623*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A0_BASE
624*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A1_BASE
625*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A2_BASE
626*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A3_BASE
627*5fd0122aSMatthias Ringwald //!         - \b EUSCI_B0_BASE
628*5fd0122aSMatthias Ringwald //!         - \b EUSCI_B1_BASE
629*5fd0122aSMatthias Ringwald //!         - \b EUSCI_B2_BASE
630*5fd0122aSMatthias Ringwald //!         - \b EUSCI_B3_BASE
631*5fd0122aSMatthias Ringwald //!
632*5fd0122aSMatthias Ringwald //! \param mask is the masked interrupt flag to be cleared.
633*5fd0122aSMatthias Ringwald //!
634*5fd0122aSMatthias Ringwald //! The mask parameter is the logical OR of any of the following:
635*5fd0122aSMatthias Ringwald //! - \b EUSCI_SPI_RECEIVE_INTERRUPT -Receive interrupt
636*5fd0122aSMatthias Ringwald //! - \b EUSCI_SPI_TRANSMIT_INTERRUPT - Transmit interrupt
637*5fd0122aSMatthias Ringwald //! Modified registers are \b UCAxIFG.
638*5fd0122aSMatthias Ringwald //!
639*5fd0122aSMatthias Ringwald //! \return None
640*5fd0122aSMatthias Ringwald //
641*5fd0122aSMatthias Ringwald //*****************************************************************************
642*5fd0122aSMatthias Ringwald extern void SPI_clearInterruptFlag(uint32_t moduleInstance, uint_fast16_t mask);
643*5fd0122aSMatthias Ringwald 
644*5fd0122aSMatthias Ringwald //*****************************************************************************
645*5fd0122aSMatthias Ringwald //
646*5fd0122aSMatthias Ringwald //! Registers an interrupt handler for the timer capture compare interrupt.
647*5fd0122aSMatthias Ringwald //!
648*5fd0122aSMatthias Ringwald //! \param moduleInstance is the instance of the eUSCI (SPI) module. Valid
649*5fd0122aSMatthias Ringwald //! parameters vary from part to part, but can include:
650*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A0_BASE
651*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A1_BASE
652*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A2_BASE
653*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A3_BASE
654*5fd0122aSMatthias Ringwald //!         - \b EUSCI_B0_BASE
655*5fd0122aSMatthias Ringwald //!         - \b EUSCI_B1_BASE
656*5fd0122aSMatthias Ringwald //!         - \b EUSCI_B2_BASE
657*5fd0122aSMatthias Ringwald //!         - \b EUSCI_B3_BASE
658*5fd0122aSMatthias Ringwald //!  It is important to note that for eUSCI modules, only "B" modules such as
659*5fd0122aSMatthias Ringwald //!  EUSCI_B0 can be used. "A" modules such as EUSCI_A0 do not support the
660*5fd0122aSMatthias Ringwald //!  I2C mode.
661*5fd0122aSMatthias Ringwald //!
662*5fd0122aSMatthias Ringwald //! \param intHandler is a pointer to the function to be called when the
663*5fd0122aSMatthias Ringwald //! timer capture compare interrupt occurs.
664*5fd0122aSMatthias Ringwald //!
665*5fd0122aSMatthias Ringwald //! This function registers the handler to be called when a timer
666*5fd0122aSMatthias Ringwald //! interrupt occurs. This function enables the global interrupt in the
667*5fd0122aSMatthias Ringwald //! interrupt controller; specific SPI interrupts must be enabled
668*5fd0122aSMatthias Ringwald //! via SPI_enableInterrupt().  It is the interrupt handler's responsibility to
669*5fd0122aSMatthias Ringwald //! clear the interrupt source via SPI_clearInterruptFlag().
670*5fd0122aSMatthias Ringwald //!
671*5fd0122aSMatthias Ringwald //! \return None.
672*5fd0122aSMatthias Ringwald //
673*5fd0122aSMatthias Ringwald //*****************************************************************************
674*5fd0122aSMatthias Ringwald extern void SPI_registerInterrupt(uint32_t moduleInstance,
675*5fd0122aSMatthias Ringwald         void (*intHandler)(void));
676*5fd0122aSMatthias Ringwald 
677*5fd0122aSMatthias Ringwald //*****************************************************************************
678*5fd0122aSMatthias Ringwald //
679*5fd0122aSMatthias Ringwald //! Unregisters the interrupt handler for the timer
680*5fd0122aSMatthias Ringwald //!
681*5fd0122aSMatthias Ringwald //! \param moduleInstance is the instance of the eUSCI A/B module. Valid
682*5fd0122aSMatthias Ringwald //! parameters vary from part to part, but can include:
683*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A0_BASE
684*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A1_BASE
685*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A2_BASE
686*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A3_BASE
687*5fd0122aSMatthias Ringwald //!         - \b EUSCI_B0_BASE
688*5fd0122aSMatthias Ringwald //!         - \b EUSCI_B1_BASE
689*5fd0122aSMatthias Ringwald //!         - \b EUSCI_B2_BASE
690*5fd0122aSMatthias Ringwald //!         - \b EUSCI_B3_BASE
691*5fd0122aSMatthias Ringwald //!
692*5fd0122aSMatthias Ringwald //! This function unregisters the handler to be called when timer
693*5fd0122aSMatthias Ringwald //! interrupt occurs.  This function also masks off the interrupt in the
694*5fd0122aSMatthias Ringwald //! interrupt controller so that the interrupt handler no longer is called.
695*5fd0122aSMatthias Ringwald //!
696*5fd0122aSMatthias Ringwald //! \sa Interrupt_registerInterrupt() for important information about
697*5fd0122aSMatthias Ringwald //! registering interrupt handlers.
698*5fd0122aSMatthias Ringwald //!
699*5fd0122aSMatthias Ringwald //! \return None.
700*5fd0122aSMatthias Ringwald //
701*5fd0122aSMatthias Ringwald //*****************************************************************************
702*5fd0122aSMatthias Ringwald extern void SPI_unregisterInterrupt(uint32_t moduleInstance);
703*5fd0122aSMatthias Ringwald 
704*5fd0122aSMatthias Ringwald /* Backwards Compatibility Layer */
705*5fd0122aSMatthias Ringwald #define EUSCI_B_SPI_PHASE_DATA_CHANGED_ONFIRST_CAPTURED_ON_NEXT            0x00
706*5fd0122aSMatthias Ringwald #define EUSCI_B_SPI_PHASE_DATA_CAPTURED_ONFIRST_CHANGED_ON_NEXT EUSCI_B_CTLW0_CKPH
707*5fd0122aSMatthias Ringwald 
708*5fd0122aSMatthias Ringwald #define EUSCI_B_SPI_MSB_FIRST                                  EUSCI_B_CTLW0_MSB
709*5fd0122aSMatthias Ringwald #define EUSCI_B_SPI_LSB_FIRST                                              0x00
710*5fd0122aSMatthias Ringwald 
711*5fd0122aSMatthias Ringwald #define EUSCI_B_SPI_CLOCKPOLARITY_INACTIVITY_HIGH            EUSCI_B_CTLW0_CKPL
712*5fd0122aSMatthias Ringwald #define EUSCI_B_SPI_CLOCKPOLARITY_INACTIVITY_LOW                           0x00
713*5fd0122aSMatthias Ringwald 
714*5fd0122aSMatthias Ringwald #define EUSCI_B_SPI_CLOCKSOURCE_ACLK                    EUSCI_B_CTLW0_SSEL__ACLK
715*5fd0122aSMatthias Ringwald #define EUSCI_B_SPI_CLOCKSOURCE_SMCLK                  EUSCI_B_CTLW0_SSEL__SMCLK
716*5fd0122aSMatthias Ringwald 
717*5fd0122aSMatthias Ringwald #define EUSCI_B_SPI_3PIN                                    EUSCI_B_CTLW0_MODE_0
718*5fd0122aSMatthias Ringwald #define EUSCI_B_SPI_4PIN_UCxSTE_ACTIVE_HIGH                 EUSCI_B_CTLW0_MODE_1
719*5fd0122aSMatthias Ringwald #define EUSCI_B_SPI_4PIN_UCxSTE_ACTIVE_LOW                  EUSCI_B_CTLW0_MODE_2
720*5fd0122aSMatthias Ringwald 
721*5fd0122aSMatthias Ringwald #define EUSCI_B_SPI_PREVENT_CONFLICTS_WITH_OTHER_MASTERS                   0x00
722*5fd0122aSMatthias Ringwald #define EUSCI_B_SPI_ENABLE_SIGNAL_FOR_4WIRE_SLAVE            EUSCI_B_CTLW0_STEM
723*5fd0122aSMatthias Ringwald 
724*5fd0122aSMatthias Ringwald #define EUSCI_B_SPI_TRANSMIT_INTERRUPT                          EUSCI_B_IE_TXIE0
725*5fd0122aSMatthias Ringwald #define EUSCI_B_SPI_RECEIVE_INTERRUPT                           EUSCI_B_IE_RXIE0
726*5fd0122aSMatthias Ringwald 
727*5fd0122aSMatthias Ringwald #define EUSCI_B_SPI_BUSY                                     EUSCI_B_STATW_BBUSY
728*5fd0122aSMatthias Ringwald #define EUSCI_B_SPI_NOT_BUSY                                               0x00
729*5fd0122aSMatthias Ringwald 
730*5fd0122aSMatthias Ringwald #define EUSCI_A_SPI_PHASE_DATA_CHANGED_ONFIRST_CAPTURED_ON_NEXT            0x00
731*5fd0122aSMatthias Ringwald #define EUSCI_A_SPI_PHASE_DATA_CAPTURED_ONFIRST_CHANGED_ON_NEXT EUSCI_A_CTLW0_CKPH
732*5fd0122aSMatthias Ringwald 
733*5fd0122aSMatthias Ringwald #define EUSCI_A_SPI_MSB_FIRST                                 EUSCI_A_CTLW0_MSB
734*5fd0122aSMatthias Ringwald #define EUSCI_A_SPI_LSB_FIRST                                              0x00
735*5fd0122aSMatthias Ringwald 
736*5fd0122aSMatthias Ringwald #define EUSCI_A_SPI_CLOCKPOLARITY_INACTIVITY_HIGH            EUSCI_A_CTLW0_CKPL
737*5fd0122aSMatthias Ringwald #define EUSCI_A_SPI_CLOCKPOLARITY_INACTIVITY_LOW                           0x00
738*5fd0122aSMatthias Ringwald 
739*5fd0122aSMatthias Ringwald #define EUSCI_A_SPI_CLOCKSOURCE_ACLK                   EUSCI_A_CTLW0_SSEL__ACLK
740*5fd0122aSMatthias Ringwald #define EUSCI_A_SPI_CLOCKSOURCE_SMCLK                 EUSCI_A_CTLW0_SSEL__SMCLK
741*5fd0122aSMatthias Ringwald 
742*5fd0122aSMatthias Ringwald #define EUSCI_A_SPI_3PIN                                   EUSCI_A_CTLW0_MODE_0
743*5fd0122aSMatthias Ringwald #define EUSCI_A_SPI_4PIN_UCxSTE_ACTIVE_HIGH                EUSCI_A_CTLW0_MODE_1
744*5fd0122aSMatthias Ringwald #define EUSCI_A_SPI_4PIN_UCxSTE_ACTIVE_LOW                 EUSCI_A_CTLW0_MODE_2
745*5fd0122aSMatthias Ringwald 
746*5fd0122aSMatthias Ringwald #define EUSCI_A_SPI_PREVENT_CONFLICTS_WITH_OTHER_MASTERS                   0x00
747*5fd0122aSMatthias Ringwald #define EUSCI_A_SPI_ENABLE_SIGNAL_FOR_4WIRE_SLAVE            EUSCI_A_CTLW0_STEM
748*5fd0122aSMatthias Ringwald 
749*5fd0122aSMatthias Ringwald #define EUSCI_A_SPI_TRANSMIT_INTERRUPT                          EUSCI_A_IE_TXIE
750*5fd0122aSMatthias Ringwald #define EUSCI_A_SPI_RECEIVE_INTERRUPT                           EUSCI_A_IE_RXIE
751*5fd0122aSMatthias Ringwald 
752*5fd0122aSMatthias Ringwald #define EUSCI_A_SPI_BUSY                                    EUSCI_B_STATW_BBUSY
753*5fd0122aSMatthias Ringwald #define EUSCI_A_SPI_NOT_BUSY                                               0x00
754*5fd0122aSMatthias Ringwald 
755*5fd0122aSMatthias Ringwald extern void EUSCI_A_SPI_select4PinFunctionality(uint32_t baseAddress,
756*5fd0122aSMatthias Ringwald         uint8_t select4PinFunctionality);
757*5fd0122aSMatthias Ringwald extern void EUSCI_A_SPI_masterChangeClock(uint32_t baseAddress,
758*5fd0122aSMatthias Ringwald         uint32_t clockSourceFrequency, uint32_t desiredSpiClock);
759*5fd0122aSMatthias Ringwald extern bool EUSCI_A_SPI_slaveInit(uint32_t baseAddress, uint16_t msbFirst,
760*5fd0122aSMatthias Ringwald         uint16_t clockPhase, uint16_t clockPolarity, uint16_t spiMode);
761*5fd0122aSMatthias Ringwald extern void EUSCI_A_SPI_changeClockPhasePolarity(uint32_t baseAddress,
762*5fd0122aSMatthias Ringwald         uint16_t clockPhase, uint16_t clockPolarity);
763*5fd0122aSMatthias Ringwald extern void EUSCI_A_SPI_transmitData(uint32_t baseAddress,
764*5fd0122aSMatthias Ringwald         uint8_t transmitData);
765*5fd0122aSMatthias Ringwald extern uint8_t EUSCI_A_SPI_receiveData(uint32_t baseAddress);
766*5fd0122aSMatthias Ringwald extern void EUSCI_A_SPI_enableInterrupt(uint32_t baseAddress, uint16_t mask);
767*5fd0122aSMatthias Ringwald extern void EUSCI_A_SPI_disableInterrupt(uint32_t baseAddress, uint16_t mask);
768*5fd0122aSMatthias Ringwald extern uint8_t EUSCI_A_SPI_getInterruptStatus(uint32_t baseAddress,
769*5fd0122aSMatthias Ringwald         uint8_t mask);
770*5fd0122aSMatthias Ringwald extern void EUSCI_A_SPI_clearInterruptFlag(uint32_t baseAddress, uint16_t mask);
771*5fd0122aSMatthias Ringwald extern void EUSCI_A_SPI_enable(uint32_t baseAddress);
772*5fd0122aSMatthias Ringwald extern void EUSCI_A_SPI_disable(uint32_t baseAddress);
773*5fd0122aSMatthias Ringwald extern uint32_t EUSCI_A_SPI_getReceiveBufferAddressForDMA(uint32_t baseAddress);
774*5fd0122aSMatthias Ringwald extern uint32_t EUSCI_A_SPI_getTransmitBufferAddressForDMA(
775*5fd0122aSMatthias Ringwald         uint32_t baseAddress);
776*5fd0122aSMatthias Ringwald extern bool EUSCI_A_SPI_isBusy(uint32_t baseAddress);
777*5fd0122aSMatthias Ringwald extern void EUSCI_B_SPI_select4PinFunctionality(uint32_t baseAddress,
778*5fd0122aSMatthias Ringwald         uint8_t select4PinFunctionality);
779*5fd0122aSMatthias Ringwald extern void EUSCI_B_SPI_masterChangeClock(uint32_t baseAddress,
780*5fd0122aSMatthias Ringwald         uint32_t clockSourceFrequency, uint32_t desiredSpiClock);
781*5fd0122aSMatthias Ringwald extern bool EUSCI_B_SPI_slaveInit(uint32_t baseAddress, uint16_t msbFirst,
782*5fd0122aSMatthias Ringwald         uint16_t clockPhase, uint16_t clockPolarity, uint16_t spiMode);
783*5fd0122aSMatthias Ringwald extern void EUSCI_B_SPI_changeClockPhasePolarity(uint32_t baseAddress,
784*5fd0122aSMatthias Ringwald         uint16_t clockPhase, uint16_t clockPolarity);
785*5fd0122aSMatthias Ringwald extern void EUSCI_B_SPI_transmitData(uint32_t baseAddress,
786*5fd0122aSMatthias Ringwald         uint8_t transmitData);
787*5fd0122aSMatthias Ringwald extern uint8_t EUSCI_B_SPI_receiveData(uint32_t baseAddress);
788*5fd0122aSMatthias Ringwald extern void EUSCI_B_SPI_enableInterrupt(uint32_t baseAddress, uint16_t mask);
789*5fd0122aSMatthias Ringwald extern void EUSCI_B_SPI_disableInterrupt(uint32_t baseAddress, uint16_t mask);
790*5fd0122aSMatthias Ringwald extern uint8_t EUSCI_B_SPI_getInterruptStatus(uint32_t baseAddress,
791*5fd0122aSMatthias Ringwald         uint8_t mask);
792*5fd0122aSMatthias Ringwald extern void EUSCI_B_SPI_clearInterruptFlag(uint32_t baseAddress, uint16_t mask);
793*5fd0122aSMatthias Ringwald extern void EUSCI_B_SPI_enable(uint32_t baseAddress);
794*5fd0122aSMatthias Ringwald extern void EUSCI_B_SPI_disable(uint32_t baseAddress);
795*5fd0122aSMatthias Ringwald extern uint32_t EUSCI_B_SPI_getReceiveBufferAddressForDMA(uint32_t baseAddress);
796*5fd0122aSMatthias Ringwald extern uint32_t EUSCI_B_SPI_getTransmitBufferAddressForDMA(
797*5fd0122aSMatthias Ringwald         uint32_t baseAddress);
798*5fd0122aSMatthias Ringwald extern bool EUSCI_B_SPI_isBusy(uint32_t baseAddress);
799*5fd0122aSMatthias Ringwald 
800*5fd0122aSMatthias Ringwald //*****************************************************************************
801*5fd0122aSMatthias Ringwald //
802*5fd0122aSMatthias Ringwald // Mark the end of the C bindings section for C++ compilers.
803*5fd0122aSMatthias Ringwald //
804*5fd0122aSMatthias Ringwald //*****************************************************************************
805*5fd0122aSMatthias Ringwald #ifdef __cplusplus
806*5fd0122aSMatthias Ringwald }
807*5fd0122aSMatthias Ringwald #endif
808*5fd0122aSMatthias Ringwald 
809*5fd0122aSMatthias Ringwald //*****************************************************************************
810*5fd0122aSMatthias Ringwald //
811*5fd0122aSMatthias Ringwald // Close the Doxygen group.
812*5fd0122aSMatthias Ringwald //! @}
813*5fd0122aSMatthias Ringwald //
814*5fd0122aSMatthias Ringwald //*****************************************************************************
815*5fd0122aSMatthias Ringwald 
816*5fd0122aSMatthias Ringwald #endif /* SPI_H_ */
817*5fd0122aSMatthias Ringwald 
818