First Release
Out_FC/C_Out_FC.cpp@1:6c392ebcd4d4, 2013-07-27 (annotated)
- Committer:
- sankichi
- Date:
- Sat Jul 27 14:19:33 2013 +0000
- Revision:
- 1:6c392ebcd4d4
- Parent:
- 0:e1265f6b3565
First release
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
sankichi | 0:e1265f6b3565 | 1 | #include "mbed.h" |
sankichi | 0:e1265f6b3565 | 2 | #include "NiseKabuto.h" // InputDeviceType |
sankichi | 0:e1265f6b3565 | 3 | #include "C_Out_FC.h" |
sankichi | 0:e1265f6b3565 | 4 | |
sankichi | 0:e1265f6b3565 | 5 | // mbed pins |
sankichi | 0:e1265f6b3565 | 6 | DigitalOut led2_FC(LED2); |
sankichi | 0:e1265f6b3565 | 7 | DigitalOut led3_FC(LED3); |
sankichi | 0:e1265f6b3565 | 8 | InterruptIn *_INTR_LATCH; |
sankichi | 0:e1265f6b3565 | 9 | DigitalOut *_OUT_DATA; |
sankichi | 0:e1265f6b3565 | 10 | InterruptIn *_INTR_CLOCK; |
sankichi | 0:e1265f6b3565 | 11 | InterruptIn *_INTR_POWDETECT; |
sankichi | 0:e1265f6b3565 | 12 | |
sankichi | 0:e1265f6b3565 | 13 | // File local variables |
sankichi | 0:e1265f6b3565 | 14 | static volatile int *_pButtons; //PhaseData[12] |
sankichi | 0:e1265f6b3565 | 15 | static volatile char *_pCh0; |
sankichi | 0:e1265f6b3565 | 16 | static volatile char *_pCh1; |
sankichi | 0:e1265f6b3565 | 17 | static volatile char *_pCh2; |
sankichi | 0:e1265f6b3565 | 18 | static volatile char *_pInputDeviceType; |
sankichi | 0:e1265f6b3565 | 19 | static volatile char _Flag_NowOutput; |
sankichi | 0:e1265f6b3565 | 20 | static volatile char _PhaseCounter; |
sankichi | 0:e1265f6b3565 | 21 | static volatile char _SpeedType; |
sankichi | 0:e1265f6b3565 | 22 | static FunctionPointer *_fp_EnableInput; |
sankichi | 0:e1265f6b3565 | 23 | static FunctionPointer *_fp_DisableInput; |
sankichi | 0:e1265f6b3565 | 24 | static volatile char _RapidFireValue; |
sankichi | 0:e1265f6b3565 | 25 | static Ticker _RapidStateTicker; |
sankichi | 0:e1265f6b3565 | 26 | |
sankichi | 0:e1265f6b3565 | 27 | // Const variables |
sankichi | 0:e1265f6b3565 | 28 | static const int DIGITALPAD_SPEED_STARFORCE = 120; |
sankichi | 0:e1265f6b3565 | 29 | static const int DIGITALPAD_SPEED_RECCA = 75; |
sankichi | 0:e1265f6b3565 | 30 | static const int RAPIDFIRE_PER_SEC = 15; // 高橋名人連射速度-1 |
sankichi | 0:e1265f6b3565 | 31 | |
sankichi | 0:e1265f6b3565 | 32 | // File local functions |
sankichi | 0:e1265f6b3565 | 33 | static void ISR_Rise_LATCH_STARFORCE(void); // 遅い読み取りルーチン for スターフォース |
sankichi | 0:e1265f6b3565 | 34 | static void ISR_Rise_LATCH(void); // フツー |
sankichi | 0:e1265f6b3565 | 35 | static void ISR_Rise_LATCH_RECCA(void); // 速い読み取りルーチン for サマーカーニバル'92 烈火 |
sankichi | 0:e1265f6b3565 | 36 | //static void ISR_Rise_POWERDETECT(void); |
sankichi | 0:e1265f6b3565 | 37 | static void RenewData(void); |
sankichi | 0:e1265f6b3565 | 38 | static char CheckSpeedType(void); |
sankichi | 0:e1265f6b3565 | 39 | static int CheckOneReadTime(void); |
sankichi | 0:e1265f6b3565 | 40 | static void ConfigureSpeed(void); |
sankichi | 0:e1265f6b3565 | 41 | static void RapidStateTickerMethod(void); |
sankichi | 0:e1265f6b3565 | 42 | |
sankichi | 0:e1265f6b3565 | 43 | void C_Out_FC_Initialize( |
sankichi | 0:e1265f6b3565 | 44 | InterruptIn *intr_LATCH, |
sankichi | 0:e1265f6b3565 | 45 | DigitalOut *out_DATA, |
sankichi | 0:e1265f6b3565 | 46 | InterruptIn *intr_CLOCK, |
sankichi | 0:e1265f6b3565 | 47 | InterruptIn *intr_POWDETECT, |
sankichi | 0:e1265f6b3565 | 48 | volatile int *pButtons, |
sankichi | 0:e1265f6b3565 | 49 | volatile char *pCh0, |
sankichi | 0:e1265f6b3565 | 50 | volatile char *pCh1, |
sankichi | 0:e1265f6b3565 | 51 | volatile char *pCh2, |
sankichi | 0:e1265f6b3565 | 52 | volatile char *pInputDeviceType, |
sankichi | 0:e1265f6b3565 | 53 | FunctionPointer *pFunc_InputEnable, |
sankichi | 0:e1265f6b3565 | 54 | FunctionPointer *pFunc_InputDisable |
sankichi | 0:e1265f6b3565 | 55 | ) |
sankichi | 0:e1265f6b3565 | 56 | { |
sankichi | 0:e1265f6b3565 | 57 | // 入出力pin |
sankichi | 0:e1265f6b3565 | 58 | _INTR_LATCH = intr_LATCH; |
sankichi | 0:e1265f6b3565 | 59 | _OUT_DATA = out_DATA; |
sankichi | 0:e1265f6b3565 | 60 | _INTR_CLOCK = intr_CLOCK; |
sankichi | 0:e1265f6b3565 | 61 | _INTR_POWDETECT = intr_POWDETECT; |
sankichi | 0:e1265f6b3565 | 62 | |
sankichi | 0:e1265f6b3565 | 63 | // 割り込み設定 |
sankichi | 0:e1265f6b3565 | 64 | //_INTR_POWDETECT->rise(&ISR_Rise_POWERDETECT); // 電源ON/OFFでスピード切り替え判定を行う場合 |
sankichi | 0:e1265f6b3565 | 65 | |
sankichi | 0:e1265f6b3565 | 66 | led2_FC.write(0); // 初期:フツー |
sankichi | 0:e1265f6b3565 | 67 | led3_FC.write(1); // |
sankichi | 0:e1265f6b3565 | 68 | _INTR_LATCH->rise(&ISR_Rise_LATCH); // |
sankichi | 0:e1265f6b3565 | 69 | |
sankichi | 0:e1265f6b3565 | 70 | // 出力速度設定 |
sankichi | 0:e1265f6b3565 | 71 | ConfigureSpeed(); |
sankichi | 0:e1265f6b3565 | 72 | |
sankichi | 0:e1265f6b3565 | 73 | // ポインタ |
sankichi | 0:e1265f6b3565 | 74 | _pButtons = pButtons; |
sankichi | 0:e1265f6b3565 | 75 | _pCh0 = pCh0; |
sankichi | 0:e1265f6b3565 | 76 | _pCh1 = pCh1; |
sankichi | 0:e1265f6b3565 | 77 | _pCh2 = pCh2; |
sankichi | 0:e1265f6b3565 | 78 | _pInputDeviceType = pInputDeviceType; |
sankichi | 0:e1265f6b3565 | 79 | _fp_EnableInput = pFunc_InputEnable; |
sankichi | 0:e1265f6b3565 | 80 | _fp_DisableInput = pFunc_InputDisable; |
sankichi | 0:e1265f6b3565 | 81 | |
sankichi | 0:e1265f6b3565 | 82 | _Flag_NowOutput = 0; |
sankichi | 0:e1265f6b3565 | 83 | _RapidFireValue = 1; |
sankichi | 0:e1265f6b3565 | 84 | |
sankichi | 0:e1265f6b3565 | 85 | //_pTemp = pTemp; |
sankichi | 0:e1265f6b3565 | 86 | |
sankichi | 0:e1265f6b3565 | 87 | // 連射ステータス変更設定 |
sankichi | 0:e1265f6b3565 | 88 | _RapidStateTicker.attach_us(&RapidStateTickerMethod, (int)(1000000/(RAPIDFIRE_PER_SEC*2))); |
sankichi | 0:e1265f6b3565 | 89 | |
sankichi | 0:e1265f6b3565 | 90 | // Initialize pin status |
sankichi | 0:e1265f6b3565 | 91 | _PhaseCounter = 0; |
sankichi | 0:e1265f6b3565 | 92 | RenewData(); |
sankichi | 0:e1265f6b3565 | 93 | } |
sankichi | 0:e1265f6b3565 | 94 | |
sankichi | 0:e1265f6b3565 | 95 | void ISR_Rise_LATCH(void) |
sankichi | 0:e1265f6b3565 | 96 | { |
sankichi | 0:e1265f6b3565 | 97 | int loopCounter; |
sankichi | 0:e1265f6b3565 | 98 | |
sankichi | 0:e1265f6b3565 | 99 | // 止める |
sankichi | 0:e1265f6b3565 | 100 | if( |
sankichi | 0:e1265f6b3565 | 101 | (*_pInputDeviceType) == NiseKabuto::CONFIG_INMODE_CYBERSTICK_ANALOG || |
sankichi | 0:e1265f6b3565 | 102 | (*_pInputDeviceType) == NiseKabuto::CONFIG_INMODE_CYBERSTICK_DIGITAL |
sankichi | 0:e1265f6b3565 | 103 | ) |
sankichi | 0:e1265f6b3565 | 104 | { |
sankichi | 0:e1265f6b3565 | 105 | (*_fp_DisableInput).call(); |
sankichi | 0:e1265f6b3565 | 106 | } |
sankichi | 0:e1265f6b3565 | 107 | |
sankichi | 0:e1265f6b3565 | 108 | // この関数開始時点で、phase0読み取り(DATAの立下り1回分)は |
sankichi | 0:e1265f6b3565 | 109 | // 終了しているものと仮定する |
sankichi | 0:e1265f6b3565 | 110 | // (mbedのピン割り込み時の反応速度は7usくらい) |
sankichi | 0:e1265f6b3565 | 111 | // |
sankichi | 0:e1265f6b3565 | 112 | // ただしMetalMaxでは。Latch立ち上がりから初回DATA立下りの間が |
sankichi | 0:e1265f6b3565 | 113 | // 6.5-7.0usくらいで微妙なので、 |
sankichi | 0:e1265f6b3565 | 114 | // 絶対にphase0から開始することを保証するため、ちょっと待つ |
sankichi | 0:e1265f6b3565 | 115 | wait_us(1); |
sankichi | 0:e1265f6b3565 | 116 | |
sankichi | 0:e1265f6b3565 | 117 | |
sankichi | 0:e1265f6b3565 | 118 | // Phase1に移行 |
sankichi | 0:e1265f6b3565 | 119 | _PhaseCounter=1; |
sankichi | 0:e1265f6b3565 | 120 | RenewData(); |
sankichi | 0:e1265f6b3565 | 121 | |
sankichi | 0:e1265f6b3565 | 122 | // Lの間待つ |
sankichi | 0:e1265f6b3565 | 123 | while( !(_INTR_CLOCK->read()) ) |
sankichi | 0:e1265f6b3565 | 124 | { |
sankichi | 0:e1265f6b3565 | 125 | loopCounter = 400; |
sankichi | 0:e1265f6b3565 | 126 | |
sankichi | 0:e1265f6b3565 | 127 | loopCounter--; |
sankichi | 0:e1265f6b3565 | 128 | if( !loopCounter ) |
sankichi | 0:e1265f6b3565 | 129 | { |
sankichi | 0:e1265f6b3565 | 130 | break; |
sankichi | 0:e1265f6b3565 | 131 | } |
sankichi | 0:e1265f6b3565 | 132 | } |
sankichi | 0:e1265f6b3565 | 133 | |
sankichi | 0:e1265f6b3565 | 134 | // 開始 |
sankichi | 0:e1265f6b3565 | 135 | for(int i=1; i<8; i++ ) |
sankichi | 0:e1265f6b3565 | 136 | { |
sankichi | 0:e1265f6b3565 | 137 | |
sankichi | 0:e1265f6b3565 | 138 | // Hの間待つ |
sankichi | 0:e1265f6b3565 | 139 | loopCounter = 5000; |
sankichi | 0:e1265f6b3565 | 140 | while( _INTR_CLOCK->read() ) |
sankichi | 0:e1265f6b3565 | 141 | { |
sankichi | 0:e1265f6b3565 | 142 | loopCounter--; |
sankichi | 0:e1265f6b3565 | 143 | if( !loopCounter ) |
sankichi | 0:e1265f6b3565 | 144 | { |
sankichi | 0:e1265f6b3565 | 145 | break; |
sankichi | 0:e1265f6b3565 | 146 | } |
sankichi | 0:e1265f6b3565 | 147 | } |
sankichi | 0:e1265f6b3565 | 148 | |
sankichi | 0:e1265f6b3565 | 149 | // Set data for current phase |
sankichi | 0:e1265f6b3565 | 150 | _PhaseCounter++; |
sankichi | 0:e1265f6b3565 | 151 | RenewData(); |
sankichi | 0:e1265f6b3565 | 152 | |
sankichi | 0:e1265f6b3565 | 153 | // Lの間待つ |
sankichi | 0:e1265f6b3565 | 154 | loopCounter = 200; |
sankichi | 0:e1265f6b3565 | 155 | while( !(_INTR_CLOCK->read()) ) |
sankichi | 0:e1265f6b3565 | 156 | { |
sankichi | 0:e1265f6b3565 | 157 | loopCounter--; |
sankichi | 0:e1265f6b3565 | 158 | if( !loopCounter ) |
sankichi | 0:e1265f6b3565 | 159 | { |
sankichi | 0:e1265f6b3565 | 160 | break; |
sankichi | 0:e1265f6b3565 | 161 | } |
sankichi | 0:e1265f6b3565 | 162 | } |
sankichi | 0:e1265f6b3565 | 163 | } |
sankichi | 0:e1265f6b3565 | 164 | |
sankichi | 0:e1265f6b3565 | 165 | _PhaseCounter = 0; |
sankichi | 0:e1265f6b3565 | 166 | RenewData(); |
sankichi | 0:e1265f6b3565 | 167 | |
sankichi | 0:e1265f6b3565 | 168 | // 再開 |
sankichi | 0:e1265f6b3565 | 169 | if( |
sankichi | 0:e1265f6b3565 | 170 | (*_pInputDeviceType) == NiseKabuto::CONFIG_INMODE_CYBERSTICK_ANALOG || |
sankichi | 0:e1265f6b3565 | 171 | (*_pInputDeviceType) == NiseKabuto::CONFIG_INMODE_CYBERSTICK_DIGITAL |
sankichi | 0:e1265f6b3565 | 172 | ) |
sankichi | 0:e1265f6b3565 | 173 | { |
sankichi | 0:e1265f6b3565 | 174 | (*_fp_EnableInput).call(); |
sankichi | 0:e1265f6b3565 | 175 | } |
sankichi | 0:e1265f6b3565 | 176 | |
sankichi | 0:e1265f6b3565 | 177 | } |
sankichi | 0:e1265f6b3565 | 178 | |
sankichi | 0:e1265f6b3565 | 179 | void ISR_Rise_LATCH_RECCA(void) |
sankichi | 0:e1265f6b3565 | 180 | { |
sankichi | 0:e1265f6b3565 | 181 | // おまじない(Phase0を長引かせる) |
sankichi | 0:e1265f6b3565 | 182 | wait_us(2); |
sankichi | 0:e1265f6b3565 | 183 | |
sankichi | 0:e1265f6b3565 | 184 | // Phase1に移行 |
sankichi | 0:e1265f6b3565 | 185 | _PhaseCounter=1; |
sankichi | 0:e1265f6b3565 | 186 | RenewData(); |
sankichi | 0:e1265f6b3565 | 187 | |
sankichi | 0:e1265f6b3565 | 188 | // 開始 |
sankichi | 0:e1265f6b3565 | 189 | for(int i=1; i<8; i++ ) |
sankichi | 0:e1265f6b3565 | 190 | { |
sankichi | 0:e1265f6b3565 | 191 | wait_us(6); |
sankichi | 0:e1265f6b3565 | 192 | |
sankichi | 0:e1265f6b3565 | 193 | // Set data for current phase |
sankichi | 0:e1265f6b3565 | 194 | _PhaseCounter++; |
sankichi | 0:e1265f6b3565 | 195 | RenewData(); |
sankichi | 0:e1265f6b3565 | 196 | } |
sankichi | 0:e1265f6b3565 | 197 | |
sankichi | 0:e1265f6b3565 | 198 | _PhaseCounter = 0; |
sankichi | 0:e1265f6b3565 | 199 | RenewData(); |
sankichi | 0:e1265f6b3565 | 200 | |
sankichi | 0:e1265f6b3565 | 201 | } |
sankichi | 0:e1265f6b3565 | 202 | |
sankichi | 0:e1265f6b3565 | 203 | // 遅い読み取りルーチン |
sankichi | 0:e1265f6b3565 | 204 | void ISR_Rise_LATCH_STARFORCE(void) |
sankichi | 0:e1265f6b3565 | 205 | { |
sankichi | 0:e1265f6b3565 | 206 | int loopCounter; |
sankichi | 0:e1265f6b3565 | 207 | |
sankichi | 0:e1265f6b3565 | 208 | // 止める |
sankichi | 0:e1265f6b3565 | 209 | if( |
sankichi | 0:e1265f6b3565 | 210 | (*_pInputDeviceType) == NiseKabuto::CONFIG_INMODE_CYBERSTICK_ANALOG || |
sankichi | 0:e1265f6b3565 | 211 | (*_pInputDeviceType) == NiseKabuto::CONFIG_INMODE_CYBERSTICK_DIGITAL |
sankichi | 0:e1265f6b3565 | 212 | ) |
sankichi | 0:e1265f6b3565 | 213 | { |
sankichi | 0:e1265f6b3565 | 214 | (*_fp_DisableInput).call(); |
sankichi | 0:e1265f6b3565 | 215 | } |
sankichi | 0:e1265f6b3565 | 216 | |
sankichi | 0:e1265f6b3565 | 217 | // Hの間待つ |
sankichi | 0:e1265f6b3565 | 218 | loopCounter = 5000; |
sankichi | 0:e1265f6b3565 | 219 | while( _INTR_CLOCK->read() ) |
sankichi | 0:e1265f6b3565 | 220 | { |
sankichi | 0:e1265f6b3565 | 221 | loopCounter--; |
sankichi | 0:e1265f6b3565 | 222 | if( !loopCounter ) |
sankichi | 0:e1265f6b3565 | 223 | { |
sankichi | 0:e1265f6b3565 | 224 | break; |
sankichi | 0:e1265f6b3565 | 225 | } |
sankichi | 0:e1265f6b3565 | 226 | } |
sankichi | 0:e1265f6b3565 | 227 | |
sankichi | 0:e1265f6b3565 | 228 | |
sankichi | 0:e1265f6b3565 | 229 | // Phase1に移行 |
sankichi | 0:e1265f6b3565 | 230 | _PhaseCounter=1; |
sankichi | 0:e1265f6b3565 | 231 | RenewData(); |
sankichi | 0:e1265f6b3565 | 232 | |
sankichi | 0:e1265f6b3565 | 233 | // Lの間待つ |
sankichi | 0:e1265f6b3565 | 234 | while( !(_INTR_CLOCK->read()) ) |
sankichi | 0:e1265f6b3565 | 235 | { |
sankichi | 0:e1265f6b3565 | 236 | loopCounter = 400; |
sankichi | 0:e1265f6b3565 | 237 | |
sankichi | 0:e1265f6b3565 | 238 | loopCounter--; |
sankichi | 0:e1265f6b3565 | 239 | if( !loopCounter ) |
sankichi | 0:e1265f6b3565 | 240 | { |
sankichi | 0:e1265f6b3565 | 241 | break; |
sankichi | 0:e1265f6b3565 | 242 | } |
sankichi | 0:e1265f6b3565 | 243 | } |
sankichi | 0:e1265f6b3565 | 244 | |
sankichi | 0:e1265f6b3565 | 245 | // 開始 |
sankichi | 0:e1265f6b3565 | 246 | for(int i=1; i<8; i++ ) |
sankichi | 0:e1265f6b3565 | 247 | { |
sankichi | 0:e1265f6b3565 | 248 | |
sankichi | 0:e1265f6b3565 | 249 | // Hの間待つ |
sankichi | 0:e1265f6b3565 | 250 | loopCounter = 5000; |
sankichi | 0:e1265f6b3565 | 251 | while( _INTR_CLOCK->read() ) |
sankichi | 0:e1265f6b3565 | 252 | { |
sankichi | 0:e1265f6b3565 | 253 | loopCounter--; |
sankichi | 0:e1265f6b3565 | 254 | if( !loopCounter ) |
sankichi | 0:e1265f6b3565 | 255 | { |
sankichi | 0:e1265f6b3565 | 256 | break; |
sankichi | 0:e1265f6b3565 | 257 | } |
sankichi | 0:e1265f6b3565 | 258 | } |
sankichi | 0:e1265f6b3565 | 259 | |
sankichi | 0:e1265f6b3565 | 260 | // Set data for current phase |
sankichi | 0:e1265f6b3565 | 261 | _PhaseCounter++; |
sankichi | 0:e1265f6b3565 | 262 | RenewData(); |
sankichi | 0:e1265f6b3565 | 263 | |
sankichi | 0:e1265f6b3565 | 264 | // Lの間待つ |
sankichi | 0:e1265f6b3565 | 265 | loopCounter = 200; |
sankichi | 0:e1265f6b3565 | 266 | while( !(_INTR_CLOCK->read()) ) |
sankichi | 0:e1265f6b3565 | 267 | { |
sankichi | 0:e1265f6b3565 | 268 | loopCounter--; |
sankichi | 0:e1265f6b3565 | 269 | if( !loopCounter ) |
sankichi | 0:e1265f6b3565 | 270 | { |
sankichi | 0:e1265f6b3565 | 271 | break; |
sankichi | 0:e1265f6b3565 | 272 | } |
sankichi | 0:e1265f6b3565 | 273 | } |
sankichi | 0:e1265f6b3565 | 274 | } |
sankichi | 0:e1265f6b3565 | 275 | |
sankichi | 0:e1265f6b3565 | 276 | _PhaseCounter = 0; |
sankichi | 0:e1265f6b3565 | 277 | RenewData(); |
sankichi | 0:e1265f6b3565 | 278 | |
sankichi | 0:e1265f6b3565 | 279 | // 再開 |
sankichi | 0:e1265f6b3565 | 280 | if( |
sankichi | 0:e1265f6b3565 | 281 | (*_pInputDeviceType) == NiseKabuto::CONFIG_INMODE_CYBERSTICK_ANALOG || |
sankichi | 0:e1265f6b3565 | 282 | (*_pInputDeviceType) == NiseKabuto::CONFIG_INMODE_CYBERSTICK_DIGITAL |
sankichi | 0:e1265f6b3565 | 283 | ) |
sankichi | 0:e1265f6b3565 | 284 | { |
sankichi | 0:e1265f6b3565 | 285 | (*_fp_EnableInput).call(); |
sankichi | 0:e1265f6b3565 | 286 | } |
sankichi | 0:e1265f6b3565 | 287 | |
sankichi | 0:e1265f6b3565 | 288 | } |
sankichi | 0:e1265f6b3565 | 289 | |
sankichi | 0:e1265f6b3565 | 290 | |
sankichi | 0:e1265f6b3565 | 291 | |
sankichi | 0:e1265f6b3565 | 292 | |
sankichi | 0:e1265f6b3565 | 293 | void RenewData(void) |
sankichi | 0:e1265f6b3565 | 294 | { |
sankichi | 0:e1265f6b3565 | 295 | switch(_PhaseCounter) |
sankichi | 0:e1265f6b3565 | 296 | { |
sankichi | 0:e1265f6b3565 | 297 | case 0: |
sankichi | 0:e1265f6b3565 | 298 | // |
sankichi | 0:e1265f6b3565 | 299 | // A |
sankichi | 0:e1265f6b3565 | 300 | // |
sankichi | 0:e1265f6b3565 | 301 | if((*_pInputDeviceType) == NiseKabuto::CONFIG_INMODE_CYBERSTICK_ANALOG) //サイバースティック(アナログ) |
sankichi | 0:e1265f6b3565 | 302 | { |
sankichi | 0:e1265f6b3565 | 303 | _OUT_DATA->write(((*_pButtons) & 0x0100) ? 1 : 0); // Digital B |
sankichi | 0:e1265f6b3565 | 304 | } |
sankichi | 0:e1265f6b3565 | 305 | else if((*_pInputDeviceType) == NiseKabuto::CONFIG_INMODE_MD6B) //2:MD6B |
sankichi | 0:e1265f6b3565 | 306 | { |
sankichi | 0:e1265f6b3565 | 307 | // Zが押されてたら連射、押されてなかったらCの結果 |
sankichi | 0:e1265f6b3565 | 308 | if( ((*_pButtons) & 0x010000) ) // Z |
sankichi | 0:e1265f6b3565 | 309 | { |
sankichi | 0:e1265f6b3565 | 310 | // 真:押されてない |
sankichi | 0:e1265f6b3565 | 311 | _OUT_DATA->write(((*_pButtons) & 0x0020) ? 1 : 0); // Digital C |
sankichi | 0:e1265f6b3565 | 312 | } |
sankichi | 0:e1265f6b3565 | 313 | else |
sankichi | 0:e1265f6b3565 | 314 | { |
sankichi | 0:e1265f6b3565 | 315 | // 偽:押されてる |
sankichi | 0:e1265f6b3565 | 316 | _OUT_DATA->write(_RapidFireValue&1); |
sankichi | 0:e1265f6b3565 | 317 | } |
sankichi | 0:e1265f6b3565 | 318 | } |
sankichi | 0:e1265f6b3565 | 319 | else |
sankichi | 0:e1265f6b3565 | 320 | { |
sankichi | 0:e1265f6b3565 | 321 | _OUT_DATA->write(((*_pButtons) & 0x0100) ? 1 : 0); // Digital B |
sankichi | 0:e1265f6b3565 | 322 | } |
sankichi | 0:e1265f6b3565 | 323 | break; |
sankichi | 0:e1265f6b3565 | 324 | |
sankichi | 0:e1265f6b3565 | 325 | case 1: |
sankichi | 0:e1265f6b3565 | 326 | // |
sankichi | 0:e1265f6b3565 | 327 | // B |
sankichi | 0:e1265f6b3565 | 328 | // |
sankichi | 0:e1265f6b3565 | 329 | if((*_pInputDeviceType) == NiseKabuto::CONFIG_INMODE_CYBERSTICK_ANALOG) //サイバースティック(アナログ) |
sankichi | 0:e1265f6b3565 | 330 | { |
sankichi | 0:e1265f6b3565 | 331 | _OUT_DATA->write(((*_pButtons) & 0x0200) ? 1 : 0); // Digital A |
sankichi | 0:e1265f6b3565 | 332 | } |
sankichi | 0:e1265f6b3565 | 333 | else if((*_pInputDeviceType) == NiseKabuto::CONFIG_INMODE_MD6B) //2:MD6B |
sankichi | 0:e1265f6b3565 | 334 | { |
sankichi | 0:e1265f6b3565 | 335 | // Yが押されてたら連射、押されてなかったらBの結果 |
sankichi | 0:e1265f6b3565 | 336 | if( ((*_pButtons) & 0x020000) ) // Y |
sankichi | 0:e1265f6b3565 | 337 | { |
sankichi | 0:e1265f6b3565 | 338 | // 真:押されてない |
sankichi | 0:e1265f6b3565 | 339 | _OUT_DATA->write(((*_pButtons) & 0x0100) ? 1 : 0); // Digital B |
sankichi | 0:e1265f6b3565 | 340 | } |
sankichi | 0:e1265f6b3565 | 341 | else |
sankichi | 0:e1265f6b3565 | 342 | { |
sankichi | 0:e1265f6b3565 | 343 | // 偽:押されてる |
sankichi | 0:e1265f6b3565 | 344 | _OUT_DATA->write(_RapidFireValue&1); |
sankichi | 0:e1265f6b3565 | 345 | } |
sankichi | 0:e1265f6b3565 | 346 | } |
sankichi | 0:e1265f6b3565 | 347 | else |
sankichi | 0:e1265f6b3565 | 348 | { |
sankichi | 0:e1265f6b3565 | 349 | _OUT_DATA->write(((*_pButtons) & 0x0200) ? 1 : 0); // Digital A |
sankichi | 0:e1265f6b3565 | 350 | } |
sankichi | 0:e1265f6b3565 | 351 | break; |
sankichi | 0:e1265f6b3565 | 352 | |
sankichi | 0:e1265f6b3565 | 353 | case 2: |
sankichi | 0:e1265f6b3565 | 354 | // |
sankichi | 0:e1265f6b3565 | 355 | // Select |
sankichi | 0:e1265f6b3565 | 356 | // |
sankichi | 0:e1265f6b3565 | 357 | if((*_pInputDeviceType) == NiseKabuto::CONFIG_INMODE_CYBERSTICK_ANALOG) //サイバースティック(アナログ) |
sankichi | 0:e1265f6b3565 | 358 | { |
sankichi | 0:e1265f6b3565 | 359 | _OUT_DATA->write(((*_pButtons) & 0x0001) ? 1 : 0); // G(Sel,Mode) |
sankichi | 0:e1265f6b3565 | 360 | } |
sankichi | 0:e1265f6b3565 | 361 | else if((*_pInputDeviceType) == NiseKabuto::CONFIG_INMODE_MD6B) //2:MD6B |
sankichi | 0:e1265f6b3565 | 362 | { |
sankichi | 0:e1265f6b3565 | 363 | _OUT_DATA->write(((*_pButtons) & 0x0001) ? 1 : 0); // G(Sel,Mode) |
sankichi | 0:e1265f6b3565 | 364 | } |
sankichi | 0:e1265f6b3565 | 365 | else |
sankichi | 0:e1265f6b3565 | 366 | { |
sankichi | 0:e1265f6b3565 | 367 | _OUT_DATA->write(((*_pButtons) & 0x0020) ? 1 : 0); // Digital C |
sankichi | 0:e1265f6b3565 | 368 | } |
sankichi | 0:e1265f6b3565 | 369 | break; |
sankichi | 0:e1265f6b3565 | 370 | |
sankichi | 0:e1265f6b3565 | 371 | case 3: |
sankichi | 0:e1265f6b3565 | 372 | // |
sankichi | 0:e1265f6b3565 | 373 | // Start |
sankichi | 0:e1265f6b3565 | 374 | // |
sankichi | 0:e1265f6b3565 | 375 | if((*_pInputDeviceType) == NiseKabuto::CONFIG_INMODE_CYBERSTICK_ANALOG) //サイバースティック(アナログ) |
sankichi | 0:e1265f6b3565 | 376 | { |
sankichi | 0:e1265f6b3565 | 377 | _OUT_DATA->write( |
sankichi | 0:e1265f6b3565 | 378 | ( ((*_pButtons) & 0x0002) ? 1 : 0) & // F(Start) |
sankichi | 0:e1265f6b3565 | 379 | ( (*_pCh2)>0xf0? 0:1 ) // スロットル引く |
sankichi | 0:e1265f6b3565 | 380 | |
sankichi | 0:e1265f6b3565 | 381 | ); |
sankichi | 0:e1265f6b3565 | 382 | //_OUT_DATA->write( ((*_pButtons) & 0x0002) ? 1 : 0) ); |
sankichi | 0:e1265f6b3565 | 383 | |
sankichi | 0:e1265f6b3565 | 384 | } |
sankichi | 0:e1265f6b3565 | 385 | else if((*_pInputDeviceType) == NiseKabuto::CONFIG_INMODE_MD6B) //2:MD6B |
sankichi | 0:e1265f6b3565 | 386 | { |
sankichi | 0:e1265f6b3565 | 387 | _OUT_DATA->write(((*_pButtons) & 0x0002) ? 1 : 0); // F(Start) |
sankichi | 0:e1265f6b3565 | 388 | } |
sankichi | 0:e1265f6b3565 | 389 | else |
sankichi | 0:e1265f6b3565 | 390 | { |
sankichi | 0:e1265f6b3565 | 391 | _OUT_DATA->write(((*_pButtons) & 0x0010) ? 1 : 0); // Digital C |
sankichi | 0:e1265f6b3565 | 392 | } |
sankichi | 0:e1265f6b3565 | 393 | break; |
sankichi | 0:e1265f6b3565 | 394 | |
sankichi | 0:e1265f6b3565 | 395 | case 4: |
sankichi | 0:e1265f6b3565 | 396 | // |
sankichi | 0:e1265f6b3565 | 397 | // Up |
sankichi | 0:e1265f6b3565 | 398 | // |
sankichi | 0:e1265f6b3565 | 399 | // ch1>0xf0? 0:1, // 右 |
sankichi | 0:e1265f6b3565 | 400 | // ch1<0x0f? 0:1, // 左 |
sankichi | 0:e1265f6b3565 | 401 | // ch0>0xf0? 0:1, // 下 |
sankichi | 0:e1265f6b3565 | 402 | // ch0<0x0f? 0:1 // 上 |
sankichi | 0:e1265f6b3565 | 403 | // ch2>0xf0? 0:1, // スロットル引く |
sankichi | 0:e1265f6b3565 | 404 | |
sankichi | 0:e1265f6b3565 | 405 | if((*_pInputDeviceType) == NiseKabuto::CONFIG_INMODE_CYBERSTICK_ANALOG) //サイバースティック(アナログ) |
sankichi | 0:e1265f6b3565 | 406 | { |
sankichi | 0:e1265f6b3565 | 407 | _OUT_DATA->write((*_pCh0)<0x40? 0:1); |
sankichi | 0:e1265f6b3565 | 408 | } |
sankichi | 0:e1265f6b3565 | 409 | else |
sankichi | 0:e1265f6b3565 | 410 | { |
sankichi | 0:e1265f6b3565 | 411 | _OUT_DATA->write(((*_pButtons) & 0x2000) ? 1 : 0); |
sankichi | 0:e1265f6b3565 | 412 | } |
sankichi | 0:e1265f6b3565 | 413 | break; |
sankichi | 0:e1265f6b3565 | 414 | |
sankichi | 0:e1265f6b3565 | 415 | case 5: |
sankichi | 0:e1265f6b3565 | 416 | // |
sankichi | 0:e1265f6b3565 | 417 | // Down |
sankichi | 0:e1265f6b3565 | 418 | // |
sankichi | 0:e1265f6b3565 | 419 | if((*_pInputDeviceType) == NiseKabuto::CONFIG_INMODE_CYBERSTICK_ANALOG) //サイバースティック(アナログ) |
sankichi | 0:e1265f6b3565 | 420 | { |
sankichi | 0:e1265f6b3565 | 421 | _OUT_DATA->write((*_pCh0)>0xb0? 0:1); |
sankichi | 0:e1265f6b3565 | 422 | } |
sankichi | 0:e1265f6b3565 | 423 | else |
sankichi | 0:e1265f6b3565 | 424 | { |
sankichi | 0:e1265f6b3565 | 425 | _OUT_DATA->write(((*_pButtons) & 0x1000) ? 1 : 0); |
sankichi | 0:e1265f6b3565 | 426 | } |
sankichi | 0:e1265f6b3565 | 427 | break; |
sankichi | 0:e1265f6b3565 | 428 | |
sankichi | 0:e1265f6b3565 | 429 | case 6: |
sankichi | 0:e1265f6b3565 | 430 | // |
sankichi | 0:e1265f6b3565 | 431 | // Left |
sankichi | 0:e1265f6b3565 | 432 | // |
sankichi | 0:e1265f6b3565 | 433 | if((*_pInputDeviceType) == NiseKabuto::CONFIG_INMODE_CYBERSTICK_ANALOG) //サイバースティック(アナログ) |
sankichi | 0:e1265f6b3565 | 434 | { |
sankichi | 0:e1265f6b3565 | 435 | _OUT_DATA->write((*_pCh1)<0x40? 0:1); |
sankichi | 0:e1265f6b3565 | 436 | } |
sankichi | 0:e1265f6b3565 | 437 | else |
sankichi | 0:e1265f6b3565 | 438 | { |
sankichi | 0:e1265f6b3565 | 439 | _OUT_DATA->write(((*_pButtons) & 0x0800) ? 1 : 0); |
sankichi | 0:e1265f6b3565 | 440 | } |
sankichi | 0:e1265f6b3565 | 441 | break; |
sankichi | 0:e1265f6b3565 | 442 | |
sankichi | 0:e1265f6b3565 | 443 | case 7: |
sankichi | 0:e1265f6b3565 | 444 | // |
sankichi | 0:e1265f6b3565 | 445 | // Right |
sankichi | 0:e1265f6b3565 | 446 | // |
sankichi | 0:e1265f6b3565 | 447 | if((*_pInputDeviceType) == NiseKabuto::CONFIG_INMODE_CYBERSTICK_ANALOG) //サイバースティック(アナログ) |
sankichi | 0:e1265f6b3565 | 448 | { |
sankichi | 0:e1265f6b3565 | 449 | _OUT_DATA->write((*_pCh1)>0xb0? 0:1); |
sankichi | 0:e1265f6b3565 | 450 | } |
sankichi | 0:e1265f6b3565 | 451 | else |
sankichi | 0:e1265f6b3565 | 452 | { |
sankichi | 0:e1265f6b3565 | 453 | _OUT_DATA->write(((*_pButtons) & 0x0400) ? 1 : 0); |
sankichi | 0:e1265f6b3565 | 454 | } |
sankichi | 0:e1265f6b3565 | 455 | break; |
sankichi | 0:e1265f6b3565 | 456 | |
sankichi | 0:e1265f6b3565 | 457 | default: |
sankichi | 0:e1265f6b3565 | 458 | _OUT_DATA->write(1); // H |
sankichi | 0:e1265f6b3565 | 459 | } |
sankichi | 0:e1265f6b3565 | 460 | } |
sankichi | 0:e1265f6b3565 | 461 | |
sankichi | 0:e1265f6b3565 | 462 | // |
sankichi | 0:e1265f6b3565 | 463 | // ファミコンからの読み取り処理の長さを得る(1回分) |
sankichi | 0:e1265f6b3565 | 464 | // |
sankichi | 0:e1265f6b3565 | 465 | // return: |
sankichi | 0:e1265f6b3565 | 466 | // 0 = 読み取りが行えない(烈火の可能性がある) |
sankichi | 0:e1265f6b3565 | 467 | // 0以外 = 読み取り処理長さ[us] |
sankichi | 0:e1265f6b3565 | 468 | int CheckOneReadTime(void) |
sankichi | 0:e1265f6b3565 | 469 | { |
sankichi | 0:e1265f6b3565 | 470 | int retVal = 0; |
sankichi | 0:e1265f6b3565 | 471 | char stat = 1; |
sankichi | 0:e1265f6b3565 | 472 | int intLoopCounter; // ZanacはGunnac&MMに比べて2倍 |
sankichi | 0:e1265f6b3565 | 473 | Timer t; |
sankichi | 0:e1265f6b3565 | 474 | |
sankichi | 0:e1265f6b3565 | 475 | // Latch = Hまで待つ |
sankichi | 0:e1265f6b3565 | 476 | intLoopCounter = 500000; |
sankichi | 0:e1265f6b3565 | 477 | while( !(_INTR_LATCH->read()) ) |
sankichi | 0:e1265f6b3565 | 478 | { |
sankichi | 0:e1265f6b3565 | 479 | intLoopCounter--; |
sankichi | 0:e1265f6b3565 | 480 | if( !intLoopCounter ) |
sankichi | 0:e1265f6b3565 | 481 | { |
sankichi | 0:e1265f6b3565 | 482 | stat = 0; |
sankichi | 0:e1265f6b3565 | 483 | break; |
sankichi | 0:e1265f6b3565 | 484 | } |
sankichi | 0:e1265f6b3565 | 485 | } |
sankichi | 0:e1265f6b3565 | 486 | |
sankichi | 0:e1265f6b3565 | 487 | if(stat) |
sankichi | 0:e1265f6b3565 | 488 | { |
sankichi | 0:e1265f6b3565 | 489 | // 時刻計測開始 |
sankichi | 0:e1265f6b3565 | 490 | t.start(); |
sankichi | 0:e1265f6b3565 | 491 | |
sankichi | 0:e1265f6b3565 | 492 | // Clockが8回Lになることを確認 |
sankichi | 0:e1265f6b3565 | 493 | for(int i=0; i<8; i++ ) |
sankichi | 0:e1265f6b3565 | 494 | { |
sankichi | 0:e1265f6b3565 | 495 | intLoopCounter = 1000; |
sankichi | 0:e1265f6b3565 | 496 | while( _INTR_CLOCK->read() ) |
sankichi | 0:e1265f6b3565 | 497 | { |
sankichi | 0:e1265f6b3565 | 498 | intLoopCounter--; |
sankichi | 0:e1265f6b3565 | 499 | if( !intLoopCounter ) |
sankichi | 0:e1265f6b3565 | 500 | { |
sankichi | 0:e1265f6b3565 | 501 | stat = 0; |
sankichi | 0:e1265f6b3565 | 502 | break; |
sankichi | 0:e1265f6b3565 | 503 | } |
sankichi | 0:e1265f6b3565 | 504 | } |
sankichi | 0:e1265f6b3565 | 505 | |
sankichi | 0:e1265f6b3565 | 506 | intLoopCounter = 100; |
sankichi | 0:e1265f6b3565 | 507 | while( !(_INTR_CLOCK->read()) ) |
sankichi | 0:e1265f6b3565 | 508 | { |
sankichi | 0:e1265f6b3565 | 509 | intLoopCounter--; |
sankichi | 0:e1265f6b3565 | 510 | if( !intLoopCounter ) |
sankichi | 0:e1265f6b3565 | 511 | { |
sankichi | 0:e1265f6b3565 | 512 | break; |
sankichi | 0:e1265f6b3565 | 513 | } |
sankichi | 0:e1265f6b3565 | 514 | } |
sankichi | 0:e1265f6b3565 | 515 | } |
sankichi | 0:e1265f6b3565 | 516 | } |
sankichi | 0:e1265f6b3565 | 517 | |
sankichi | 0:e1265f6b3565 | 518 | if(stat) |
sankichi | 0:e1265f6b3565 | 519 | { |
sankichi | 0:e1265f6b3565 | 520 | t.stop(); |
sankichi | 0:e1265f6b3565 | 521 | retVal = t.read_us(); |
sankichi | 0:e1265f6b3565 | 522 | } |
sankichi | 0:e1265f6b3565 | 523 | |
sankichi | 0:e1265f6b3565 | 524 | return retVal; |
sankichi | 0:e1265f6b3565 | 525 | } |
sankichi | 0:e1265f6b3565 | 526 | |
sankichi | 0:e1265f6b3565 | 527 | |
sankichi | 0:e1265f6b3565 | 528 | |
sankichi | 0:e1265f6b3565 | 529 | // |
sankichi | 0:e1265f6b3565 | 530 | // SpeedTypeを判定する |
sankichi | 0:e1265f6b3565 | 531 | // |
sankichi | 0:e1265f6b3565 | 532 | // return: |
sankichi | 0:e1265f6b3565 | 533 | // 0 = 普通モード(普通のゲーム) |
sankichi | 0:e1265f6b3565 | 534 | // 1 = 高速モード(烈火) |
sankichi | 0:e1265f6b3565 | 535 | // 2 = 低速モード(スターフォース) |
sankichi | 0:e1265f6b3565 | 536 | // よくわからないときは0を返す |
sankichi | 0:e1265f6b3565 | 537 | char CheckSpeedType(void) |
sankichi | 0:e1265f6b3565 | 538 | { |
sankichi | 0:e1265f6b3565 | 539 | char retVal = 0; |
sankichi | 0:e1265f6b3565 | 540 | int readTime[8]; |
sankichi | 0:e1265f6b3565 | 541 | char counter_recca = 0; |
sankichi | 0:e1265f6b3565 | 542 | char counter_starforce = 0; |
sankichi | 0:e1265f6b3565 | 543 | |
sankichi | 0:e1265f6b3565 | 544 | // Dataは常にH |
sankichi | 0:e1265f6b3565 | 545 | _OUT_DATA->write(1); |
sankichi | 0:e1265f6b3565 | 546 | |
sankichi | 0:e1265f6b3565 | 547 | // 8回くらいチェックする |
sankichi | 0:e1265f6b3565 | 548 | for(int i=0; i<8; i++ ) |
sankichi | 0:e1265f6b3565 | 549 | { |
sankichi | 0:e1265f6b3565 | 550 | readTime[i] = CheckOneReadTime(); |
sankichi | 0:e1265f6b3565 | 551 | printf("readTime[%d]: %d\r\n",i,readTime[i]); |
sankichi | 0:e1265f6b3565 | 552 | } |
sankichi | 0:e1265f6b3565 | 553 | |
sankichi | 0:e1265f6b3565 | 554 | // 個別の結果判定 |
sankichi | 0:e1265f6b3565 | 555 | for(int i=0; i<8; i++ ) |
sankichi | 0:e1265f6b3565 | 556 | { |
sankichi | 0:e1265f6b3565 | 557 | if( readTime[i]>DIGITALPAD_SPEED_STARFORCE ) |
sankichi | 0:e1265f6b3565 | 558 | { |
sankichi | 0:e1265f6b3565 | 559 | counter_starforce++; |
sankichi | 0:e1265f6b3565 | 560 | } |
sankichi | 0:e1265f6b3565 | 561 | else if( readTime[i]<DIGITALPAD_SPEED_RECCA ) |
sankichi | 0:e1265f6b3565 | 562 | { |
sankichi | 0:e1265f6b3565 | 563 | counter_recca++; |
sankichi | 0:e1265f6b3565 | 564 | } |
sankichi | 0:e1265f6b3565 | 565 | else |
sankichi | 0:e1265f6b3565 | 566 | { |
sankichi | 0:e1265f6b3565 | 567 | } |
sankichi | 0:e1265f6b3565 | 568 | } |
sankichi | 0:e1265f6b3565 | 569 | |
sankichi | 0:e1265f6b3565 | 570 | // 判定 |
sankichi | 0:e1265f6b3565 | 571 | if(counter_starforce >= 4) |
sankichi | 0:e1265f6b3565 | 572 | { |
sankichi | 0:e1265f6b3565 | 573 | retVal = 2; |
sankichi | 0:e1265f6b3565 | 574 | } |
sankichi | 0:e1265f6b3565 | 575 | else if(counter_recca >= 4) |
sankichi | 0:e1265f6b3565 | 576 | { |
sankichi | 0:e1265f6b3565 | 577 | retVal = 1; |
sankichi | 0:e1265f6b3565 | 578 | } |
sankichi | 0:e1265f6b3565 | 579 | |
sankichi | 0:e1265f6b3565 | 580 | return retVal; |
sankichi | 0:e1265f6b3565 | 581 | } |
sankichi | 0:e1265f6b3565 | 582 | |
sankichi | 0:e1265f6b3565 | 583 | // |
sankichi | 0:e1265f6b3565 | 584 | // Configure speed setting |
sankichi | 0:e1265f6b3565 | 585 | // |
sankichi | 0:e1265f6b3565 | 586 | void ConfigureSpeed(void) |
sankichi | 0:e1265f6b3565 | 587 | { |
sankichi | 0:e1265f6b3565 | 588 | char speed; |
sankichi | 0:e1265f6b3565 | 589 | |
sankichi | 0:e1265f6b3565 | 590 | // ISR登録解除 |
sankichi | 0:e1265f6b3565 | 591 | _INTR_LATCH->rise(0); |
sankichi | 0:e1265f6b3565 | 592 | |
sankichi | 0:e1265f6b3565 | 593 | // ちょっと待つ |
sankichi | 0:e1265f6b3565 | 594 | wait_ms(500); |
sankichi | 0:e1265f6b3565 | 595 | |
sankichi | 0:e1265f6b3565 | 596 | speed = CheckSpeedType(); |
sankichi | 0:e1265f6b3565 | 597 | |
sankichi | 0:e1265f6b3565 | 598 | // Interrupt Setting |
sankichi | 0:e1265f6b3565 | 599 | if( speed==1 ) |
sankichi | 0:e1265f6b3565 | 600 | { |
sankichi | 0:e1265f6b3565 | 601 | led2_FC.write(1); |
sankichi | 0:e1265f6b3565 | 602 | led3_FC.write(1); |
sankichi | 0:e1265f6b3565 | 603 | _INTR_LATCH->rise(&ISR_Rise_LATCH_RECCA); |
sankichi | 0:e1265f6b3565 | 604 | } |
sankichi | 0:e1265f6b3565 | 605 | else if( speed==2 ) |
sankichi | 0:e1265f6b3565 | 606 | { |
sankichi | 0:e1265f6b3565 | 607 | led2_FC.write(0); |
sankichi | 0:e1265f6b3565 | 608 | led3_FC.write(0); |
sankichi | 0:e1265f6b3565 | 609 | _INTR_LATCH->rise(&ISR_Rise_LATCH_STARFORCE); |
sankichi | 0:e1265f6b3565 | 610 | } |
sankichi | 0:e1265f6b3565 | 611 | else |
sankichi | 0:e1265f6b3565 | 612 | { |
sankichi | 0:e1265f6b3565 | 613 | led2_FC.write(0); |
sankichi | 0:e1265f6b3565 | 614 | led3_FC.write(1); |
sankichi | 0:e1265f6b3565 | 615 | _INTR_LATCH->rise(&ISR_Rise_LATCH); |
sankichi | 0:e1265f6b3565 | 616 | } |
sankichi | 0:e1265f6b3565 | 617 | |
sankichi | 0:e1265f6b3565 | 618 | } |
sankichi | 0:e1265f6b3565 | 619 | |
sankichi | 0:e1265f6b3565 | 620 | // |
sankichi | 0:e1265f6b3565 | 621 | // ISR for POWERDETECT L->H |
sankichi | 0:e1265f6b3565 | 622 | // |
sankichi | 0:e1265f6b3565 | 623 | void ISR_Rise_POWERDETECT(void) |
sankichi | 0:e1265f6b3565 | 624 | { |
sankichi | 0:e1265f6b3565 | 625 | ConfigureSpeed(); |
sankichi | 0:e1265f6b3565 | 626 | } |
sankichi | 0:e1265f6b3565 | 627 | |
sankichi | 0:e1265f6b3565 | 628 | void RapidStateTickerMethod(void) |
sankichi | 0:e1265f6b3565 | 629 | { |
sankichi | 0:e1265f6b3565 | 630 | _RapidFireValue = !_RapidFireValue; |
sankichi | 0:e1265f6b3565 | 631 | } |
sankichi | 0:e1265f6b3565 | 632 |