5.2.1 - Updated I2C files

Dependents:   mbed-TFT-example-NCS36510 mbed-Accelerometer-example-NCS36510 mbed-Accelerometer-example-NCS36510

Committer:
group-onsemi
Date:
Wed Jan 25 20:34:15 2017 +0000
Revision:
0:098463de4c5d
Initial commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
group-onsemi 0:098463de4c5d 1 /* mbed Microcontroller Library
group-onsemi 0:098463de4c5d 2 * Copyright (c) 2006-2013 ARM Limited
group-onsemi 0:098463de4c5d 3 *
group-onsemi 0:098463de4c5d 4 * Licensed under the Apache License, Version 2.0 (the "License");
group-onsemi 0:098463de4c5d 5 * you may not use this file except in compliance with the License.
group-onsemi 0:098463de4c5d 6 * You may obtain a copy of the License at
group-onsemi 0:098463de4c5d 7 *
group-onsemi 0:098463de4c5d 8 * http://www.apache.org/licenses/LICENSE-2.0
group-onsemi 0:098463de4c5d 9 *
group-onsemi 0:098463de4c5d 10 * Unless required by applicable law or agreed to in writing, software
group-onsemi 0:098463de4c5d 11 * distributed under the License is distributed on an "AS IS" BASIS,
group-onsemi 0:098463de4c5d 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
group-onsemi 0:098463de4c5d 13 * See the License for the specific language governing permissions and
group-onsemi 0:098463de4c5d 14 * limitations under the License.
group-onsemi 0:098463de4c5d 15 */
group-onsemi 0:098463de4c5d 16 #include "drivers/BusOut.h"
group-onsemi 0:098463de4c5d 17 #include "platform/mbed_assert.h"
group-onsemi 0:098463de4c5d 18
group-onsemi 0:098463de4c5d 19 namespace mbed {
group-onsemi 0:098463de4c5d 20
group-onsemi 0:098463de4c5d 21 BusOut::BusOut(PinName p0, PinName p1, PinName p2, PinName p3, PinName p4, PinName p5, PinName p6, PinName p7, PinName p8, PinName p9, PinName p10, PinName p11, PinName p12, PinName p13, PinName p14, PinName p15) {
group-onsemi 0:098463de4c5d 22 PinName pins[16] = {p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15};
group-onsemi 0:098463de4c5d 23
group-onsemi 0:098463de4c5d 24 // No lock needed in the constructor
group-onsemi 0:098463de4c5d 25 _nc_mask = 0;
group-onsemi 0:098463de4c5d 26 for (int i=0; i<16; i++) {
group-onsemi 0:098463de4c5d 27 _pin[i] = (pins[i] != NC) ? new DigitalOut(pins[i]) : 0;
group-onsemi 0:098463de4c5d 28 if (pins[i] != NC) {
group-onsemi 0:098463de4c5d 29 _nc_mask |= (1 << i);
group-onsemi 0:098463de4c5d 30 }
group-onsemi 0:098463de4c5d 31 }
group-onsemi 0:098463de4c5d 32 }
group-onsemi 0:098463de4c5d 33
group-onsemi 0:098463de4c5d 34 BusOut::BusOut(PinName pins[16]) {
group-onsemi 0:098463de4c5d 35 // No lock needed in the constructor
group-onsemi 0:098463de4c5d 36 _nc_mask = 0;
group-onsemi 0:098463de4c5d 37 for (int i=0; i<16; i++) {
group-onsemi 0:098463de4c5d 38 _pin[i] = (pins[i] != NC) ? new DigitalOut(pins[i]) : 0;
group-onsemi 0:098463de4c5d 39 if (pins[i] != NC) {
group-onsemi 0:098463de4c5d 40 _nc_mask |= (1 << i);
group-onsemi 0:098463de4c5d 41 }
group-onsemi 0:098463de4c5d 42 }
group-onsemi 0:098463de4c5d 43 }
group-onsemi 0:098463de4c5d 44
group-onsemi 0:098463de4c5d 45 BusOut::~BusOut() {
group-onsemi 0:098463de4c5d 46 // No lock needed in the destructor
group-onsemi 0:098463de4c5d 47 for (int i=0; i<16; i++) {
group-onsemi 0:098463de4c5d 48 if (_pin[i] != 0) {
group-onsemi 0:098463de4c5d 49 delete _pin[i];
group-onsemi 0:098463de4c5d 50 }
group-onsemi 0:098463de4c5d 51 }
group-onsemi 0:098463de4c5d 52 }
group-onsemi 0:098463de4c5d 53
group-onsemi 0:098463de4c5d 54 void BusOut::write(int value) {
group-onsemi 0:098463de4c5d 55 lock();
group-onsemi 0:098463de4c5d 56 for (int i=0; i<16; i++) {
group-onsemi 0:098463de4c5d 57 if (_pin[i] != 0) {
group-onsemi 0:098463de4c5d 58 _pin[i]->write((value >> i) & 1);
group-onsemi 0:098463de4c5d 59 }
group-onsemi 0:098463de4c5d 60 }
group-onsemi 0:098463de4c5d 61 unlock();
group-onsemi 0:098463de4c5d 62 }
group-onsemi 0:098463de4c5d 63
group-onsemi 0:098463de4c5d 64 int BusOut::read() {
group-onsemi 0:098463de4c5d 65 lock();
group-onsemi 0:098463de4c5d 66 int v = 0;
group-onsemi 0:098463de4c5d 67 for (int i=0; i<16; i++) {
group-onsemi 0:098463de4c5d 68 if (_pin[i] != 0) {
group-onsemi 0:098463de4c5d 69 v |= _pin[i]->read() << i;
group-onsemi 0:098463de4c5d 70 }
group-onsemi 0:098463de4c5d 71 }
group-onsemi 0:098463de4c5d 72 unlock();
group-onsemi 0:098463de4c5d 73 return v;
group-onsemi 0:098463de4c5d 74 }
group-onsemi 0:098463de4c5d 75
group-onsemi 0:098463de4c5d 76 BusOut& BusOut::operator= (int v) {
group-onsemi 0:098463de4c5d 77 // Underlying write is thread safe
group-onsemi 0:098463de4c5d 78 write(v);
group-onsemi 0:098463de4c5d 79 return *this;
group-onsemi 0:098463de4c5d 80 }
group-onsemi 0:098463de4c5d 81
group-onsemi 0:098463de4c5d 82 BusOut& BusOut::operator= (BusOut& rhs) {
group-onsemi 0:098463de4c5d 83 // Underlying write is thread safe
group-onsemi 0:098463de4c5d 84 write(rhs.read());
group-onsemi 0:098463de4c5d 85 return *this;
group-onsemi 0:098463de4c5d 86 }
group-onsemi 0:098463de4c5d 87
group-onsemi 0:098463de4c5d 88 DigitalOut& BusOut::operator[] (int index) {
group-onsemi 0:098463de4c5d 89 // No lock needed since _pin is not modified outside the constructor
group-onsemi 0:098463de4c5d 90 MBED_ASSERT(index >= 0 && index <= 16);
group-onsemi 0:098463de4c5d 91 MBED_ASSERT(_pin[index]);
group-onsemi 0:098463de4c5d 92 return *_pin[index];
group-onsemi 0:098463de4c5d 93 }
group-onsemi 0:098463de4c5d 94
group-onsemi 0:098463de4c5d 95 BusOut::operator int() {
group-onsemi 0:098463de4c5d 96 // Underlying read is thread safe
group-onsemi 0:098463de4c5d 97 return read();
group-onsemi 0:098463de4c5d 98 }
group-onsemi 0:098463de4c5d 99
group-onsemi 0:098463de4c5d 100 void BusOut::lock() {
group-onsemi 0:098463de4c5d 101 _mutex.lock();
group-onsemi 0:098463de4c5d 102 }
group-onsemi 0:098463de4c5d 103
group-onsemi 0:098463de4c5d 104 void BusOut::unlock() {
group-onsemi 0:098463de4c5d 105 _mutex.unlock();
group-onsemi 0:098463de4c5d 106 }
group-onsemi 0:098463de4c5d 107
group-onsemi 0:098463de4c5d 108 } // namespace mbed