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