mbed library for NZ32-SC151

Committer:
modtronix
Date:
Fri Jul 24 21:01:44 2015 +1000
Revision:
1:71204b8406f2
Current mbed v103 (594)

Who changed what in which revision?

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