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 "BusOut.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 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) {
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 DigitalOut(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 BusOut::BusOut(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 DigitalOut(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 BusOut::~BusOut() {
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 BusOut::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 BusOut::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 #ifdef MBED_OPERATORS
phungductung 0:aa3fc5ad02f7 70 BusOut& BusOut::operator= (int v) {
phungductung 0:aa3fc5ad02f7 71 write(v);
phungductung 0:aa3fc5ad02f7 72 return *this;
phungductung 0:aa3fc5ad02f7 73 }
phungductung 0:aa3fc5ad02f7 74
phungductung 0:aa3fc5ad02f7 75 BusOut& BusOut::operator= (BusOut& rhs) {
phungductung 0:aa3fc5ad02f7 76 write(rhs.read());
phungductung 0:aa3fc5ad02f7 77 return *this;
phungductung 0:aa3fc5ad02f7 78 }
phungductung 0:aa3fc5ad02f7 79
phungductung 0:aa3fc5ad02f7 80 DigitalOut& BusOut::operator[] (int index) {
phungductung 0:aa3fc5ad02f7 81 MBED_ASSERT(index >= 0 && index <= 16);
phungductung 0:aa3fc5ad02f7 82 MBED_ASSERT(_pin[index]);
phungductung 0:aa3fc5ad02f7 83 return *_pin[index];
phungductung 0:aa3fc5ad02f7 84 }
phungductung 0:aa3fc5ad02f7 85
phungductung 0:aa3fc5ad02f7 86 BusOut::operator int() {
phungductung 0:aa3fc5ad02f7 87 return read();
phungductung 0:aa3fc5ad02f7 88 }
phungductung 0:aa3fc5ad02f7 89 #endif
phungductung 0:aa3fc5ad02f7 90
phungductung 0:aa3fc5ad02f7 91 } // namespace mbed