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/BusIn.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 BusIn::BusIn(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 DigitalIn(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 BusIn::BusIn(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 DigitalIn(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 BusIn::~BusIn() {
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 int BusIn::read() {
group-onsemi 0:098463de4c5d 55 int v = 0;
group-onsemi 0:098463de4c5d 56 lock();
group-onsemi 0:098463de4c5d 57 for (int i=0; i<16; i++) {
group-onsemi 0:098463de4c5d 58 if (_pin[i] != 0) {
group-onsemi 0:098463de4c5d 59 v |= _pin[i]->read() << i;
group-onsemi 0:098463de4c5d 60 }
group-onsemi 0:098463de4c5d 61 }
group-onsemi 0:098463de4c5d 62 unlock();
group-onsemi 0:098463de4c5d 63 return v;
group-onsemi 0:098463de4c5d 64 }
group-onsemi 0:098463de4c5d 65
group-onsemi 0:098463de4c5d 66 void BusIn::mode(PinMode pull) {
group-onsemi 0:098463de4c5d 67 lock();
group-onsemi 0:098463de4c5d 68 for (int i=0; i<16; i++) {
group-onsemi 0:098463de4c5d 69 if (_pin[i] != 0) {
group-onsemi 0:098463de4c5d 70 _pin[i]->mode(pull);
group-onsemi 0:098463de4c5d 71 }
group-onsemi 0:098463de4c5d 72 }
group-onsemi 0:098463de4c5d 73 unlock();
group-onsemi 0:098463de4c5d 74 }
group-onsemi 0:098463de4c5d 75
group-onsemi 0:098463de4c5d 76 void BusIn::lock() {
group-onsemi 0:098463de4c5d 77 _mutex.lock();
group-onsemi 0:098463de4c5d 78 }
group-onsemi 0:098463de4c5d 79
group-onsemi 0:098463de4c5d 80 void BusIn::unlock() {
group-onsemi 0:098463de4c5d 81 _mutex.unlock();
group-onsemi 0:098463de4c5d 82 }
group-onsemi 0:098463de4c5d 83
group-onsemi 0:098463de4c5d 84 BusIn::operator int() {
group-onsemi 0:098463de4c5d 85 // Underlying read is thread safe
group-onsemi 0:098463de4c5d 86 return read();
group-onsemi 0:098463de4c5d 87 }
group-onsemi 0:098463de4c5d 88
group-onsemi 0:098463de4c5d 89 DigitalIn& BusIn::operator[] (int index) {
group-onsemi 0:098463de4c5d 90 // No lock needed since _pin is not modified outside the constructor
group-onsemi 0:098463de4c5d 91 MBED_ASSERT(index >= 0 && index <= 16);
group-onsemi 0:098463de4c5d 92 MBED_ASSERT(_pin[index]);
group-onsemi 0:098463de4c5d 93 return *_pin[index];
group-onsemi 0:098463de4c5d 94 }
group-onsemi 0:098463de4c5d 95
group-onsemi 0:098463de4c5d 96 } // namespace mbed