Christopher Haster / mbed-hal

Dependencies:   target-freescale

Fork of mbed-hal by Morpheus

Committer:
screamer
Date:
Wed Mar 23 21:36:09 2016 +0000
Revision:
0:9c59db1fbc9e
Initial revision

Who changed what in which revision?

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