Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependents: NUCLEO-F030R8_ExtXtalTest
Fork of mbed-src by
Diff: common/I2C.cpp
- Revision:
- 525:c320967f86b9
- Parent:
- 212:34d62c0b2af6
- Child:
- 563:536c9fb088a0
--- a/common/I2C.cpp Mon Apr 27 09:45:08 2015 +0100
+++ b/common/I2C.cpp Tue Apr 28 11:45:12 2015 +0100
@@ -1,5 +1,5 @@
/* mbed Microcontroller Library
- * Copyright (c) 2006-2013 ARM Limited
+ * Copyright (c) 2006-2015 ARM Limited
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -21,7 +21,11 @@
I2C *I2C::_owner = NULL;
-I2C::I2C(PinName sda, PinName scl) : _i2c(), _hz(100000) {
+I2C::I2C(PinName sda, PinName scl) :
+#if DEVICE_I2C_ASYNCH
+ _irq(this), _usage(DMA_USAGE_NEVER),
+#endif
+ _i2c(), _hz(100000) {
// The init function also set the frequency to 100000
i2c_init(&_i2c, sda, scl);
@@ -86,6 +90,39 @@
i2c_stop(&_i2c);
}
+#if DEVICE_I2C_ASYNCH
+
+int I2C::transfer(int address, char *tx_buffer, int tx_length, char *rx_buffer, int rx_length, const event_callback_t& callback, int event, bool repeated)
+{
+ if (i2c_active(&_i2c)) {
+ return -1; // transaction ongoing
+ }
+ aquire();
+
+ _callback = callback;
+ int stop = (repeated) ? 0 : 1;
+ _irq.callback(&I2C::irq_handler_asynch);
+ i2c_transfer_asynch(&_i2c, (void *)tx_buffer, tx_length, (void *)rx_buffer, rx_length, address, stop, _irq.entry(), event, _usage);
+ return 0;
+}
+
+void I2C::abort_transfer(void)
+{
+ i2c_abort_asynch(&_i2c);
+}
+
+void I2C::irq_handler_asynch(void)
+{
+ int event = i2c_irq_handler_asynch(&_i2c);
+ if (_callback && event) {
+ _callback.call(event);
+ }
+
+}
+
+
+#endif
+
} // namespace mbed
#endif
