SPC music playback tools for real snes apu

Dependencies:   mbed

Committer:
akkera102
Date:
Mon Jan 09 13:54:39 2017 +0000
Revision:
0:5bd52e196edb
Child:
2:62e6e22f8be2
first

Who changed what in which revision?

UserRevisionLine numberNew contents of line
akkera102 0:5bd52e196edb 1 /**
akkera102 0:5bd52e196edb 2 * @file gpio.cpp
akkera102 0:5bd52e196edb 3 * @brief GPIO クラスの動作の定義を行います
akkera102 0:5bd52e196edb 4 */
akkera102 0:5bd52e196edb 5
akkera102 0:5bd52e196edb 6 #include "stdafx.h"
akkera102 0:5bd52e196edb 7 #include "gpio.h"
akkera102 0:5bd52e196edb 8 // #include <wiringPi.h>
akkera102 0:5bd52e196edb 9 #include "mbed.h"
akkera102 0:5bd52e196edb 10
akkera102 0:5bd52e196edb 11 DigitalInOut d[] = {
akkera102 0:5bd52e196edb 12 p5, // A7
akkera102 0:5bd52e196edb 13 p6, // A6
akkera102 0:5bd52e196edb 14 p7, // A0
akkera102 0:5bd52e196edb 15 p8, // A1
akkera102 0:5bd52e196edb 16 p9, // WR
akkera102 0:5bd52e196edb 17 p10, // RD
akkera102 0:5bd52e196edb 18
akkera102 0:5bd52e196edb 19 p11, // D0
akkera102 0:5bd52e196edb 20 p12,
akkera102 0:5bd52e196edb 21 p13,
akkera102 0:5bd52e196edb 22 p14,
akkera102 0:5bd52e196edb 23 p15,
akkera102 0:5bd52e196edb 24 p16,
akkera102 0:5bd52e196edb 25 p17,
akkera102 0:5bd52e196edb 26 p18, // D7
akkera102 0:5bd52e196edb 27
akkera102 0:5bd52e196edb 28 p19, // ICL
akkera102 0:5bd52e196edb 29 };
akkera102 0:5bd52e196edb 30
akkera102 0:5bd52e196edb 31
akkera102 0:5bd52e196edb 32 /*! 唯一のインスタンスです */
akkera102 0:5bd52e196edb 33 CGpio CGpio::sm_instance;
akkera102 0:5bd52e196edb 34
akkera102 0:5bd52e196edb 35 /**
akkera102 0:5bd52e196edb 36 * 初期化
akkera102 0:5bd52e196edb 37 */
akkera102 0:5bd52e196edb 38 void CGpio::Initialize()
akkera102 0:5bd52e196edb 39 {
akkera102 0:5bd52e196edb 40 // ::wiringPiSetup();
akkera102 0:5bd52e196edb 41 }
akkera102 0:5bd52e196edb 42
akkera102 0:5bd52e196edb 43 /**
akkera102 0:5bd52e196edb 44 * I/Oの方向を設定する
akkera102 0:5bd52e196edb 45 * @param[in] pin ピン番号
akkera102 0:5bd52e196edb 46 * @param[in] write 方向
akkera102 0:5bd52e196edb 47 */
akkera102 0:5bd52e196edb 48 void CGpio::PinDir(int pin, bool write)
akkera102 0:5bd52e196edb 49 {
akkera102 0:5bd52e196edb 50 // ::pinMode(pin, (write ? OUTPUT : INPUT));
akkera102 0:5bd52e196edb 51 if(write)
akkera102 0:5bd52e196edb 52 {
akkera102 0:5bd52e196edb 53 d[pin].output();
akkera102 0:5bd52e196edb 54 }
akkera102 0:5bd52e196edb 55 else
akkera102 0:5bd52e196edb 56 {
akkera102 0:5bd52e196edb 57 d[pin].input();
akkera102 0:5bd52e196edb 58 }
akkera102 0:5bd52e196edb 59 }
akkera102 0:5bd52e196edb 60
akkera102 0:5bd52e196edb 61 /**
akkera102 0:5bd52e196edb 62 * Output
akkera102 0:5bd52e196edb 63 * @param[in] pin ピン番号
akkera102 0:5bd52e196edb 64 * @param[in] high ON/OFF
akkera102 0:5bd52e196edb 65 */
akkera102 0:5bd52e196edb 66 void CGpio::SetPin(int pin, bool high)
akkera102 0:5bd52e196edb 67 {
akkera102 0:5bd52e196edb 68 // ::digitalWrite(pin, (high ? HIGH : LOW));
akkera102 0:5bd52e196edb 69 d[pin] = high ? 1 : 0;
akkera102 0:5bd52e196edb 70 }
akkera102 0:5bd52e196edb 71
akkera102 0:5bd52e196edb 72 /**
akkera102 0:5bd52e196edb 73 * Input
akkera102 0:5bd52e196edb 74 * @param[in] pin ピン番号
akkera102 0:5bd52e196edb 75 * @return ON/OFF
akkera102 0:5bd52e196edb 76 */
akkera102 0:5bd52e196edb 77 bool CGpio::GetPin(int pin)
akkera102 0:5bd52e196edb 78 {
akkera102 0:5bd52e196edb 79 // return (::digitalRead(pin) != LOW);
akkera102 0:5bd52e196edb 80 d[pin].input();
akkera102 0:5bd52e196edb 81 return d[pin] != 0;
akkera102 0:5bd52e196edb 82 }
akkera102 0:5bd52e196edb 83
akkera102 0:5bd52e196edb 84 /**
akkera102 0:5bd52e196edb 85 * コンストラクタ
akkera102 0:5bd52e196edb 86 */
akkera102 0:5bd52e196edb 87 CGpio::CGpio()
akkera102 0:5bd52e196edb 88 : m_dir(kUninitialize)
akkera102 0:5bd52e196edb 89 {
akkera102 0:5bd52e196edb 90 }
akkera102 0:5bd52e196edb 91
akkera102 0:5bd52e196edb 92 /**
akkera102 0:5bd52e196edb 93 * バイト書き込み
akkera102 0:5bd52e196edb 94 * @param[in] c データ
akkera102 0:5bd52e196edb 95 */
akkera102 0:5bd52e196edb 96 void CGpio::WriteByte(unsigned char c)
akkera102 0:5bd52e196edb 97 {
akkera102 0:5bd52e196edb 98 // ByteMode(kWrite);
akkera102 0:5bd52e196edb 99 // ::digitalWriteByte(c);
akkera102 0:5bd52e196edb 100 int i;
akkera102 0:5bd52e196edb 101
akkera102 0:5bd52e196edb 102 for(i=6; i<6+8; i++)
akkera102 0:5bd52e196edb 103 {
akkera102 0:5bd52e196edb 104 d[i].output();
akkera102 0:5bd52e196edb 105 d[i] = c & 0x1;
akkera102 0:5bd52e196edb 106 c >>= 1;
akkera102 0:5bd52e196edb 107 }
akkera102 0:5bd52e196edb 108 }
akkera102 0:5bd52e196edb 109
akkera102 0:5bd52e196edb 110 /**
akkera102 0:5bd52e196edb 111 * バイト読み込み
akkera102 0:5bd52e196edb 112 * @return データ
akkera102 0:5bd52e196edb 113 */
akkera102 0:5bd52e196edb 114 unsigned char CGpio::ReadByte()
akkera102 0:5bd52e196edb 115 {
akkera102 0:5bd52e196edb 116 // ByteMode(kRead);
akkera102 0:5bd52e196edb 117 // return SwapBits(::digitalReadByte());
akkera102 0:5bd52e196edb 118
akkera102 0:5bd52e196edb 119 unsigned char ret = 0;
akkera102 0:5bd52e196edb 120 int i;
akkera102 0:5bd52e196edb 121
akkera102 0:5bd52e196edb 122 for(i=6; i<6+8; i++)
akkera102 0:5bd52e196edb 123 {
akkera102 0:5bd52e196edb 124 d[i].input();
akkera102 0:5bd52e196edb 125 ret <<= 1;
akkera102 0:5bd52e196edb 126 ret |= d[i];
akkera102 0:5bd52e196edb 127 }
akkera102 0:5bd52e196edb 128
akkera102 0:5bd52e196edb 129 return SwapBits(ret);
akkera102 0:5bd52e196edb 130 }
akkera102 0:5bd52e196edb 131
akkera102 0:5bd52e196edb 132 /**
akkera102 0:5bd52e196edb 133 * バイト モード
akkera102 0:5bd52e196edb 134 * @param[in] dir I/O
akkera102 0:5bd52e196edb 135 */
akkera102 0:5bd52e196edb 136 /*
akkera102 0:5bd52e196edb 137 void CGpio::ByteMode(ByteDir dir)
akkera102 0:5bd52e196edb 138 {
akkera102 0:5bd52e196edb 139 if (m_dir != dir)
akkera102 0:5bd52e196edb 140 {
akkera102 0:5bd52e196edb 141 m_dir = dir;
akkera102 0:5bd52e196edb 142 const int mode = (dir != kRead) ? OUTPUT : INPUT;
akkera102 0:5bd52e196edb 143 for (int i = 0; i < 8; i++)
akkera102 0:5bd52e196edb 144 {
akkera102 0:5bd52e196edb 145 ::pinMode(i, mode);
akkera102 0:5bd52e196edb 146 }
akkera102 0:5bd52e196edb 147 }
akkera102 0:5bd52e196edb 148 }
akkera102 0:5bd52e196edb 149 */
akkera102 0:5bd52e196edb 150
akkera102 0:5bd52e196edb 151 /**
akkera102 0:5bd52e196edb 152 * ビット スワップ
akkera102 0:5bd52e196edb 153 * @param[in] c データ
akkera102 0:5bd52e196edb 154 * @return データ
akkera102 0:5bd52e196edb 155 */
akkera102 0:5bd52e196edb 156 unsigned char CGpio::SwapBits(unsigned char c)
akkera102 0:5bd52e196edb 157 {
akkera102 0:5bd52e196edb 158 unsigned char s = 0;
akkera102 0:5bd52e196edb 159 if (c & 0x01)
akkera102 0:5bd52e196edb 160 {
akkera102 0:5bd52e196edb 161 s |= 0x80;
akkera102 0:5bd52e196edb 162 }
akkera102 0:5bd52e196edb 163 if (c & 0x02)
akkera102 0:5bd52e196edb 164 {
akkera102 0:5bd52e196edb 165 s |= 0x40;
akkera102 0:5bd52e196edb 166 }
akkera102 0:5bd52e196edb 167 if (c & 0x04)
akkera102 0:5bd52e196edb 168 {
akkera102 0:5bd52e196edb 169 s |= 0x20;
akkera102 0:5bd52e196edb 170 }
akkera102 0:5bd52e196edb 171 if (c & 0x08)
akkera102 0:5bd52e196edb 172 {
akkera102 0:5bd52e196edb 173 s |= 0x10;
akkera102 0:5bd52e196edb 174 }
akkera102 0:5bd52e196edb 175 if (c & 0x10)
akkera102 0:5bd52e196edb 176 {
akkera102 0:5bd52e196edb 177 s |= 0x08;
akkera102 0:5bd52e196edb 178 }
akkera102 0:5bd52e196edb 179 if (c & 0x20)
akkera102 0:5bd52e196edb 180 {
akkera102 0:5bd52e196edb 181 s |= 0x04;
akkera102 0:5bd52e196edb 182 }
akkera102 0:5bd52e196edb 183 if (c & 0x40)
akkera102 0:5bd52e196edb 184 {
akkera102 0:5bd52e196edb 185 s |= 0x02;
akkera102 0:5bd52e196edb 186 }
akkera102 0:5bd52e196edb 187 if (c & 0x80)
akkera102 0:5bd52e196edb 188 {
akkera102 0:5bd52e196edb 189 s |= 0x01;
akkera102 0:5bd52e196edb 190 }
akkera102 0:5bd52e196edb 191 return s;
akkera102 0:5bd52e196edb 192 }