SPKT

Dependencies:   F746_GUI SD_PlayerSkeleton F746_SAI_IO

Committer:
phungductung
Date:
Tue Jun 04 09:08:29 2019 +0000
Revision:
0:aa3fc5ad02f7
SPKT

Who changed what in which revision?

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