i2c.h
Go to the documentation of this file.
1 #ifndef I2C_H_
2 #define I2C_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 <stdint.h>
23 #include "register_remap.h"
24 #include <stdbool.h>
25 #include <msp432.h>
26 #include "eusci.h"
27 
28 #define EUSCI_B_I2C_NO_AUTO_STOP UCASTP_0
29 #define EUSCI_B_I2C_SET_BYTECOUNT_THRESHOLD_FLAG UCASTP_1
30 #define EUSCI_B_I2C_SEND_STOP_AUTOMATICALLY_ON_BYTECOUNT_THRESHOLD UCASTP_2
31 
32 #define EUSCI_B_I2C_SET_DATA_RATE_400KBPS 400000
33 #define EUSCI_B_I2C_SET_DATA_RATE_100KBPS 100000
34 
35 #define EUSCI_B_I2C_CLOCKSOURCE_ACLK UCSSEL__ACLK
36 #define EUSCI_B_I2C_CLOCKSOURCE_SMCLK UCSSEL__SMCLK
37 
38 #define EUSCI_B_I2C_OWN_ADDRESS_OFFSET0 0x00
39 #define EUSCI_B_I2C_OWN_ADDRESS_OFFSET1 0x02
40 #define EUSCI_B_I2C_OWN_ADDRESS_OFFSET2 0x04
41 #define EUSCI_B_I2C_OWN_ADDRESS_OFFSET3 0x06
42 
43 #define EUSCI_B_I2C_OWN_ADDRESS_DISABLE 0x00
44 #define EUSCI_B_I2C_OWN_ADDRESS_ENABLE UCOAEN
45 
46 #define EUSCI_B_I2C_TRANSMIT_MODE UCTR
47 #define EUSCI_B_I2C_RECEIVE_MODE 0x00
48 
49 #define EUSCI_B_I2C_NAK_INTERRUPT UCNACKIE
50 #define EUSCI_B_I2C_ARBITRATIONLOST_INTERRUPT UCALIE
51 #define EUSCI_B_I2C_STOP_INTERRUPT UCSTPIE
52 #define EUSCI_B_I2C_START_INTERRUPT UCSTTIE
53 #define EUSCI_B_I2C_TRANSMIT_INTERRUPT0 UCTXIE0
54 #define EUSCI_B_I2C_TRANSMIT_INTERRUPT1 UCTXIE1
55 #define EUSCI_B_I2C_TRANSMIT_INTERRUPT2 UCTXIE2
56 #define EUSCI_B_I2C_TRANSMIT_INTERRUPT3 UCTXIE3
57 #define EUSCI_B_I2C_RECEIVE_INTERRUPT0 UCRXIE0
58 #define EUSCI_B_I2C_RECEIVE_INTERRUPT1 UCRXIE1
59 #define EUSCI_B_I2C_RECEIVE_INTERRUPT2 UCRXIE2
60 #define EUSCI_B_I2C_RECEIVE_INTERRUPT3 UCRXIE3
61 #define EUSCI_B_I2C_BIT9_POSITION_INTERRUPT UCBIT9IE
62 #define EUSCI_B_I2C_CLOCK_LOW_TIMEOUT_INTERRUPT UCCLTOIE
63 #define EUSCI_B_I2C_BYTE_COUNTER_INTERRUPT UCBCNTIE
64 
65 #define EUSCI_B_I2C_BUS_BUSY UCBBUSY
66 #define EUSCI_B_I2C_BUS_NOT_BUSY 0x00
67 
68 #define EUSCI_B_I2C_STOP_SEND_COMPLETE 0x00
69 #define EUSCI_B_I2C_SENDING_STOP UCTXSTP
70 
71 #define EUSCI_B_I2C_START_SEND_COMPLETE 0x00
72 #define EUSCI_B_I2C_SENDING_START UCTXSTT
73 
74 //*****************************************************************************
75 //
82 //
83 //*****************************************************************************
84 typedef struct
85 {
86  uint_fast8_t selectClockSource;
87  uint32_t i2cClk;
88  uint32_t dataRate;
89  uint_fast8_t byteCounterThreshold;
90  uint_fast8_t autoSTOPGeneration;
92 
93 
94 //*****************************************************************************
95 //
144 //
145 //*****************************************************************************
146 extern void I2C_initMaster(uint32_t moduleInstance,
147  const I2C_MasterConfig *config);
148 
149 //*****************************************************************************
150 //
188 //
189 //*****************************************************************************
190 extern void I2C_initSlave(uint32_t moduleInstance, uint_fast16_t slaveAddress,
191  uint_fast8_t slaveAddressOffset, uint32_t slaveOwnAddressEnable);
192 
193 //*****************************************************************************
194 //
211 //
212 //*****************************************************************************
213 extern void I2C_enableModule(uint32_t moduleInstance);
214 
215 //*****************************************************************************
216 //
233 //
234 //*****************************************************************************
235 extern void I2C_disableModule(uint32_t moduleInstance);
236 
237 //*****************************************************************************
238 //
258 //
259 //*****************************************************************************
260 extern void I2C_setSlaveAddress(uint32_t moduleInstance,
261  uint_fast16_t slaveAddress);
262 
263 //*****************************************************************************
264 //
284 //
285 //*****************************************************************************
286 extern void I2C_setMode(uint32_t moduleInstance, uint_fast8_t mode);
287 
288 //*****************************************************************************
289 //
311 //
312 //*****************************************************************************
313 extern uint_fast8_t I2C_getMode(uint32_t moduleInstance);
314 
315 //*****************************************************************************
316 //
336 //
337 //*****************************************************************************
338 extern void I2C_slavePutData(uint32_t moduleInstance, uint8_t transmitData);
339 
340 //*****************************************************************************
341 //
359 //
360 //*****************************************************************************
361 extern uint8_t I2C_slaveGetData(uint32_t moduleInstance);
362 
363 //*****************************************************************************
364 //
384 //
385 //*****************************************************************************
386 extern uint8_t I2C_isBusBusy(uint32_t moduleInstance);
387 
388 //*****************************************************************************
389 //
414 //
415 //*****************************************************************************
416 extern void I2C_masterSendSingleByte(uint32_t moduleInstance, uint8_t txData);
417 
418 //*****************************************************************************
419 //
445 //
446 //*****************************************************************************
447 extern bool I2C_masterSendSingleByteWithTimeout(uint32_t moduleInstance,
448  uint8_t txData, uint32_t timeout);
449 
450 //*****************************************************************************
451 //
475 //
476 //*****************************************************************************
477 extern void I2C_masterSendMultiByteStart(uint32_t moduleInstance,
478  uint8_t txData);
479 
480 //*****************************************************************************
481 //
506 //
507 //*****************************************************************************
508 extern bool I2C_masterSendMultiByteStartWithTimeout(uint32_t moduleInstance,
509  uint8_t txData, uint32_t timeout);
510 
511 //*****************************************************************************
512 //
534 //
535 //*****************************************************************************
536 extern void I2C_masterSendMultiByteNext(uint32_t moduleInstance,
537  uint8_t txData);
538 
539 //*****************************************************************************
540 //
564 //
565 //*****************************************************************************
566 extern bool I2C_masterSendMultiByteNextWithTimeout(uint32_t moduleInstance,
567  uint8_t txData, uint32_t timeout);
568 
569 //*****************************************************************************
570 //
594 //
595 //*****************************************************************************
596 extern void I2C_masterSendMultiByteFinish(uint32_t moduleInstance,
597  uint8_t txData);
598 
599 //*****************************************************************************
600 //
625 //
626 //*****************************************************************************
627 extern bool I2C_masterSendMultiByteFinishWithTimeout(uint32_t moduleInstance,
628  uint8_t txData, uint32_t timeout);
629 
630 //*****************************************************************************
631 //
653 //
654 //*****************************************************************************
655 extern void I2C_masterSendMultiByteStop(uint32_t moduleInstance);
656 
657 //*****************************************************************************
658 //
682 //
683 //*****************************************************************************
684 extern bool I2C_masterSendMultiByteStopWithTimeout(uint32_t moduleInstance,
685  uint32_t timeout);
686 
687 //*****************************************************************************
688 //
708 //
709 //*****************************************************************************
710 extern void I2C_masterReceiveStart(uint32_t moduleInstance);
711 
712 //*****************************************************************************
713 //
733 //
734 //*****************************************************************************
735 extern uint8_t I2C_masterReceiveMultiByteNext(uint32_t moduleInstance);
736 
737 //*****************************************************************************
738 //
760 //
761 //*****************************************************************************
762 extern uint8_t I2C_masterReceiveMultiByteFinish(uint32_t moduleInstance);
763 
764 //*****************************************************************************
765 //
790 //
791 //*****************************************************************************
792 extern bool I2C_masterReceiveMultiByteFinishWithTimeout(uint32_t moduleInstance,
793  uint8_t *txData, uint32_t timeout);
794 
795 //*****************************************************************************
796 //
815 //
816 //*****************************************************************************
817 extern void I2C_masterReceiveMultiByteStop(uint32_t moduleInstance);
818 
819 //*****************************************************************************
820 //
843 //
844 //*****************************************************************************
845 extern uint8_t I2C_masterReceiveSingleByte(uint32_t moduleInstance);
846 
847 //*****************************************************************************
848 //
866 //
867 //*****************************************************************************
868 extern uint8_t I2C_masterReceiveSingle(uint32_t moduleInstance);
869 
870 //*****************************************************************************
871 //
889 //
890 //*****************************************************************************
891 extern uint32_t I2C_getReceiveBufferAddressForDMA(uint32_t moduleInstance);
892 
893 //*****************************************************************************
894 //
912 //
913 //*****************************************************************************
914 extern uint32_t I2C_getTransmitBufferAddressForDMA(uint32_t moduleInstance);
915 
916 //*****************************************************************************
917 //
937 //
938 //*****************************************************************************
939 extern uint8_t I2C_masterIsStopSent(uint32_t moduleInstance);
940 
941 //*****************************************************************************
942 //
961 //
962 //*****************************************************************************
963 extern bool I2C_masterIsStartSent(uint32_t moduleInstance);
964 
965 //*****************************************************************************
966 //
985 //
986 //*****************************************************************************
987 extern void I2C_masterSendStart(uint32_t moduleInstance);
988 
989 //*****************************************************************************
990 //
1011 //
1012 //*****************************************************************************
1013 extern void I2C_enableMultiMasterMode(uint32_t moduleInstance);
1014 
1015 //*****************************************************************************
1016 //
1037 //
1038 //*****************************************************************************
1039 extern void I2C_disableMultiMasterMode(uint32_t moduleInstance);
1040 
1041 //*****************************************************************************
1042 //
1084 //
1085 //*****************************************************************************
1086 extern void I2C_enableInterrupt(uint32_t moduleInstance, uint_fast16_t mask);
1087 
1088 //*****************************************************************************
1089 //
1131 //
1132 //*****************************************************************************
1133 extern void I2C_disableInterrupt(uint32_t moduleInstance, uint_fast16_t mask);
1134 
1135 //*****************************************************************************
1136 //
1161 //
1162 //*****************************************************************************
1163 extern void I2C_clearInterruptFlag(uint32_t moduleInstance, uint_fast16_t mask);
1164 
1165 //*****************************************************************************
1166 //
1216 //
1217 //*****************************************************************************
1218 uint_fast16_t I2C_getInterruptStatus(uint32_t moduleInstance, uint16_t mask);
1219 
1220 //*****************************************************************************
1221 //
1253 //
1254 //*****************************************************************************
1255 extern uint_fast16_t I2C_getEnabledInterruptStatus(uint32_t moduleInstance);
1256 
1257 //*****************************************************************************
1258 //
1284 //
1285 //*****************************************************************************
1286 extern void I2C_registerInterrupt(uint32_t moduleInstance,
1287  void (*intHandler)(void));
1288 
1289 //*****************************************************************************
1290 //
1311 //
1312 //*****************************************************************************
1313 extern void I2C_unregisterInterrupt(uint32_t moduleInstance);
1314 
1315 /* Backwards Compatibility Layer */
1316 #define EUSCI_B_I2C_slaveInit I2C_initSlave
1317 #define EUSCI_B_I2C_enable I2C_enableModule
1318 #define EUSCI_B_I2C_disable I2C_disableModule
1319 #define EUSCI_B_I2C_setSlaveAddress I2C_setSlaveAddress
1320 #define EUSCI_B_I2C_setMode I2C_setMode
1321 #define EUSCI_B_I2C_getMode I2C_getMode
1322 #define EUSCI_B_I2C_slaveDataPut I2C_slavePutData
1323 #define EUSCI_B_I2C_slaveDataGet I2C_slaveGetData
1324 #define EUSCI_B_I2C_isBusBusy I2C_isBusBusy
1325 #define EUSCI_B_I2C_masterIsStopSent I2C_masterIsStopSent
1326 #define EUSCI_B_I2C_masterIsStartSent I2C_masterIsStartSent
1327 #define EUSCI_B_I2C_enableInterrupt I2C_enableInterrupt
1328 #define EUSCI_B_I2C_disableInterrupt I2C_disableInterrupt
1329 #define EUSCI_B_I2C_clearInterruptFlag I2C_clearInterruptFlag
1330 #define EUSCI_B_I2C_getInterruptStatus I2C_getEnabledInterruptStatus
1331 #define EUSCI_B_I2C_masterSendSingleByte I2C_masterSendSingleByte
1332 #define EUSCI_B_I2C_masterReceiveSingleByte I2C_masterReceiveSingleByte
1333 #define EUSCI_B_I2C_masterSendSingleByteWithTimeout I2C_masterSendSingleByteWithTimeout
1334 #define EUSCI_B_I2C_masterMultiByteSendStart I2C_masterSendMultiByteStart
1335 #define EUSCI_B_I2C_masterMultiByteSendStartWithTimeout I2C_masterSendMultiByteStartWithTimeout
1336 #define EUSCI_B_I2C_masterMultiByteSendNext I2C_masterSendMultiByteNext
1337 #define EUSCI_B_I2C_masterMultiByteSendNextWithTimeout I2C_masterSendMultiByteNextWithTimeout
1338 #define EUSCI_B_I2C_masterMultiByteSendFinish I2C_masterSendMultiByteFinish
1339 #define EUSCI_B_I2C_masterMultiByteSendFinishWithTimeout I2C_masterSendMultiByteFinishWithTimeout
1340 #define EUSCI_B_I2C_masterSendStart I2C_masterSendStart
1341 #define EUSCI_B_I2C_masterMultiByteSendStop I2C_masterSendMultiByteStop
1342 #define EUSCI_B_I2C_masterMultiByteSendStopWithTimeout I2C_masterSendMultiByteStopWithTimeout
1343 #define EUSCI_B_I2C_masterReceiveStart I2C_masterReceiveStart
1344 #define EUSCI_B_I2C_masterMultiByteReceiveNext I2C_masterReceiveMultiByteNext
1345 #define EUSCI_B_I2C_masterMultiByteReceiveFinish I2C_masterReceiveMultiByteFinish
1346 #define EUSCI_B_I2C_masterMultiByteReceiveFinishWithTimeout I2C_masterReceiveMultiByteFinishWithTimeout
1347 #define EUSCI_B_I2C_masterMultiByteReceiveStop I2C_masterReceiveMultiByteStop
1348 #define EUSCI_B_I2C_enableMultiMasterMode I2C_enableMultiMasterMode
1349 #define EUSCI_B_I2C_disableMultiMasterMode I2C_disableMultiMasterMode
1350 #define EUSCI_B_I2C_masterSingleReceive I2C_masterReceiveSingle
1351 #define EUSCI_B_I2C_getReceiveBufferAddressForDMA I2C_getReceiveBufferAddressForDMA
1352 #define EUSCI_B_I2C_getTransmitBufferAddressForDMA I2C_getTransmitBufferAddressForDMA
1353 
1354 
1355 //*****************************************************************************
1356 //
1357 // Mark the end of the C bindings section for C++ compilers.
1358 //
1359 //*****************************************************************************
1360 #ifdef __cplusplus
1361 }
1362 #endif
1363 
1364 //*****************************************************************************
1365 //
1366 // Close the Doxygen group.
1368 //
1369 //*****************************************************************************
1370 
1371 #endif /* I2C_H_ */
1372 
bool I2C_masterSendMultiByteFinishWithTimeout(uint32_t moduleInstance, uint8_t txData, uint32_t timeout)
Definition: i2c.c:343
bool I2C_masterSendMultiByteStartWithTimeout(uint32_t moduleInstance, uint8_t txData, uint32_t timeout)
Definition: i2c.c:248
void I2C_setMode(uint32_t moduleInstance, uint_fast8_t mode)
Definition: i2c.c:99
uint8_t I2C_masterReceiveSingleByte(uint32_t moduleInstance)
Definition: i2c.c:111
void I2C_disableInterrupt(uint32_t moduleInstance, uint_fast16_t mask)
Definition: i2c.c:567
bool I2C_masterSendMultiByteStopWithTimeout(uint32_t moduleInstance, uint32_t timeout)
Definition: i2c.c:396
void I2C_masterReceiveMultiByteStop(uint32_t moduleInstance)
Definition: i2c.c:485
uint8_t I2C_masterReceiveMultiByteFinish(uint32_t moduleInstance)
Definition: i2c.c:432
uint8_t I2C_masterReceiveSingle(uint32_t moduleInstance)
Definition: i2c.c:491
uint32_t i2cClk
Definition: i2c.h:87
void I2C_initMaster(uint32_t moduleInstance, const I2C_MasterConfig *config)
Definition: i2c.c:5
uint8_t I2C_isBusBusy(uint32_t moduleInstance)
Definition: i2c.c:139
uint32_t dataRate
Definition: i2c.h:88
uint32_t I2C_getTransmitBufferAddressForDMA(uint32_t moduleInstance)
Definition: i2c.c:510
bool I2C_masterIsStartSent(uint32_t moduleInstance)
Definition: i2c.c:520
uint8_t I2C_masterIsStopSent(uint32_t moduleInstance)
Definition: i2c.c:515
bool I2C_masterSendSingleByteWithTimeout(uint32_t moduleInstance, uint8_t txData, uint32_t timeout)
Definition: i2c.c:177
uint_fast8_t byteCounterThreshold
Definition: i2c.h:89
bool I2C_masterSendMultiByteNextWithTimeout(uint32_t moduleInstance, uint8_t txData, uint32_t timeout)
Definition: i2c.c:297
uint_fast16_t I2C_getEnabledInterruptStatus(uint32_t moduleInstance)
Definition: i2c.c:640
void I2C_masterSendMultiByteStart(uint32_t moduleInstance, uint8_t txData)
Definition: i2c.c:226
uint_fast8_t autoSTOPGeneration
Definition: i2c.h:90
bool I2C_masterReceiveMultiByteFinishWithTimeout(uint32_t moduleInstance, uint8_t *txData, uint32_t timeout)
Definition: i2c.c:450
void I2C_registerInterrupt(uint32_t moduleInstance, void(*intHandler)(void))
Definition: i2c.c:652
void I2C_slavePutData(uint32_t moduleInstance, uint8_t transmitData)
Definition: i2c.c:127
uint_fast8_t I2C_getMode(uint32_t moduleInstance)
Gets the mode of the I2C device.
Definition: i2c.c:646
void I2C_masterReceiveStart(uint32_t moduleInstance)
Definition: i2c.c:420
uint8_t I2C_masterReceiveMultiByteNext(uint32_t moduleInstance)
Definition: i2c.c:427
uint_fast16_t I2C_getInterruptStatus(uint32_t moduleInstance, uint16_t mask)
Definition: i2c.c:616
void I2C_masterSendMultiByteNext(uint32_t moduleInstance, uint8_t txData)
Definition: i2c.c:282
uint_fast8_t selectClockSource
Definition: i2c.h:86
void I2C_initSlave(uint32_t moduleInstance, uint_fast16_t slaveAddress, uint_fast8_t slaveAddressOffset, uint32_t slaveOwnAddressEnable)
Definition: i2c.c:58
void I2C_clearInterruptFlag(uint32_t moduleInstance, uint_fast16_t mask)
Definition: i2c.c:592
void I2C_masterSendMultiByteFinish(uint32_t moduleInstance, uint8_t txData)
Definition: i2c.c:321
void I2C_masterSendSingleByte(uint32_t moduleInstance, uint8_t txData)
Definition: i2c.c:145
void I2C_unregisterInterrupt(uint32_t moduleInstance)
Definition: i2c.c:681
void I2C_enableMultiMasterMode(uint32_t moduleInstance)
Definition: i2c.c:530
uint32_t I2C_getReceiveBufferAddressForDMA(uint32_t moduleInstance)
Definition: i2c.c:505
void I2C_masterSendStart(uint32_t moduleInstance)
Definition: i2c.c:525
void I2C_enableInterrupt(uint32_t moduleInstance, uint_fast16_t mask)
Definition: i2c.c:542
uint8_t I2C_slaveGetData(uint32_t moduleInstance)
Definition: i2c.c:133
void I2C_masterSendMultiByteStop(uint32_t moduleInstance)
Definition: i2c.c:381
void I2C_setSlaveAddress(uint32_t moduleInstance, uint_fast16_t slaveAddress)
Definition: i2c.c:93
Definition: i2c.h:84
void I2C_disableModule(uint32_t moduleInstance)
Definition: i2c.c:86
void I2C_disableMultiMasterMode(uint32_t moduleInstance)
Definition: i2c.c:536
void I2C_enableModule(uint32_t moduleInstance)
Definition: i2c.c:80

Copyright 2014, Texas Instruments Incorporated