13uint32_t I2C_CLK = SystemCoreClock;
14extern uint32_t SubsystemMasterClock
__attribute__((weak,alias(
"I2C_CLK")));
18: _initialized(false), _EUSCI(mod), _mode(mode)
23 _sda.setGpio (PORT_PIN(1, 6));
24 _scl.setGpio (PORT_PIN(1, 7));
25 }
else if (mod==EUSCI_B1) {
26 _sda.setGpio (PORT_PIN(6, 4));
27 _scl.setGpio (PORT_PIN(6, 5));
28 }
else if (mod==EUSCI_B2) {
29 _sda.setGpio (PORT_PIN(3, 6));
30 _scl.setGpio (PORT_PIN(3, 7));
31 }
else if (mod==EUSCI_B3) {
32 _sda.setGpio (PORT_PIN(10, 2));
33 _scl.setGpio (PORT_PIN(10, 3));
39i2c_msp432::~i2c_msp432() {
51 _sda.setSEL(0); _sda.setMode(GPIO::INPUT);
52 _scl.setSEL(0); _scl.setMode(GPIO::INPUT);
55void i2c_msp432::initialize() {
68 _EUSCI->
BRW = SubsystemMasterClock / 100000;
76 _sda.setMode(GPIO::INPUT | GPIO::PULLUP); _sda.setSEL(1);
77 _scl.setMode(GPIO::INPUT | GPIO::PULLUP); _scl.setSEL(1);
81 _EUSCI->
CTLW0 &= ~EUSCI_B_CTLW0_SWRST;
88int16_t i2c_msp432::i2cRead (uint16_t addr, uint8_t *rxbuf, uint16_t len,
bool sendStop) {
89 if (!_initialized) initialize();
94 int16_t i = _EUSCI->
RXBUF;
99 for (i=0; i < len; ++i) {
102 if (sendStop) send_STOP();
109 if (sendStop) send_STOP();
113 rxbuf[i] = _EUSCI->
RXBUF;
118int16_t i2c_msp432::i2cWrite(uint16_t addr, uint8_t *txbuf, uint16_t len,
bool sendStop) {
119 if (!_initialized) initialize();
125 _EUSCI->
I2CSA = addr;
129 for (i=0; i < len; ++i) {
131 _EUSCI->
TXBUF = txbuf[i];
136 if (sendStop) send_STOP();
140 if (sendStop) send_STOP();
144void i2c_msp432::setSpeed(uint32_t baud) {
145 if (!_initialized) initialize();
146 _EUSCI->
BRW = SubsystemMasterClock / baud;
157void i2c_msp432::set_receiver() {
158 _EUSCI->
CTLW0 &= ~EUSCI_B_CTLW0_TR;
161void i2c_msp432::set_transmitter() {
173void i2c_msp432::send_START() {
179void i2c_msp432::send_STOP() {
#define EUSCI_B_CTLW0_MODE_3
#define EUSCI_B_STATW_BBUSY
#define EUSCI_B_CTLW0_TXSTP
#define EUSCI_B_IFG_TXIFG0
#define EUSCI_B_CTLW0_TXSTT
#define EUSCI_B_IFG_NACKIFG
#define EUSCI_B_CTLW0_SWRST
#define EUSCI_B_IFG_RXIFG0
void __attribute__((noreturn))(*rom_reset_usb_boot_fn)(uint32_t
Reboot the device into BOOTSEL mode.