[11U68]fix P0_11 to use GPIO
Fork of mbed-src by
Embed:
(wiki syntax)
Show/hide line numbers
BusInOut.cpp
00001 /* mbed Microcontroller Library 00002 * Copyright (c) 2006-2013 ARM Limited 00003 * 00004 * Licensed under the Apache License, Version 2.0 (the "License"); 00005 * you may not use this file except in compliance with the License. 00006 * You may obtain a copy of the License at 00007 * 00008 * http://www.apache.org/licenses/LICENSE-2.0 00009 * 00010 * Unless required by applicable law or agreed to in writing, software 00011 * distributed under the License is distributed on an "AS IS" BASIS, 00012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 00013 * See the License for the specific language governing permissions and 00014 * limitations under the License. 00015 */ 00016 #include "BusInOut.h" 00017 #include "mbed_assert.h" 00018 00019 namespace mbed { 00020 00021 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) { 00022 PinName pins[16] = {p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15}; 00023 00024 _nc_mask = 0; 00025 for (int i=0; i<16; i++) { 00026 _pin[i] = (pins[i] != NC) ? new DigitalInOut(pins[i]) : 0; 00027 if (pins[i] != NC) { 00028 _nc_mask |= (1 << i); 00029 } 00030 } 00031 } 00032 00033 BusInOut::BusInOut(PinName pins[16]) { 00034 _nc_mask = 0; 00035 for (int i=0; i<16; i++) { 00036 _pin[i] = (pins[i] != NC) ? new DigitalInOut(pins[i]) : 0; 00037 if (pins[i] != NC) { 00038 _nc_mask |= (1 << i); 00039 } 00040 } 00041 } 00042 00043 BusInOut::~BusInOut() { 00044 for (int i=0; i<16; i++) { 00045 if (_pin[i] != 0) { 00046 delete _pin[i]; 00047 } 00048 } 00049 } 00050 00051 void BusInOut::write(int value) { 00052 for (int i=0; i<16; i++) { 00053 if (_pin[i] != 0) { 00054 _pin[i]->write((value >> i) & 1); 00055 } 00056 } 00057 } 00058 00059 int BusInOut::read() { 00060 int v = 0; 00061 for (int i=0; i<16; i++) { 00062 if (_pin[i] != 0) { 00063 v |= _pin[i]->read() << i; 00064 } 00065 } 00066 return v; 00067 } 00068 00069 void BusInOut::output() { 00070 for (int i=0; i<16; i++) { 00071 if (_pin[i] != 0) { 00072 _pin[i]->output(); 00073 } 00074 } 00075 } 00076 00077 void BusInOut::input() { 00078 for (int i=0; i<16; i++) { 00079 if (_pin[i] != 0) { 00080 _pin[i]->input(); 00081 } 00082 } 00083 } 00084 00085 void BusInOut::mode(PinMode pull) { 00086 for (int i=0; i<16; i++) { 00087 if (_pin[i] != 0) { 00088 _pin[i]->mode(pull); 00089 } 00090 } 00091 } 00092 00093 #ifdef MBED_OPERATORS 00094 BusInOut& BusInOut::operator= (int v) { 00095 write(v); 00096 return *this; 00097 } 00098 00099 BusInOut& BusInOut::operator= (BusInOut& rhs) { 00100 write(rhs.read()); 00101 return *this; 00102 } 00103 00104 DigitalInOut& BusInOut::operator[] (int index) { 00105 MBED_ASSERT(index >= 0 && index <= 16); 00106 MBED_ASSERT(_pin[index]); 00107 return *_pin[index]; 00108 } 00109 00110 BusInOut::operator int() { 00111 return read(); 00112 } 00113 #endif 00114 00115 } // namespace mbed
Generated on Tue Jul 12 2022 21:24:11 by 1.7.2