Color Oled(SSD1331) connect to STMicroelectronics Nucleo-F466

Dependencies:   ssd1331

Committer:
kadonotakashi
Date:
Thu Oct 11 02:27:46 2018 +0000
Revision:
3:f3764f852aa8
Parent:
0:8fdf9a60065b
Nucreo 446 + SSD1331 test version;

Who changed what in which revision?

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