Morpheus / mbed-hal

Dependencies:   target-freescale

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 "BusInOut.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 BusInOut::BusInOut(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 DigitalInOut(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 BusInOut::BusInOut(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 DigitalInOut(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 BusInOut::~BusInOut() {
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 BusInOut::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 BusInOut::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 void BusInOut::output() {
screamer 0:9c59db1fbc9e 70 for (int i=0; i<16; i++) {
screamer 0:9c59db1fbc9e 71 if (_pin[i] != 0) {
screamer 0:9c59db1fbc9e 72 _pin[i]->output();
screamer 0:9c59db1fbc9e 73 }
screamer 0:9c59db1fbc9e 74 }
screamer 0:9c59db1fbc9e 75 }
screamer 0:9c59db1fbc9e 76
screamer 0:9c59db1fbc9e 77 void BusInOut::input() {
screamer 0:9c59db1fbc9e 78 for (int i=0; i<16; i++) {
screamer 0:9c59db1fbc9e 79 if (_pin[i] != 0) {
screamer 0:9c59db1fbc9e 80 _pin[i]->input();
screamer 0:9c59db1fbc9e 81 }
screamer 0:9c59db1fbc9e 82 }
screamer 0:9c59db1fbc9e 83 }
screamer 0:9c59db1fbc9e 84
screamer 0:9c59db1fbc9e 85 void BusInOut::mode(PinMode pull) {
screamer 0:9c59db1fbc9e 86 for (int i=0; i<16; i++) {
screamer 0:9c59db1fbc9e 87 if (_pin[i] != 0) {
screamer 0:9c59db1fbc9e 88 _pin[i]->mode(pull);
screamer 0:9c59db1fbc9e 89 }
screamer 0:9c59db1fbc9e 90 }
screamer 0:9c59db1fbc9e 91 }
screamer 0:9c59db1fbc9e 92
screamer 0:9c59db1fbc9e 93 #ifdef MBED_OPERATORS
screamer 0:9c59db1fbc9e 94 BusInOut& BusInOut::operator= (int v) {
screamer 0:9c59db1fbc9e 95 write(v);
screamer 0:9c59db1fbc9e 96 return *this;
screamer 0:9c59db1fbc9e 97 }
screamer 0:9c59db1fbc9e 98
screamer 0:9c59db1fbc9e 99 BusInOut& BusInOut::operator= (BusInOut& rhs) {
screamer 0:9c59db1fbc9e 100 write(rhs.read());
screamer 0:9c59db1fbc9e 101 return *this;
screamer 0:9c59db1fbc9e 102 }
screamer 0:9c59db1fbc9e 103
screamer 0:9c59db1fbc9e 104 DigitalInOut& BusInOut::operator[] (int index) {
screamer 0:9c59db1fbc9e 105 MBED_ASSERT(index >= 0 && index <= 16);
screamer 0:9c59db1fbc9e 106 MBED_ASSERT(_pin[index]);
screamer 0:9c59db1fbc9e 107 return *_pin[index];
screamer 0:9c59db1fbc9e 108 }
screamer 0:9c59db1fbc9e 109
screamer 0:9c59db1fbc9e 110 BusInOut::operator int() {
screamer 0:9c59db1fbc9e 111 return read();
screamer 0:9c59db1fbc9e 112 }
screamer 0:9c59db1fbc9e 113 #endif
screamer 0:9c59db1fbc9e 114
screamer 0:9c59db1fbc9e 115 } // namespace mbed
screamer 0:9c59db1fbc9e 116