spi.h
Go to the documentation of this file.
1 #ifndef SPI_H_
2 #define SPI_H_
3 
4 //*****************************************************************************
5 //
8 //
9 //*****************************************************************************
10 
11 //*****************************************************************************
12 //
13 // If building with a C++ compiler, make all of the definitions in this header
14 // have a C binding.
15 //
16 //*****************************************************************************
17 #ifdef __cplusplus
18 extern "C"
19 {
20 #endif
21 
22 #include <stdbool.h>
23 #include <stdint.h>
24 #include "register_remap.h"
25 #include <msp432.h>
26 #include "eusci.h"
27 
28 /* Configuration Defines */
29 #define EUSCI_SPI_CLOCKSOURCE_ACLK UCSSEL__ACLK
30 #define EUSCI_SPI_CLOCKSOURCE_SMCLK UCSSEL__SMCLK
31 
32 #define EUSCI_SPI_MSB_FIRST UCMSB
33 #define EUSCI_SPI_LSB_FIRST 0x00
34 
35 #define EUSCI_SPI_BUSY UCBUSY
36 #define EUSCI_SPI_NOT_BUSY 0x00
37 
38 #define EUSCI_SPI_PHASE_DATA_CHANGED_ONFIRST_CAPTURED_ON_NEXT 0x00
39 #define EUSCI_SPI_PHASE_DATA_CAPTURED_ONFIRST_CHANGED_ON_NEXT UCCKPH
40 
41 #define EUSCI_SPI_3PIN UCMODE_0
42 #define EUSCI_SPI_4PIN_UCxSTE_ACTIVE_HIGH UCMODE_1
43 #define EUSCI_SPI_4PIN_UCxSTE_ACTIVE_LOW UCMODE_2
44 
45 #define EUSCI_SPI_CLOCKPOLARITY_INACTIVITY_HIGH UCCKPL
46 #define EUSCI_SPI_CLOCKPOLARITY_INACTIVITY_LOW 0x00
47 
48 #define EUSCI_SPI_TRANSMIT_INTERRUPT UCTXIE
49 #define EUSCI_SPI_RECEIVE_INTERRUPT UCRXIE
50 
51 #define EUSCI_SPI_ENABLE_SIGNAL_FOR_4WIRE_SLAVE UCSTEM
52 #define EUSCI_SPI_PREVENT_CONFLICTS_WITH_OTHER_MASTERS 0x00
53 
54 //*****************************************************************************
55 //
62 //
63 //*****************************************************************************
64 typedef struct _SPI_MasterConfig
65 {
66  uint_fast8_t selectClockSource;
68  uint32_t desiredSpiClock;
69  uint_fast16_t msbFirst;
70  uint_fast16_t clockPhase;
71  uint_fast16_t clockPolarity;
72  uint_fast16_t spiMode;
74 
75 //*****************************************************************************
76 //
83 //
84 //*****************************************************************************
85 typedef struct _SPI_SlaveConfig
86 {
87  uint_fast16_t msbFirst;
88  uint_fast16_t clockPhase;
89  uint_fast16_t clockPolarity;
90  uint_fast16_t spiMode;
92 
93 //*****************************************************************************
94 //
144 //
145 //*****************************************************************************
146 extern bool SPI_initMaster(uint32_t moduleInstance,
147  const SPI_MasterConfig *config);
148 
149 //*****************************************************************************
150 //
173 //
174 //*****************************************************************************
175 extern void SPI_selectFourPinFunctionality(uint32_t moduleInstance,
176  uint_fast8_t select4PinFunctionality);
177 
178 //*****************************************************************************
179 //
201 //
202 //*****************************************************************************
203 extern void SPI_changeMasterClock(uint32_t moduleInstance,
204  uint32_t clockSourceFrequency, uint32_t desiredSpiClock);
205 
206 //*****************************************************************************
207 //
252 //*****************************************************************************
253 extern bool SPI_initSlave(uint32_t moduleInstance,
254  const SPI_SlaveConfig *config);
255 
256 //*****************************************************************************
257 //
286 //
287 //*****************************************************************************
288 extern void SPI_changeClockPhasePolarity(uint32_t moduleInstance,
289  uint_fast16_t clockPhase, uint_fast16_t clockPolarity);
290 
291 //*****************************************************************************
292 //
314 //
315 //*****************************************************************************
316 extern void SPI_transmitData(uint32_t moduleInstance,
317  uint_fast8_t transmitData);
318 
319 //*****************************************************************************
320 //
339 //
340 //*****************************************************************************
341 extern uint8_t SPI_receiveData(uint32_t moduleInstance);
342 
343 //*****************************************************************************
344 //
363 //
364 //*****************************************************************************
365 extern void SPI_enableModule(uint32_t moduleInstance);
366 
367 //*****************************************************************************
368 //
388 //
389 //*****************************************************************************
390 extern void SPI_disableModule(uint32_t moduleInstance);
391 
392 //*****************************************************************************
393 //
412 //
413 //*****************************************************************************
414 extern uint32_t SPI_getReceiveBufferAddressForDMA(uint32_t moduleInstance);
415 
416 //*****************************************************************************
417 //
436 //
437 //*****************************************************************************
438 extern uint32_t SPI_getTransmitBufferAddressForDMA(uint32_t moduleInstance);
439 
440 //*****************************************************************************
441 //
461 //
462 //*****************************************************************************
463 extern uint_fast8_t SPI_isBusy(uint32_t moduleInstance);
464 
465 //*****************************************************************************
466 //
493 //
494 //*****************************************************************************
495 extern void SPI_enableInterrupt(uint32_t moduleInstance, uint_fast8_t mask);
496 
497 //*****************************************************************************
498 //
526 //
527 //*****************************************************************************
528 extern void SPI_disableInterrupt(uint32_t moduleInstance, uint_fast8_t mask);
529 
530 //*****************************************************************************
531 //
551 //
552 //*****************************************************************************
553 extern uint_fast8_t SPI_getInterruptStatus(uint32_t moduleInstance);
554 
555 //*****************************************************************************
556 //
579 //
580 //*****************************************************************************
581 extern uint_fast8_t SPI_getEnabledInterruptStatus(uint32_t moduleInstance);
582 
583 //*****************************************************************************
584 //
606 //
607 //*****************************************************************************
608 extern void SPI_clearInterruptFlag(uint32_t moduleInstance, uint_fast8_t mask);
609 
610 //*****************************************************************************
611 //
638 //
639 //*****************************************************************************
640 extern void SPI_registerInterrupt(uint32_t moduleInstance,
641  void (*intHandler)(void));
642 
643 //*****************************************************************************
644 //
666 //
667 //*****************************************************************************
668 extern void SPI_unregisterInterrupt(uint32_t moduleInstance);
669 
670 /* Backwards Compatibility Layer */
671 #define EUSCI_B_SPI_PHASE_DATA_CHANGED_ONFIRST_CAPTURED_ON_NEXT 0x00
672 #define EUSCI_B_SPI_PHASE_DATA_CAPTURED_ONFIRST_CHANGED_ON_NEXT UCCKPH
673 
674 #define EUSCI_B_SPI_MSB_FIRST UCMSB
675 #define EUSCI_B_SPI_LSB_FIRST 0x00
676 
677 #define EUSCI_B_SPI_CLOCKPOLARITY_INACTIVITY_HIGH UCCKPL
678 #define EUSCI_B_SPI_CLOCKPOLARITY_INACTIVITY_LOW 0x00
679 
680 #define EUSCI_B_SPI_CLOCKSOURCE_ACLK UCSSEL__ACLK
681 #define EUSCI_B_SPI_CLOCKSOURCE_SMCLK UCSSEL__SMCLK
682 
683 #define EUSCI_B_SPI_3PIN UCMODE_0
684 #define EUSCI_B_SPI_4PIN_UCxSTE_ACTIVE_HIGH UCMODE_1
685 #define EUSCI_B_SPI_4PIN_UCxSTE_ACTIVE_LOW UCMODE_2
686 
687 #define EUSCI_B_SPI_PREVENT_CONFLICTS_WITH_OTHER_MASTERS 0x00
688 #define EUSCI_B_SPI_ENABLE_SIGNAL_FOR_4WIRE_SLAVE UCSTEM
689 
690 #define EUSCI_B_SPI_TRANSMIT_INTERRUPT UCTXIE
691 #define EUSCI_B_SPI_RECEIVE_INTERRUPT UCRXIE
692 
693 #define EUSCI_B_SPI_BUSY UCBUSY
694 #define EUSCI_B_SPI_NOT_BUSY 0x00
695 
696 #define EUSCI_A_SPI_PHASE_DATA_CHANGED_ONFIRST_CAPTURED_ON_NEXT 0x00
697 #define EUSCI_A_SPI_PHASE_DATA_CAPTURED_ONFIRST_CHANGED_ON_NEXT UCCKPH
698 
699 #define EUSCI_A_SPI_MSB_FIRST UCMSB
700 #define EUSCI_A_SPI_LSB_FIRST 0x00
701 
702 #define EUSCI_A_SPI_CLOCKPOLARITY_INACTIVITY_HIGH UCCKPL
703 #define EUSCI_A_SPI_CLOCKPOLARITY_INACTIVITY_LOW 0x00
704 
705 #define EUSCI_A_SPI_CLOCKSOURCE_ACLK UCSSEL__ACLK
706 #define EUSCI_A_SPI_CLOCKSOURCE_SMCLK UCSSEL__SMCLK
707 
708 #define EUSCI_A_SPI_3PIN UCMODE_0
709 #define EUSCI_A_SPI_4PIN_UCxSTE_ACTIVE_HIGH UCMODE_1
710 #define EUSCI_A_SPI_4PIN_UCxSTE_ACTIVE_LOW UCMODE_2
711 
712 #define EUSCI_A_SPI_PREVENT_CONFLICTS_WITH_OTHER_MASTERS 0x00
713 #define EUSCI_A_SPI_ENABLE_SIGNAL_FOR_4WIRE_SLAVE UCSTEM
714 
715 #define EUSCI_A_SPI_TRANSMIT_INTERRUPT UCTXIE
716 #define EUSCI_A_SPI_RECEIVE_INTERRUPT UCRXIE
717 
718 #define EUSCI_A_SPI_BUSY UCBUSY
719 #define EUSCI_A_SPI_NOT_BUSY 0x00
720 
721 extern void EUSCI_A_SPI_select4PinFunctionality(uint32_t baseAddress,
722  uint8_t select4PinFunctionality);
723 extern void EUSCI_A_SPI_masterChangeClock(uint32_t baseAddress,
724  uint32_t clockSourceFrequency, uint32_t desiredSpiClock);
725 extern bool EUSCI_A_SPI_slaveInit(uint32_t baseAddress, uint16_t msbFirst,
726  uint16_t clockPhase, uint16_t clockPolarity, uint16_t spiMode);
727 extern void EUSCI_A_SPI_changeClockPhasePolarity(uint32_t baseAddress,
728  uint16_t clockPhase, uint16_t clockPolarity);
729 extern void EUSCI_A_SPI_transmitData(uint32_t baseAddress,
730  uint8_t transmitData);
731 extern uint8_t EUSCI_A_SPI_receiveData(uint32_t baseAddress);
732 extern void EUSCI_A_SPI_enableInterrupt(uint32_t baseAddress, uint8_t mask);
733 extern void EUSCI_A_SPI_disableInterrupt(uint32_t baseAddress, uint8_t mask);
734 extern uint8_t EUSCI_A_SPI_getInterruptStatus(uint32_t baseAddress,
735  uint8_t mask);
736 extern void EUSCI_A_SPI_clearInterruptFlag(uint32_t baseAddress, uint8_t mask);
737 extern void EUSCI_A_SPI_enable(uint32_t baseAddress);
738 extern void EUSCI_A_SPI_disable(uint32_t baseAddress);
739 extern uint32_t EUSCI_A_SPI_getReceiveBufferAddressForDMA(uint32_t baseAddress);
741  uint32_t baseAddress);
742 extern bool EUSCI_A_SPI_isBusy(uint32_t baseAddress);
743 extern void EUSCI_B_SPI_select4PinFunctionality(uint32_t baseAddress,
744  uint8_t select4PinFunctionality);
745 extern void EUSCI_B_SPI_masterChangeClock(uint32_t baseAddress,
746  uint32_t clockSourceFrequency, uint32_t desiredSpiClock);
747 extern bool EUSCI_B_SPI_slaveInit(uint32_t baseAddress, uint16_t msbFirst,
748  uint16_t clockPhase, uint16_t clockPolarity, uint16_t spiMode);
749 extern void EUSCI_B_SPI_changeClockPhasePolarity(uint32_t baseAddress,
750  uint16_t clockPhase, uint16_t clockPolarity);
751 extern void EUSCI_B_SPI_transmitData(uint32_t baseAddress,
752  uint8_t transmitData);
753 extern uint8_t EUSCI_B_SPI_receiveData(uint32_t baseAddress);
754 extern void EUSCI_B_SPI_enableInterrupt(uint32_t baseAddress, uint8_t mask);
755 extern void EUSCI_B_SPI_disableInterrupt(uint32_t baseAddress, uint8_t mask);
756 extern uint8_t EUSCI_B_SPI_getInterruptStatus(uint32_t baseAddress,
757  uint8_t mask);
758 extern void EUSCI_B_SPI_clearInterruptFlag(uint32_t baseAddress, uint8_t mask);
759 extern void EUSCI_B_SPI_enable(uint32_t baseAddress);
760 extern void EUSCI_B_SPI_disable(uint32_t baseAddress);
761 extern uint32_t EUSCI_B_SPI_getReceiveBufferAddressForDMA(uint32_t baseAddress);
763  uint32_t baseAddress);
764 extern bool EUSCI_B_SPI_isBusy(uint32_t baseAddress);
765 
766 //*****************************************************************************
767 //
768 // Mark the end of the C bindings section for C++ compilers.
769 //
770 //*****************************************************************************
771 #ifdef __cplusplus
772 }
773 #endif
774 
775 //*****************************************************************************
776 //
777 // Close the Doxygen group.
779 //
780 //*****************************************************************************
781 
782 #endif /* SPI_H_ */
783 
void EUSCI_A_SPI_clearInterruptFlag(uint32_t baseAddress, uint8_t mask)
Clears the selected SPI interrupt status flag.
Definition: spi.c:1229
uint8_t EUSCI_A_SPI_receiveData(uint32_t baseAddress)
Receives a byte that has been sent to the SPI Module.
Definition: spi.c:1122
void EUSCI_A_SPI_enableInterrupt(uint32_t baseAddress, uint8_t mask)
Enables individual SPI interrupt sources.
Definition: spi.c:1146
void SPI_registerInterrupt(uint32_t moduleInstance, void(*intHandler)(void))
Definition: spi.c:406
uint32_t clockSourceFrequency
Definition: spi.h:67
bool SPI_initMaster(uint32_t moduleInstance, const SPI_MasterConfig *config)
Definition: spi.c:21
uint32_t SPI_getReceiveBufferAddressForDMA(uint32_t moduleInstance)
Definition: spi.c:307
void EUSCI_A_SPI_enable(uint32_t baseAddress)
Enables the SPI block.
Definition: spi.c:1252
bool EUSCI_B_SPI_isBusy(uint32_t baseAddress)
Indicates whether or not the SPI bus is busy.
Definition: spi.c:912
bool SPI_initSlave(uint32_t moduleInstance, const SPI_SlaveConfig *config)
Definition: spi.c:166
Configuration structure for master mode in the SPI module. See SPI_initMaster for parameter documenta...
Definition: spi.h:64
void SPI_changeMasterClock(uint32_t moduleInstance, uint32_t clockSourceFrequency, uint32_t desiredSpiClock)
Definition: spi.c:151
void EUSCI_B_SPI_transmitData(uint32_t baseAddress, uint8_t transmitData)
Transmits a byte from the SPI Module.
Definition: spi.c:694
uint_fast16_t clockPolarity
Definition: spi.h:89
uint_fast16_t clockPhase
Definition: spi.h:88
void EUSCI_B_SPI_disable(uint32_t baseAddress)
Disables the SPI block.
Definition: spi.c:860
void SPI_disableModule(uint32_t moduleInstance)
Definition: spi.c:295
void EUSCI_A_SPI_select4PinFunctionality(uint32_t baseAddress, uint8_t select4PinFunctionality)
Selects 4Pin Functionality.
Definition: spi.c:936
void SPI_enableInterrupt(uint32_t moduleInstance, uint_fast8_t mask)
Definition: spi.c:343
void EUSCI_A_SPI_disableInterrupt(uint32_t baseAddress, uint8_t mask)
Disables individual SPI interrupt sources.
Definition: spi.c:1175
void EUSCI_B_SPI_masterChangeClock(uint32_t baseAddress, uint32_t clockSourceFrequency, uint32_t desiredSpiClock)
Initializes the SPI Master clock. At the end of this function call, SPI module is left enabled...
Definition: spi.c:552
uint_fast16_t spiMode
Definition: spi.h:72
void EUSCI_B_SPI_changeClockPhasePolarity(uint32_t baseAddress, uint16_t clockPhase, uint16_t clockPolarity)
Changes the SPI colock phase and polarity. At the end of this function call, SPI module is left enabl...
Definition: spi.c:656
void EUSCI_B_SPI_enable(uint32_t baseAddress)
Enables the SPI block.
Definition: spi.c:841
void SPI_enableModule(uint32_t moduleInstance)
Definition: spi.c:283
void SPI_unregisterInterrupt(uint32_t moduleInstance)
Definition: spi.c:455
void EUSCI_A_SPI_changeClockPhasePolarity(uint32_t baseAddress, uint16_t clockPhase, uint16_t clockPolarity)
Changes the SPI colock phase and polarity. At the end of this function call, SPI module is left enabl...
Definition: spi.c:1067
uint_fast16_t clockPhase
Definition: spi.h:70
void SPI_clearInterruptFlag(uint32_t moduleInstance, uint_fast8_t mask)
Definition: spi.c:394
uint_fast8_t SPI_getInterruptStatus(uint32_t moduleInstance)
Definition: spi.c:367
void EUSCI_A_SPI_disable(uint32_t baseAddress)
Disables the SPI block.
Definition: spi.c:1271
void SPI_changeClockPhasePolarity(uint32_t moduleInstance, uint_fast16_t clockPhase, uint_fast16_t clockPolarity)
Definition: spi.c:244
void SPI_transmitData(uint32_t moduleInstance, uint_fast8_t transmitData)
Definition: spi.c:259
struct _SPI_MasterConfig SPI_MasterConfig
Type definition for _SPI_MasterConfig structure.
void SPI_disableInterrupt(uint32_t moduleInstance, uint_fast8_t mask)
Definition: spi.c:355
uint_fast8_t selectClockSource
Definition: spi.h:66
uint32_t EUSCI_B_SPI_getTransmitBufferAddressForDMA(uint32_t baseAddress)
Returns the address of the TX Buffer of the SPI for the DMA module.
Definition: spi.c:895
uint_fast16_t clockPolarity
Definition: spi.h:71
bool EUSCI_B_SPI_slaveInit(uint32_t baseAddress, uint16_t msbFirst, uint16_t clockPhase, uint16_t clockPolarity, uint16_t spiMode)
Initializes the SPI Slave block.
Definition: spi.c:600
void SPI_selectFourPinFunctionality(uint32_t moduleInstance, uint_fast8_t select4PinFunctionality)
Definition: spi.c:136
void EUSCI_B_SPI_select4PinFunctionality(uint32_t baseAddress, uint8_t select4PinFunctionality)
Selects 4Pin Functionality.
Definition: spi.c:525
uint8_t SPI_receiveData(uint32_t moduleInstance)
Definition: spi.c:271
uint_fast16_t spiMode
Definition: spi.h:90
struct _SPI_SlaveConfig SPI_SlaveConfig
Type definition for _SPI_SlaveConfig structure.
uint_fast8_t SPI_getEnabledInterruptStatus(uint32_t moduleInstance)
Definition: spi.c:381
bool EUSCI_A_SPI_slaveInit(uint32_t baseAddress, uint16_t msbFirst, uint16_t clockPhase, uint16_t clockPolarity, uint16_t spiMode)
Initializes the SPI Slave block.
Definition: spi.c:1011
Configuration structure for slave mode in the SPI module. See SPI_initSlave for parameter documentati...
Definition: spi.h:85
uint32_t SPI_getTransmitBufferAddressForDMA(uint32_t moduleInstance)
Definition: spi.c:319
void EUSCI_B_SPI_clearInterruptFlag(uint32_t baseAddress, uint8_t mask)
Clears the selected SPI interrupt status flag.
Definition: spi.c:818
uint8_t EUSCI_B_SPI_receiveData(uint32_t baseAddress)
Receives a byte that has been sent to the SPI Module.
Definition: spi.c:711
uint_fast16_t msbFirst
Definition: spi.h:87
uint32_t EUSCI_A_SPI_getTransmitBufferAddressForDMA(uint32_t baseAddress)
Returns the address of the TX Buffer of the SPI for the DMA module.
Definition: spi.c:1306
void EUSCI_B_SPI_enableInterrupt(uint32_t baseAddress, uint8_t mask)
Enables individual SPI interrupt sources.
Definition: spi.c:735
uint32_t EUSCI_B_SPI_getReceiveBufferAddressForDMA(uint32_t baseAddress)
Returns the address of the RX Buffer of the SPI for the DMA module.
Definition: spi.c:878
uint8_t EUSCI_B_SPI_getInterruptStatus(uint32_t baseAddress, uint8_t mask)
Gets the current SPI interrupt status.
Definition: spi.c:793
uint_fast8_t SPI_isBusy(uint32_t moduleInstance)
Definition: spi.c:331
uint8_t EUSCI_A_SPI_getInterruptStatus(uint32_t baseAddress, uint8_t mask)
Gets the current SPI interrupt status.
Definition: spi.c:1204
void EUSCI_A_SPI_masterChangeClock(uint32_t baseAddress, uint32_t clockSourceFrequency, uint32_t desiredSpiClock)
Initializes the SPI Master clock. At the end of this function call, SPI module is left enabled...
Definition: spi.c:963
uint32_t EUSCI_A_SPI_getReceiveBufferAddressForDMA(uint32_t baseAddress)
Returns the address of the RX Buffer of the SPI for the DMA module.
Definition: spi.c:1289
uint32_t desiredSpiClock
Definition: spi.h:68
bool EUSCI_A_SPI_isBusy(uint32_t baseAddress)
Indicates whether or not the SPI bus is busy.
Definition: spi.c:1322
void EUSCI_A_SPI_transmitData(uint32_t baseAddress, uint8_t transmitData)
Transmits a byte from the SPI Module.
Definition: spi.c:1105
uint_fast16_t msbFirst
Definition: spi.h:69
void EUSCI_B_SPI_disableInterrupt(uint32_t baseAddress, uint8_t mask)
Disables individual SPI interrupt sources.
Definition: spi.c:764

Copyright 2014, Texas Instruments Incorporated