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 <stdbool.h>
24 #include <msp.h>
25 #include "eusci.h"
26 
27 #define EUSCI_B_I2C_NO_AUTO_STOP EUSCI_B_CTLW1_ASTP_0
28 #define EUSCI_B_I2C_SET_BYTECOUNT_THRESHOLD_FLAG EUSCI_B_CTLW1_ASTP_1
29 #define EUSCI_B_I2C_SEND_STOP_AUTOMATICALLY_ON_BYTECOUNT_THRESHOLD \
30  EUSCI_B_CTLW1_ASTP_2
31 
32 #define EUSCI_B_I2C_SET_DATA_RATE_1MBPS 1000000
33 #define EUSCI_B_I2C_SET_DATA_RATE_400KBPS 400000
34 #define EUSCI_B_I2C_SET_DATA_RATE_100KBPS 100000
35 
36 #define EUSCI_B_I2C_CLOCKSOURCE_ACLK EUSCI_B_CTLW0_SSEL__ACLK
37 #define EUSCI_B_I2C_CLOCKSOURCE_SMCLK EUSCI_B_CTLW0_SSEL__SMCLK
38 
39 #define EUSCI_B_I2C_OWN_ADDRESS_OFFSET0 0x00
40 #define EUSCI_B_I2C_OWN_ADDRESS_OFFSET1 0x02
41 #define EUSCI_B_I2C_OWN_ADDRESS_OFFSET2 0x04
42 #define EUSCI_B_I2C_OWN_ADDRESS_OFFSET3 0x06
43 
44 #define EUSCI_B_I2C_OWN_ADDRESS_DISABLE 0x00
45 #define EUSCI_B_I2C_OWN_ADDRESS_ENABLE EUSCI_B_I2COA0_OAEN
46 
47 #define EUSCI_B_I2C_TRANSMIT_MODE EUSCI_B_CTLW0_TR
48 #define EUSCI_B_I2C_RECEIVE_MODE 0x00
49 
50 #define EUSCI_B_I2C_NAK_INTERRUPT EUSCI_B_IE_NACKIE
51 #define EUSCI_B_I2C_ARBITRATIONLOST_INTERRUPT EUSCI_B_IE_ALIE
52 #define EUSCI_B_I2C_STOP_INTERRUPT EUSCI_B_IE_STPIE
53 #define EUSCI_B_I2C_START_INTERRUPT EUSCI_B_IE_STTIE
54 #define EUSCI_B_I2C_TRANSMIT_INTERRUPT0 EUSCI_B_IE_TXIE0
55 #define EUSCI_B_I2C_TRANSMIT_INTERRUPT1 EUSCI_B_IE_TXIE1
56 #define EUSCI_B_I2C_TRANSMIT_INTERRUPT2 EUSCI_B_IE_TXIE2
57 #define EUSCI_B_I2C_TRANSMIT_INTERRUPT3 EUSCI_B_IE_TXIE3
58 #define EUSCI_B_I2C_RECEIVE_INTERRUPT0 EUSCI_B_IE_RXIE0
59 #define EUSCI_B_I2C_RECEIVE_INTERRUPT1 EUSCI_B_IE_RXIE1
60 #define EUSCI_B_I2C_RECEIVE_INTERRUPT2 EUSCI_B_IE_RXIE2
61 #define EUSCI_B_I2C_RECEIVE_INTERRUPT3 EUSCI_B_IE_RXIE3
62 #define EUSCI_B_I2C_BIT9_POSITION_INTERRUPT EUSCI_B_IE_BIT9IE
63 #define EUSCI_B_I2C_CLOCK_LOW_TIMEOUT_INTERRUPT EUSCI_B_IE_CLTOIE
64 #define EUSCI_B_I2C_BYTE_COUNTER_INTERRUPT EUSCI_B_IE_BCNTIE
65 
66 #define EUSCI_B_I2C_BUS_BUSY EUSCI_B_STATW_BBUSY
67 #define EUSCI_B_I2C_BUS_NOT_BUSY 0x00
68 
69 #define EUSCI_B_I2C_STOP_SEND_COMPLETE 0x00
70 #define EUSCI_B_I2C_SENDING_STOP EUSCI_B_CTLW0_TXSTP
71 
72 #define EUSCI_B_I2C_START_SEND_COMPLETE 0x00
73 #define EUSCI_B_I2C_SENDING_START EUSCI_B_CTLW0_TXSTT
74 
75 //*****************************************************************************
76 //
83 //
84 //*****************************************************************************
85 typedef struct
86 {
87  uint_fast8_t selectClockSource;
88  uint32_t i2cClk;
89  uint32_t dataRate;
90  uint_fast8_t byteCounterThreshold;
91  uint_fast8_t autoSTOPGeneration;
93 
94 
95 //*****************************************************************************
96 //
142 //
143 //*****************************************************************************
144 extern void I2C_initMaster(uint32_t moduleInstance,
145  const eUSCI_I2C_MasterConfig *config);
146 
147 //*****************************************************************************
148 //
186 //
187 //*****************************************************************************
188 extern void I2C_initSlave(uint32_t moduleInstance, uint_fast16_t slaveAddress,
189  uint_fast8_t slaveAddressOffset, uint32_t slaveOwnAddressEnable);
190 
191 //*****************************************************************************
192 //
209 //
210 //*****************************************************************************
211 extern void I2C_enableModule(uint32_t moduleInstance);
212 
213 //*****************************************************************************
214 //
231 //
232 //*****************************************************************************
233 extern void I2C_disableModule(uint32_t moduleInstance);
234 
235 //*****************************************************************************
236 //
256 //
257 //*****************************************************************************
258 extern void I2C_setSlaveAddress(uint32_t moduleInstance,
259  uint_fast16_t slaveAddress);
260 
261 //*****************************************************************************
262 //
282 //
283 //*****************************************************************************
284 extern void I2C_setMode(uint32_t moduleInstance, uint_fast8_t mode);
285 
286 //*****************************************************************************
287 //
309 //
310 //*****************************************************************************
311 extern uint_fast8_t I2C_getMode(uint32_t moduleInstance);
312 
313 //*****************************************************************************
314 //
334 //
335 //*****************************************************************************
336 extern void I2C_slavePutData(uint32_t moduleInstance, uint8_t transmitData);
337 
338 //*****************************************************************************
339 //
357 //
358 //*****************************************************************************
359 extern uint8_t I2C_slaveGetData(uint32_t moduleInstance);
360 
361 //*****************************************************************************
362 //
382 //
383 //*****************************************************************************
384 extern uint8_t I2C_isBusBusy(uint32_t moduleInstance);
385 
386 //*****************************************************************************
387 //
412 //
413 //*****************************************************************************
414 extern void I2C_masterSendSingleByte(uint32_t moduleInstance, uint8_t txData);
415 
416 //*****************************************************************************
417 //
443 //
444 //*****************************************************************************
445 extern bool I2C_masterSendSingleByteWithTimeout(uint32_t moduleInstance,
446  uint8_t txData, uint32_t timeout);
447 
448 //*****************************************************************************
449 //
473 //
474 //*****************************************************************************
475 extern void I2C_masterSendMultiByteStart(uint32_t moduleInstance,
476  uint8_t txData);
477 
478 //*****************************************************************************
479 //
504 //
505 //*****************************************************************************
506 extern bool I2C_masterSendMultiByteStartWithTimeout(uint32_t moduleInstance,
507  uint8_t txData, uint32_t timeout);
508 
509 //*****************************************************************************
510 //
532 //
533 //*****************************************************************************
534 extern void I2C_masterSendMultiByteNext(uint32_t moduleInstance,
535  uint8_t txData);
536 
537 //*****************************************************************************
538 //
562 //
563 //*****************************************************************************
564 extern bool I2C_masterSendMultiByteNextWithTimeout(uint32_t moduleInstance,
565  uint8_t txData, uint32_t timeout);
566 
567 //*****************************************************************************
568 //
592 //
593 //*****************************************************************************
594 extern void I2C_masterSendMultiByteFinish(uint32_t moduleInstance,
595  uint8_t txData);
596 
597 //*****************************************************************************
598 //
623 //
624 //*****************************************************************************
625 extern bool I2C_masterSendMultiByteFinishWithTimeout(uint32_t moduleInstance,
626  uint8_t txData, uint32_t timeout);
627 
628 //*****************************************************************************
629 //
651 //
652 //*****************************************************************************
653 extern void I2C_masterSendMultiByteStop(uint32_t moduleInstance);
654 
655 //*****************************************************************************
656 //
680 //
681 //*****************************************************************************
682 extern bool I2C_masterSendMultiByteStopWithTimeout(uint32_t moduleInstance,
683  uint32_t timeout);
684 
685 //*****************************************************************************
686 //
706 //
707 //*****************************************************************************
708 extern void I2C_masterReceiveStart(uint32_t moduleInstance);
709 
710 //*****************************************************************************
711 //
731 //
732 //*****************************************************************************
733 extern uint8_t I2C_masterReceiveMultiByteNext(uint32_t moduleInstance);
734 
735 //*****************************************************************************
736 //
758 //
759 //*****************************************************************************
760 extern uint8_t I2C_masterReceiveMultiByteFinish(uint32_t moduleInstance);
761 
762 //*****************************************************************************
763 //
788 //
789 //*****************************************************************************
790 extern bool I2C_masterReceiveMultiByteFinishWithTimeout(uint32_t moduleInstance,
791  uint8_t *txData, uint32_t timeout);
792 
793 //*****************************************************************************
794 //
813 //
814 //*****************************************************************************
815 extern void I2C_masterReceiveMultiByteStop(uint32_t moduleInstance);
816 
817 //*****************************************************************************
818 //
841 //
842 //*****************************************************************************
843 extern uint8_t I2C_masterReceiveSingleByte(uint32_t moduleInstance);
844 
845 //*****************************************************************************
846 //
864 //
865 //*****************************************************************************
866 extern uint8_t I2C_masterReceiveSingle(uint32_t moduleInstance);
867 
868 //*****************************************************************************
869 //
887 //
888 //*****************************************************************************
889 extern uint32_t I2C_getReceiveBufferAddressForDMA(uint32_t moduleInstance);
890 
891 //*****************************************************************************
892 //
910 //
911 //*****************************************************************************
912 extern uint32_t I2C_getTransmitBufferAddressForDMA(uint32_t moduleInstance);
913 
914 //*****************************************************************************
915 //
935 //
936 //*****************************************************************************
937 extern uint8_t I2C_masterIsStopSent(uint32_t moduleInstance);
938 
939 //*****************************************************************************
940 //
959 //
960 //*****************************************************************************
961 extern bool I2C_masterIsStartSent(uint32_t moduleInstance);
962 
963 //*****************************************************************************
964 //
983 //
984 //*****************************************************************************
985 extern void I2C_masterSendStart(uint32_t moduleInstance);
986 
987 //*****************************************************************************
988 //
1009 //
1010 //*****************************************************************************
1011 extern void I2C_enableMultiMasterMode(uint32_t moduleInstance);
1012 
1013 //*****************************************************************************
1014 //
1035 //
1036 //*****************************************************************************
1037 extern void I2C_disableMultiMasterMode(uint32_t moduleInstance);
1038 
1039 //*****************************************************************************
1040 //
1082 //
1083 //*****************************************************************************
1084 extern void I2C_enableInterrupt(uint32_t moduleInstance, uint_fast16_t mask);
1085 
1086 //*****************************************************************************
1087 //
1129 //
1130 //*****************************************************************************
1131 extern void I2C_disableInterrupt(uint32_t moduleInstance, uint_fast16_t mask);
1132 
1133 //*****************************************************************************
1134 //
1159 //
1160 //*****************************************************************************
1161 extern void I2C_clearInterruptFlag(uint32_t moduleInstance, uint_fast16_t mask);
1162 
1163 //*****************************************************************************
1164 //
1214 //
1215 //*****************************************************************************
1216 extern uint_fast16_t I2C_getInterruptStatus(uint32_t moduleInstance, uint16_t mask);
1217 
1218 //*****************************************************************************
1219 //
1251 //
1252 //*****************************************************************************
1253 extern uint_fast16_t I2C_getEnabledInterruptStatus(uint32_t moduleInstance);
1254 
1255 //*****************************************************************************
1256 //
1282 //
1283 //*****************************************************************************
1284 extern void I2C_registerInterrupt(uint32_t moduleInstance,
1285  void (*intHandler)(void));
1286 
1287 //*****************************************************************************
1288 //
1309 //
1310 //*****************************************************************************
1311 extern void I2C_unregisterInterrupt(uint32_t moduleInstance);
1312 
1313 
1314 //*****************************************************************************
1315 //
1329 //
1330 //*****************************************************************************
1331 extern void I2C_slaveSendNAK(uint32_t moduleInstance);
1332 
1333 /* Backwards Compatibility Layer */
1334 #define EUSCI_B_I2C_slaveInit I2C_initSlave
1335 #define EUSCI_B_I2C_enable I2C_enableModule
1336 #define EUSCI_B_I2C_disable I2C_disableModule
1337 #define EUSCI_B_I2C_setSlaveAddress I2C_setSlaveAddress
1338 #define EUSCI_B_I2C_setMode I2C_setMode
1339 #define EUSCI_B_I2C_getMode I2C_getMode
1340 #define EUSCI_B_I2C_slaveDataPut I2C_slavePutData
1341 #define EUSCI_B_I2C_slaveDataGet I2C_slaveGetData
1342 #define EUSCI_B_I2C_isBusBusy I2C_isBusBusy
1343 #define EUSCI_B_I2C_masterIsStopSent I2C_masterIsStopSent
1344 #define EUSCI_B_I2C_masterIsStartSent I2C_masterIsStartSent
1345 #define EUSCI_B_I2C_enableInterrupt I2C_enableInterrupt
1346 #define EUSCI_B_I2C_disableInterrupt I2C_disableInterrupt
1347 #define EUSCI_B_I2C_clearInterruptFlag I2C_clearInterruptFlag
1348 #define EUSCI_B_I2C_getInterruptStatus I2C_getEnabledInterruptStatus
1349 #define EUSCI_B_I2C_masterSendSingleByte I2C_masterSendSingleByte
1350 #define EUSCI_B_I2C_masterReceiveSingleByte I2C_masterReceiveSingleByte
1351 #define EUSCI_B_I2C_masterSendSingleByteWithTimeout I2C_masterSendSingleByteWithTimeout
1352 #define EUSCI_B_I2C_masterMultiByteSendStart I2C_masterSendMultiByteStart
1353 #define EUSCI_B_I2C_masterMultiByteSendStartWithTimeout I2C_masterSendMultiByteStartWithTimeout
1354 #define EUSCI_B_I2C_masterMultiByteSendNext I2C_masterSendMultiByteNext
1355 #define EUSCI_B_I2C_masterMultiByteSendNextWithTimeout I2C_masterSendMultiByteNextWithTimeout
1356 #define EUSCI_B_I2C_masterMultiByteSendFinish I2C_masterSendMultiByteFinish
1357 #define EUSCI_B_I2C_masterMultiByteSendFinishWithTimeout I2C_masterSendMultiByteFinishWithTimeout
1358 #define EUSCI_B_I2C_masterSendStart I2C_masterSendStart
1359 #define EUSCI_B_I2C_masterMultiByteSendStop I2C_masterSendMultiByteStop
1360 #define EUSCI_B_I2C_masterMultiByteSendStopWithTimeout I2C_masterSendMultiByteStopWithTimeout
1361 #define EUSCI_B_I2C_masterReceiveStart I2C_masterReceiveStart
1362 #define EUSCI_B_I2C_masterMultiByteReceiveNext I2C_masterReceiveMultiByteNext
1363 #define EUSCI_B_I2C_masterMultiByteReceiveFinish I2C_masterReceiveMultiByteFinish
1364 #define EUSCI_B_I2C_masterMultiByteReceiveFinishWithTimeout I2C_masterReceiveMultiByteFinishWithTimeout
1365 #define EUSCI_B_I2C_masterMultiByteReceiveStop I2C_masterReceiveMultiByteStop
1366 #define EUSCI_B_I2C_enableMultiMasterMode I2C_enableMultiMasterMode
1367 #define EUSCI_B_I2C_disableMultiMasterMode I2C_disableMultiMasterMode
1368 #define EUSCI_B_I2C_masterSingleReceive I2C_masterReceiveSingle
1369 #define EUSCI_B_I2C_getReceiveBufferAddressForDMA I2C_getReceiveBufferAddressForDMA
1370 #define EUSCI_B_I2C_getTransmitBufferAddressForDMA I2C_getTransmitBufferAddressForDMA
1371 
1372 
1373 //*****************************************************************************
1374 //
1375 // Mark the end of the C bindings section for C++ compilers.
1376 //
1377 //*****************************************************************************
1378 #ifdef __cplusplus
1379 }
1380 #endif
1381 
1382 //*****************************************************************************
1383 //
1384 // Close the Doxygen group.
1386 //
1387 //*****************************************************************************
1388 
1389 #endif /* I2C_H_ */
1390 
void I2C_slaveSendNAK(uint32_t moduleInstance)
Definition: i2c.c:725
bool I2C_masterSendMultiByteFinishWithTimeout(uint32_t moduleInstance, uint8_t txData, uint32_t timeout)
Definition: i2c.c:351
bool I2C_masterSendMultiByteStartWithTimeout(uint32_t moduleInstance, uint8_t txData, uint32_t timeout)
Definition: i2c.c:256
void I2C_setMode(uint32_t moduleInstance, uint_fast8_t mode)
Definition: i2c.c:106
uint8_t I2C_masterReceiveSingleByte(uint32_t moduleInstance)
Definition: i2c.c:118
void I2C_disableInterrupt(uint32_t moduleInstance, uint_fast16_t mask)
Definition: i2c.c:582
uint32_t dataRate
Definition: i2c.h:89
bool I2C_masterSendMultiByteStopWithTimeout(uint32_t moduleInstance, uint32_t timeout)
Definition: i2c.c:404
void I2C_masterReceiveMultiByteStop(uint32_t moduleInstance)
Definition: i2c.c:495
uint8_t I2C_masterReceiveMultiByteFinish(uint32_t moduleInstance)
Definition: i2c.c:441
uint8_t I2C_masterReceiveSingle(uint32_t moduleInstance)
Definition: i2c.c:501
uint_fast8_t byteCounterThreshold
Definition: i2c.h:90
uint8_t I2C_isBusBusy(uint32_t moduleInstance)
Definition: i2c.c:146
uint32_t I2C_getTransmitBufferAddressForDMA(uint32_t moduleInstance)
Definition: i2c.c:520
uint_fast8_t autoSTOPGeneration
Definition: i2c.h:91
bool I2C_masterIsStartSent(uint32_t moduleInstance)
Definition: i2c.c:531
uint8_t I2C_masterIsStopSent(uint32_t moduleInstance)
Definition: i2c.c:525
bool I2C_masterSendSingleByteWithTimeout(uint32_t moduleInstance, uint8_t txData, uint32_t timeout)
Definition: i2c.c:185
bool I2C_masterSendMultiByteNextWithTimeout(uint32_t moduleInstance, uint8_t txData, uint32_t timeout)
Definition: i2c.c:305
uint_fast16_t I2C_getEnabledInterruptStatus(uint32_t moduleInstance)
Definition: i2c.c:655
void I2C_masterSendMultiByteStart(uint32_t moduleInstance, uint8_t txData)
Definition: i2c.c:234
bool I2C_masterReceiveMultiByteFinishWithTimeout(uint32_t moduleInstance, uint8_t *txData, uint32_t timeout)
Definition: i2c.c:460
void I2C_registerInterrupt(uint32_t moduleInstance, void(*intHandler)(void))
Definition: i2c.c:667
void I2C_slavePutData(uint32_t moduleInstance, uint8_t transmitData)
Definition: i2c.c:134
uint_fast8_t I2C_getMode(uint32_t moduleInstance)
Gets the mode of the I2C device.
Definition: i2c.c:661
void I2C_masterReceiveStart(uint32_t moduleInstance)
Definition: i2c.c:428
uint8_t I2C_masterReceiveMultiByteNext(uint32_t moduleInstance)
Definition: i2c.c:436
void I2C_initMaster(uint32_t moduleInstance, const eUSCI_I2C_MasterConfig *config)
Definition: i2c.c:6
uint_fast16_t I2C_getInterruptStatus(uint32_t moduleInstance, uint16_t mask)
Definition: i2c.c:631
void I2C_masterSendMultiByteNext(uint32_t moduleInstance, uint8_t txData)
Definition: i2c.c:290
void I2C_initSlave(uint32_t moduleInstance, uint_fast16_t slaveAddress, uint_fast8_t slaveAddressOffset, uint32_t slaveOwnAddressEnable)
Definition: i2c.c:62
void I2C_clearInterruptFlag(uint32_t moduleInstance, uint_fast16_t mask)
Definition: i2c.c:607
void I2C_masterSendMultiByteFinish(uint32_t moduleInstance, uint8_t txData)
Definition: i2c.c:329
void I2C_masterSendSingleByte(uint32_t moduleInstance, uint8_t txData)
Definition: i2c.c:153
void I2C_unregisterInterrupt(uint32_t moduleInstance)
Definition: i2c.c:696
uint32_t i2cClk
Definition: i2c.h:88
void I2C_enableMultiMasterMode(uint32_t moduleInstance)
Definition: i2c.c:543
uint32_t I2C_getReceiveBufferAddressForDMA(uint32_t moduleInstance)
Definition: i2c.c:515
void I2C_masterSendStart(uint32_t moduleInstance)
Definition: i2c.c:537
void I2C_enableInterrupt(uint32_t moduleInstance, uint_fast16_t mask)
Definition: i2c.c:557
uint8_t I2C_slaveGetData(uint32_t moduleInstance)
Definition: i2c.c:140
Definition: i2c.h:85
void I2C_masterSendMultiByteStop(uint32_t moduleInstance)
Definition: i2c.c:389
void I2C_setSlaveAddress(uint32_t moduleInstance, uint_fast16_t slaveAddress)
Definition: i2c.c:100
void I2C_disableModule(uint32_t moduleInstance)
Definition: i2c.c:92
void I2C_disableMultiMasterMode(uint32_t moduleInstance)
Definition: i2c.c:550
uint_fast8_t selectClockSource
Definition: i2c.h:87
void I2C_enableModule(uint32_t moduleInstance)
Definition: i2c.c:85

Copyright 2016, Texas Instruments Incorporated