RTC auf true

Committer:
kevman
Date:
Wed Mar 13 11:03:24 2019 +0000
Revision:
2:7aab896b1a3b
Parent:
0:38ceb79fef03
2019-03-13

Who changed what in which revision?

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