SPKT

Dependents:   WAV

Committer:
phungductung
Date:
Tue Jun 04 21:51:46 2019 +0000
Revision:
0:e87aa4c49e95
libray

Who changed what in which revision?

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