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 <msp.h>
25 #include "eusci.h"
26 
27 /* Configuration Defines */
28 #define EUSCI_SPI_CLOCKSOURCE_ACLK EUSCI_B_CTLW0_SSEL__ACLK
29 #define EUSCI_SPI_CLOCKSOURCE_SMCLK EUSCI_B_CTLW0_SSEL__SMCLK
30 
31 #define EUSCI_SPI_MSB_FIRST EUSCI_B_CTLW0_MSB
32 #define EUSCI_SPI_LSB_FIRST 0x00
33 
34 #define EUSCI_SPI_BUSY EUSCI_A_STATW_BUSY
35 #define EUSCI_SPI_NOT_BUSY 0x00
36 
37 #define EUSCI_SPI_PHASE_DATA_CHANGED_ONFIRST_CAPTURED_ON_NEXT 0x00
38 #define EUSCI_SPI_PHASE_DATA_CAPTURED_ONFIRST_CHANGED_ON_NEXT EUSCI_B_CTLW0_CKPH
39 
40 #define EUSCI_SPI_3PIN EUSCI_B_CTLW0_MODE_0
41 #define EUSCI_SPI_4PIN_UCxSTE_ACTIVE_HIGH EUSCI_B_CTLW0_MODE_1
42 #define EUSCI_SPI_4PIN_UCxSTE_ACTIVE_LOW EUSCI_B_CTLW0_MODE_2
43 
44 #define EUSCI_SPI_CLOCKPOLARITY_INACTIVITY_HIGH EUSCI_B_CTLW0_CKPL
45 #define EUSCI_SPI_CLOCKPOLARITY_INACTIVITY_LOW 0x00
46 
47 #define EUSCI_SPI_TRANSMIT_INTERRUPT EUSCI_B__TXIE
48 #define EUSCI_SPI_RECEIVE_INTERRUPT EUSCI_B__RXIE
49 
50 #define EUSCI_SPI_ENABLE_SIGNAL_FOR_4WIRE_SLAVE EUSCI_B_CTLW0_STEM
51 #define EUSCI_SPI_PREVENT_CONFLICTS_WITH_OTHER_MASTERS 0x00
52 
53 //*****************************************************************************
54 //
61 //
62 //*****************************************************************************
64 {
65  uint_fast8_t selectClockSource;
67  uint32_t desiredSpiClock;
68  uint_fast16_t msbFirst;
69  uint_fast16_t clockPhase;
70  uint_fast16_t clockPolarity;
71  uint_fast16_t spiMode;
73 
74 //*****************************************************************************
75 //
82 //
83 //*****************************************************************************
84 typedef struct _eUSCI_SPI_SlaveConfig
85 {
86  uint_fast16_t msbFirst;
87  uint_fast16_t clockPhase;
88  uint_fast16_t clockPolarity;
89  uint_fast16_t spiMode;
91 
92 //*****************************************************************************
93 //
143 //
144 //*****************************************************************************
145 extern bool SPI_initMaster(uint32_t moduleInstance,
146  const eUSCI_SPI_MasterConfig *config);
147 
148 //*****************************************************************************
149 //
172 //
173 //*****************************************************************************
174 extern void SPI_selectFourPinFunctionality(uint32_t moduleInstance,
175  uint_fast8_t select4PinFunctionality);
176 
177 //*****************************************************************************
178 //
200 //
201 //*****************************************************************************
202 extern void SPI_changeMasterClock(uint32_t moduleInstance,
203  uint32_t clockSourceFrequency, uint32_t desiredSpiClock);
204 
205 //*****************************************************************************
206 //
251 //*****************************************************************************
252 extern bool SPI_initSlave(uint32_t moduleInstance,
253  const eUSCI_SPI_SlaveConfig *config);
254 
255 //*****************************************************************************
256 //
285 //
286 //*****************************************************************************
287 extern void SPI_changeClockPhasePolarity(uint32_t moduleInstance,
288  uint_fast16_t clockPhase, uint_fast16_t clockPolarity);
289 
290 //*****************************************************************************
291 //
313 //
314 //*****************************************************************************
315 extern void SPI_transmitData(uint32_t moduleInstance,
316  uint_fast8_t transmitData);
317 
318 //*****************************************************************************
319 //
338 //
339 //*****************************************************************************
340 extern uint8_t SPI_receiveData(uint32_t moduleInstance);
341 
342 //*****************************************************************************
343 //
362 //
363 //*****************************************************************************
364 extern void SPI_enableModule(uint32_t moduleInstance);
365 
366 //*****************************************************************************
367 //
387 //
388 //*****************************************************************************
389 extern void SPI_disableModule(uint32_t moduleInstance);
390 
391 //*****************************************************************************
392 //
411 //
412 //*****************************************************************************
413 extern uint32_t SPI_getReceiveBufferAddressForDMA(uint32_t moduleInstance);
414 
415 //*****************************************************************************
416 //
435 //
436 //*****************************************************************************
437 extern uint32_t SPI_getTransmitBufferAddressForDMA(uint32_t moduleInstance);
438 
439 //*****************************************************************************
440 //
460 //
461 //*****************************************************************************
462 extern uint_fast8_t SPI_isBusy(uint32_t moduleInstance);
463 
464 //*****************************************************************************
465 //
492 //
493 //*****************************************************************************
494 extern void SPI_enableInterrupt(uint32_t moduleInstance, uint_fast8_t mask);
495 
496 //*****************************************************************************
497 //
525 //
526 //*****************************************************************************
527 extern void SPI_disableInterrupt(uint32_t moduleInstance, uint_fast8_t mask);
528 
529 //*****************************************************************************
530 //
553 //
554 //*****************************************************************************
555 extern uint_fast8_t SPI_getInterruptStatus(uint32_t moduleInstance,
556  uint16_t mask);
557 
558 //*****************************************************************************
559 //
582 //
583 //*****************************************************************************
584 extern uint_fast8_t SPI_getEnabledInterruptStatus(uint32_t moduleInstance);
585 
586 //*****************************************************************************
587 //
609 //
610 //*****************************************************************************
611 extern void SPI_clearInterruptFlag(uint32_t moduleInstance, uint_fast8_t mask);
612 
613 //*****************************************************************************
614 //
641 //
642 //*****************************************************************************
643 extern void SPI_registerInterrupt(uint32_t moduleInstance,
644  void (*intHandler)(void));
645 
646 //*****************************************************************************
647 //
669 //
670 //*****************************************************************************
671 extern void SPI_unregisterInterrupt(uint32_t moduleInstance);
672 
673 /* Backwards Compatibility Layer */
674 #define EUSCI_B_SPI_PHASE_DATA_CHANGED_ONFIRST_CAPTURED_ON_NEXT 0x00
675 #define EUSCI_B_SPI_PHASE_DATA_CAPTURED_ONFIRST_CHANGED_ON_NEXT UCCKPH
676 
677 #define EUSCI_B_SPI_MSB_FIRST UCMSB
678 #define EUSCI_B_SPI_LSB_FIRST 0x00
679 
680 #define EUSCI_B_SPI_CLOCKPOLARITY_INACTIVITY_HIGH UCCKPL
681 #define EUSCI_B_SPI_CLOCKPOLARITY_INACTIVITY_LOW 0x00
682 
683 #define EUSCI_B_SPI_CLOCKSOURCE_ACLK UCSSEL__ACLK
684 #define EUSCI_B_SPI_CLOCKSOURCE_SMCLK UCSSEL__SMCLK
685 
686 #define EUSCI_B_SPI_3PIN UCMODE_0
687 #define EUSCI_B_SPI_4PIN_UCxSTE_ACTIVE_HIGH UCMODE_1
688 #define EUSCI_B_SPI_4PIN_UCxSTE_ACTIVE_LOW UCMODE_2
689 
690 #define EUSCI_B_SPI_PREVENT_CONFLICTS_WITH_OTHER_MASTERS 0x00
691 #define EUSCI_B_SPI_ENABLE_SIGNAL_FOR_4WIRE_SLAVE UCSTEM
692 
693 #define EUSCI_B_SPI_TRANSMIT_INTERRUPT UCTXIE
694 #define EUSCI_B_SPI_RECEIVE_INTERRUPT UCRXIE
695 
696 #define EUSCI_B_SPI_BUSY UCBUSY
697 #define EUSCI_B_SPI_NOT_BUSY 0x00
698 
699 #define EUSCI_A_SPI_PHASE_DATA_CHANGED_ONFIRST_CAPTURED_ON_NEXT 0x00
700 #define EUSCI_A_SPI_PHASE_DATA_CAPTURED_ONFIRST_CHANGED_ON_NEXT UCCKPH
701 
702 #define EUSCI_A_SPI_MSB_FIRST UCMSB
703 #define EUSCI_A_SPI_LSB_FIRST 0x00
704 
705 #define EUSCI_A_SPI_CLOCKPOLARITY_INACTIVITY_HIGH UCCKPL
706 #define EUSCI_A_SPI_CLOCKPOLARITY_INACTIVITY_LOW 0x00
707 
708 #define EUSCI_A_SPI_CLOCKSOURCE_ACLK UCSSEL__ACLK
709 #define EUSCI_A_SPI_CLOCKSOURCE_SMCLK UCSSEL__SMCLK
710 
711 #define EUSCI_A_SPI_3PIN UCMODE_0
712 #define EUSCI_A_SPI_4PIN_UCxSTE_ACTIVE_HIGH UCMODE_1
713 #define EUSCI_A_SPI_4PIN_UCxSTE_ACTIVE_LOW UCMODE_2
714 
715 #define EUSCI_A_SPI_PREVENT_CONFLICTS_WITH_OTHER_MASTERS 0x00
716 #define EUSCI_A_SPI_ENABLE_SIGNAL_FOR_4WIRE_SLAVE UCSTEM
717 
718 #define EUSCI_A_SPI_TRANSMIT_INTERRUPT UCTXIE
719 #define EUSCI_A_SPI_RECEIVE_INTERRUPT UCRXIE
720 
721 #define EUSCI_A_SPI_BUSY UCBUSY
722 #define EUSCI_A_SPI_NOT_BUSY 0x00
723 
724 extern void EUSCI_A_SPI_select4PinFunctionality(uint32_t baseAddress,
725  uint8_t select4PinFunctionality);
726 extern void EUSCI_A_SPI_masterChangeClock(uint32_t baseAddress,
727  uint32_t clockSourceFrequency, uint32_t desiredSpiClock);
728 extern bool EUSCI_A_SPI_slaveInit(uint32_t baseAddress, uint16_t msbFirst,
729  uint16_t clockPhase, uint16_t clockPolarity, uint16_t spiMode);
730 extern void EUSCI_A_SPI_changeClockPhasePolarity(uint32_t baseAddress,
731  uint16_t clockPhase, uint16_t clockPolarity);
732 extern void EUSCI_A_SPI_transmitData(uint32_t baseAddress,
733  uint8_t transmitData);
734 extern uint8_t EUSCI_A_SPI_receiveData(uint32_t baseAddress);
735 extern void EUSCI_A_SPI_enableInterrupt(uint32_t baseAddress, uint8_t mask);
736 extern void EUSCI_A_SPI_disableInterrupt(uint32_t baseAddress, uint8_t mask);
737 extern uint8_t EUSCI_A_SPI_getInterruptStatus(uint32_t baseAddress,
738  uint8_t mask);
739 extern void EUSCI_A_SPI_clearInterruptFlag(uint32_t baseAddress, uint8_t mask);
740 extern void EUSCI_A_SPI_enable(uint32_t baseAddress);
741 extern void EUSCI_A_SPI_disable(uint32_t baseAddress);
742 extern uint32_t EUSCI_A_SPI_getReceiveBufferAddressForDMA(uint32_t baseAddress);
744  uint32_t baseAddress);
745 extern bool EUSCI_A_SPI_isBusy(uint32_t baseAddress);
746 extern void EUSCI_B_SPI_select4PinFunctionality(uint32_t baseAddress,
747  uint8_t select4PinFunctionality);
748 extern void EUSCI_B_SPI_masterChangeClock(uint32_t baseAddress,
749  uint32_t clockSourceFrequency, uint32_t desiredSpiClock);
750 extern bool EUSCI_B_SPI_slaveInit(uint32_t baseAddress, uint16_t msbFirst,
751  uint16_t clockPhase, uint16_t clockPolarity, uint16_t spiMode);
752 extern void EUSCI_B_SPI_changeClockPhasePolarity(uint32_t baseAddress,
753  uint16_t clockPhase, uint16_t clockPolarity);
754 extern void EUSCI_B_SPI_transmitData(uint32_t baseAddress,
755  uint8_t transmitData);
756 extern uint8_t EUSCI_B_SPI_receiveData(uint32_t baseAddress);
757 extern void EUSCI_B_SPI_enableInterrupt(uint32_t baseAddress, uint8_t mask);
758 extern void EUSCI_B_SPI_disableInterrupt(uint32_t baseAddress, uint8_t mask);
759 extern uint8_t EUSCI_B_SPI_getInterruptStatus(uint32_t baseAddress,
760  uint8_t mask);
761 extern void EUSCI_B_SPI_clearInterruptFlag(uint32_t baseAddress, uint8_t mask);
762 extern void EUSCI_B_SPI_enable(uint32_t baseAddress);
763 extern void EUSCI_B_SPI_disable(uint32_t baseAddress);
764 extern uint32_t EUSCI_B_SPI_getReceiveBufferAddressForDMA(uint32_t baseAddress);
766  uint32_t baseAddress);
767 extern bool EUSCI_B_SPI_isBusy(uint32_t baseAddress);
768 
769 //*****************************************************************************
770 //
771 // Mark the end of the C bindings section for C++ compilers.
772 //
773 //*****************************************************************************
774 #ifdef __cplusplus
775 }
776 #endif
777 
778 //*****************************************************************************
779 //
780 // Close the Doxygen group.
782 //
783 //*****************************************************************************
784 
785 #endif /* SPI_H_ */
786 
bool SPI_initMaster(uint32_t moduleInstance, const eUSCI_SPI_MasterConfig *config)
Definition: spi.c:21
uint_fast16_t clockPhase
Definition: spi.h:87
uint_fast8_t selectClockSource
Definition: spi.h:65
Type definition for _eUSCI_SPI_SlaveConfig structure.
Definition: spi.h:84
void EUSCI_A_SPI_clearInterruptFlag(uint32_t baseAddress, uint8_t mask)
Clears the selected SPI interrupt status flag.
Definition: spi.c:1238
uint8_t EUSCI_A_SPI_receiveData(uint32_t baseAddress)
Receives a byte that has been sent to the SPI Module.
Definition: spi.c:1131
bool SPI_initSlave(uint32_t moduleInstance, const eUSCI_SPI_SlaveConfig *config)
Definition: spi.c:173
void EUSCI_A_SPI_enableInterrupt(uint32_t baseAddress, uint8_t mask)
Enables individual SPI interrupt sources.
Definition: spi.c:1155
void SPI_registerInterrupt(uint32_t moduleInstance, void(*intHandler)(void))
Definition: spi.c:415
uint32_t SPI_getReceiveBufferAddressForDMA(uint32_t moduleInstance)
Definition: spi.c:314
void EUSCI_A_SPI_enable(uint32_t baseAddress)
Enables the SPI block.
Definition: spi.c:1261
bool EUSCI_B_SPI_isBusy(uint32_t baseAddress)
Indicates whether or not the SPI bus is busy.
Definition: spi.c:921
void SPI_changeMasterClock(uint32_t moduleInstance, uint32_t clockSourceFrequency, uint32_t desiredSpiClock)
Definition: spi.c:158
void EUSCI_B_SPI_transmitData(uint32_t baseAddress, uint8_t transmitData)
Transmits a byte from the SPI Module.
Definition: spi.c:703
void EUSCI_B_SPI_disable(uint32_t baseAddress)
Disables the SPI block.
Definition: spi.c:869
void SPI_disableModule(uint32_t moduleInstance)
Definition: spi.c:302
void EUSCI_A_SPI_select4PinFunctionality(uint32_t baseAddress, uint8_t select4PinFunctionality)
Selects 4Pin Functionality.
Definition: spi.c:945
uint_fast8_t SPI_getInterruptStatus(uint32_t moduleInstance, uint16_t mask)
Definition: spi.c:374
struct _eUSCI_SPI_SlaveConfig eUSCI_SPI_SlaveConfig
void SPI_enableInterrupt(uint32_t moduleInstance, uint_fast8_t mask)
Definition: spi.c:350
void EUSCI_A_SPI_disableInterrupt(uint32_t baseAddress, uint8_t mask)
Disables individual SPI interrupt sources.
Definition: spi.c:1184
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:561
uint_fast16_t clockPhase
Definition: spi.h:69
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:665
void EUSCI_B_SPI_enable(uint32_t baseAddress)
Enables the SPI block.
Definition: spi.c:850
void SPI_enableModule(uint32_t moduleInstance)
Definition: spi.c:290
void SPI_unregisterInterrupt(uint32_t moduleInstance)
Definition: spi.c:464
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:1076
void SPI_clearInterruptFlag(uint32_t moduleInstance, uint_fast8_t mask)
Definition: spi.c:403
void EUSCI_A_SPI_disable(uint32_t baseAddress)
Disables the SPI block.
Definition: spi.c:1280
void SPI_changeClockPhasePolarity(uint32_t moduleInstance, uint_fast16_t clockPhase, uint_fast16_t clockPolarity)
Definition: spi.c:251
void SPI_transmitData(uint32_t moduleInstance, uint_fast8_t transmitData)
Definition: spi.c:266
uint32_t desiredSpiClock
Definition: spi.h:67
void SPI_disableInterrupt(uint32_t moduleInstance, uint_fast8_t mask)
Definition: spi.c:362
uint_fast16_t spiMode
Definition: spi.h:71
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:904
uint_fast16_t clockPolarity
Definition: spi.h:70
uint_fast16_t msbFirst
Definition: spi.h:86
Type definition for _eUSCI_SPI_MasterConfig structure.
Definition: spi.h:63
uint_fast16_t spiMode
Definition: spi.h:89
uint_fast16_t msbFirst
Definition: spi.h:68
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:609
void SPI_selectFourPinFunctionality(uint32_t moduleInstance, uint_fast8_t select4PinFunctionality)
Definition: spi.c:143
struct _eUSCI_SPI_MasterConfig eUSCI_SPI_MasterConfig
void EUSCI_B_SPI_select4PinFunctionality(uint32_t baseAddress, uint8_t select4PinFunctionality)
Selects 4Pin Functionality.
Definition: spi.c:534
uint8_t SPI_receiveData(uint32_t moduleInstance)
Definition: spi.c:278
uint_fast8_t SPI_getEnabledInterruptStatus(uint32_t moduleInstance)
Definition: spi.c:386
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:1020
uint32_t SPI_getTransmitBufferAddressForDMA(uint32_t moduleInstance)
Definition: spi.c:326
uint_fast16_t clockPolarity
Definition: spi.h:88
void EUSCI_B_SPI_clearInterruptFlag(uint32_t baseAddress, uint8_t mask)
Clears the selected SPI interrupt status flag.
Definition: spi.c:827
uint8_t EUSCI_B_SPI_receiveData(uint32_t baseAddress)
Receives a byte that has been sent to the SPI Module.
Definition: spi.c:720
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:1315
void EUSCI_B_SPI_enableInterrupt(uint32_t baseAddress, uint8_t mask)
Enables individual SPI interrupt sources.
Definition: spi.c:744
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:887
uint8_t EUSCI_B_SPI_getInterruptStatus(uint32_t baseAddress, uint8_t mask)
Gets the current SPI interrupt status.
Definition: spi.c:802
uint_fast8_t SPI_isBusy(uint32_t moduleInstance)
Definition: spi.c:338
uint8_t EUSCI_A_SPI_getInterruptStatus(uint32_t baseAddress, uint8_t mask)
Gets the current SPI interrupt status.
Definition: spi.c:1213
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:972
uint32_t clockSourceFrequency
Definition: spi.h:66
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:1298
bool EUSCI_A_SPI_isBusy(uint32_t baseAddress)
Indicates whether or not the SPI bus is busy.
Definition: spi.c:1331
void EUSCI_A_SPI_transmitData(uint32_t baseAddress, uint8_t transmitData)
Transmits a byte from the SPI Module.
Definition: spi.c:1114
void EUSCI_B_SPI_disableInterrupt(uint32_t baseAddress, uint8_t mask)
Disables individual SPI interrupt sources.
Definition: spi.c:773

Copyright 2016, Texas Instruments Incorporated