Rahul Dahiya / Mbed OS STM32F7 Ethernet
Committer:
rahul_dahiya
Date:
Wed Jan 15 15:57:15 2020 +0530
Revision:
0:fb8047b156bb
STM32F7 LWIP

Who changed what in which revision?

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