游戏王对战板,目前code还是空的

Committer:
WFKnight
Date:
Thu Jun 21 13:51:43 2018 +0000
Revision:
0:9b3d4731edbb
UART, RTOS, LED

Who changed what in which revision?

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