Modification of mbed-src library only for STM32F030F4, very cheap microcontroller in 20-Pin TSSOP package, with 16Kbytes of Flash and 4Kbytes of Ram. **Target for online compilator must be Nucleo 32F030R8.**

Dependents:   STM32F031_blink_LED_2

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers BusInOut.cpp Source File

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 
00018 namespace mbed {
00019 
00020 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) {
00021     PinName pins[16] = {p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15};
00022 
00023     for (int i=0; i<16; i++) {
00024         _pin[i] = (pins[i] != NC) ? new DigitalInOut(pins[i]) : 0;
00025     }
00026 }
00027 
00028 BusInOut::BusInOut(PinName pins[16]) {
00029     for (int i=0; i<16; i++) {
00030         _pin[i] = (pins[i] != NC) ? new DigitalInOut(pins[i]) : 0;
00031     }
00032 }
00033 
00034 BusInOut::~BusInOut() {
00035     for (int i=0; i<16; i++) {
00036         if (_pin[i] != 0) {
00037             delete _pin[i];
00038         }
00039     }
00040 }
00041 
00042 void BusInOut::write(int value) {
00043     for (int i=0; i<16; i++) {
00044         if (_pin[i] != 0) {
00045             _pin[i]->write((value >> i) & 1);
00046         }
00047     }
00048 }
00049 
00050 int BusInOut::read() {
00051     int v = 0;
00052     for (int i=0; i<16; i++) {
00053         if (_pin[i] != 0) {
00054             v |= _pin[i]->read() << i;
00055         }
00056     }
00057     return v;
00058 }
00059 
00060 void BusInOut::output() {
00061     for (int i=0; i<16; i++) {
00062         if (_pin[i] != 0) {
00063             _pin[i]->output();
00064         }
00065     }
00066 }
00067 
00068 void BusInOut::input() {
00069     for (int i=0; i<16; i++) {
00070         if (_pin[i] != 0) {
00071             _pin[i]->input();
00072         }
00073     }
00074 }
00075 
00076 void BusInOut::mode(PinMode pull) {
00077     for (int i=0; i<16; i++) {
00078         if (_pin[i] != 0) {
00079             _pin[i]->mode(pull);
00080         }
00081     }
00082 }
00083 
00084 #ifdef MBED_OPERATORS
00085 BusInOut& BusInOut::operator= (int v) {
00086     write(v);
00087     return *this;
00088 }
00089 
00090 BusInOut& BusInOut::operator= (BusInOut& rhs) {
00091     write(rhs.read());
00092     return *this;
00093 }
00094 
00095 BusInOut::operator int() {
00096     return read();
00097 }
00098 #endif
00099 
00100 } // namespace mbed