First Release
Out_MD/Out_MD.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 "NiseKabuto.h" |
sankichi | 0:e1265f6b3565 | 2 | #include "CFunc_Out_MD.h" |
sankichi | 0:e1265f6b3565 | 3 | |
sankichi | 0:e1265f6b3565 | 4 | // 32Xスペハリのタイトルがおかしい問題 |
sankichi | 0:e1265f6b3565 | 5 | // ・デジタルモードのとき、発生しない |
sankichi | 0:e1265f6b3565 | 6 | // サイバースティック読み取りに原因?? |
sankichi | 0:e1265f6b3565 | 7 | // ・Ack=Hのときにウェイトを入れても効果なし |
sankichi | 0:e1265f6b3565 | 8 | // ・Start押しっぱなし現象? |
sankichi | 0:e1265f6b3565 | 9 | // ⇒In_CSの読み取り中に割り込み禁止にすることで解決? |
sankichi | 0:e1265f6b3565 | 10 | |
sankichi | 0:e1265f6b3565 | 11 | // (Analog)ハングアップ問題; |
sankichi | 0:e1265f6b3565 | 12 | // この関数はメガドラからの要求の都度、呼ばれているのに、 |
sankichi | 0:e1265f6b3565 | 13 | // _NowWritingが1のため、関数内に入らない問題 |
sankichi | 0:e1265f6b3565 | 14 | // if(_AckCounter < 13) で直った?->だめ |
sankichi | 0:e1265f6b3565 | 15 | // (Analog)勝手にポーズ押しちゃう問題 |
sankichi | 0:e1265f6b3565 | 16 | // 32Xスペハリ6面くらいまで進んだとき発生/何も操作しない状態で放置しても発生しない |
sankichi | 0:e1265f6b3565 | 17 | // ACK立ち上げ後のwait変えても効果なし |
sankichi | 0:e1265f6b3565 | 18 | // 入力クラスからは送られていない->メガドラへの送信フェーズずれた? |
sankichi | 0:e1265f6b3565 | 19 | // |
sankichi | 0:e1265f6b3565 | 20 | // ⇒2件への対策として、Analog処理作り直し。データSetにTickerを使用しないようにする。 |
sankichi | 0:e1265f6b3565 | 21 | // |
sankichi | 0:e1265f6b3565 | 22 | // (Analog)武者アレスタの動作がおかしい |
sankichi | 0:e1265f6b3565 | 23 | // サイバースティック読み取りルーチンの割り込み禁止のせいかも? |
sankichi | 0:e1265f6b3565 | 24 | |
sankichi | 0:e1265f6b3565 | 25 | // |
sankichi | 0:e1265f6b3565 | 26 | // Constructor |
sankichi | 0:e1265f6b3565 | 27 | // |
sankichi | 0:e1265f6b3565 | 28 | Out_MD::Out_MD( |
sankichi | 0:e1265f6b3565 | 29 | PinName pn_D0, PinName pn_D1, PinName pn_D2, PinName pn_D3, |
sankichi | 0:e1265f6b3565 | 30 | PinName pn_LH, PinName pn_REQ, PinName pn_ACK, |
sankichi | 0:e1265f6b3565 | 31 | InputStatus *inputStatus) |
sankichi | 0:e1265f6b3565 | 32 | : _OUT_D0(pn_D0), _OUT_D1(pn_D1), _OUT_D2(pn_D2), _OUT_D3(pn_D3), _OUT_LH(pn_LH), _INTR_REQ(pn_REQ), _OUT_ACK(pn_ACK), |
sankichi | 0:e1265f6b3565 | 33 | _DataBus(pn_D0, pn_D1, pn_D2, pn_D3) |
sankichi | 0:e1265f6b3565 | 34 | { |
sankichi | 0:e1265f6b3565 | 35 | _InputStatus = inputStatus; |
sankichi | 0:e1265f6b3565 | 36 | |
sankichi | 0:e1265f6b3565 | 37 | Initialize(); |
sankichi | 0:e1265f6b3565 | 38 | } |
sankichi | 0:e1265f6b3565 | 39 | |
sankichi | 0:e1265f6b3565 | 40 | // |
sankichi | 0:e1265f6b3565 | 41 | // Initialize |
sankichi | 0:e1265f6b3565 | 42 | // |
sankichi | 0:e1265f6b3565 | 43 | void Out_MD::Initialize() |
sankichi | 0:e1265f6b3565 | 44 | { |
sankichi | 0:e1265f6b3565 | 45 | // Class Variable Setting |
sankichi | 0:e1265f6b3565 | 46 | |
sankichi | 0:e1265f6b3565 | 47 | // Pin Setting |
sankichi | 0:e1265f6b3565 | 48 | _INTR_REQ.mode(PullUp); |
sankichi | 0:e1265f6b3565 | 49 | |
sankichi | 0:e1265f6b3565 | 50 | // Reset Interrupt Setting |
sankichi | 0:e1265f6b3565 | 51 | DisableModeChecker(); |
sankichi | 0:e1265f6b3565 | 52 | _INTR_REQ.fall(NULL); |
sankichi | 0:e1265f6b3565 | 53 | _DigitalStateRenewTicker.detach(); |
sankichi | 0:e1265f6b3565 | 54 | _DigitalPeriodicPollingTicker.detach(); |
sankichi | 0:e1265f6b3565 | 55 | _InputMode = _InputStatus->InputDeviceType; |
sankichi | 0:e1265f6b3565 | 56 | _SwapAC = 0; |
sankichi | 0:e1265f6b3565 | 57 | _AnalogMUSHAMethod = 0; |
sankichi | 0:e1265f6b3565 | 58 | // InitInterruptPriority(); |
sankichi | 0:e1265f6b3565 | 59 | |
sankichi | 0:e1265f6b3565 | 60 | switch(_InputMode) |
sankichi | 0:e1265f6b3565 | 61 | { |
sankichi | 0:e1265f6b3565 | 62 | // |
sankichi | 0:e1265f6b3565 | 63 | // Input: CyberStick ANALOG mode |
sankichi | 0:e1265f6b3565 | 64 | // |
sankichi | 0:e1265f6b3565 | 65 | case NiseKabuto::CONFIG_INMODE_CYBERSTICK_ANALOG: |
sankichi | 0:e1265f6b3565 | 66 | // Class Variable Setting |
sankichi | 0:e1265f6b3565 | 67 | _TransferSpeed = TRANSFERSPEED_1_4__MICROSEC; // もっとも遅い速度から開始 |
sankichi | 0:e1265f6b3565 | 68 | // _TransferSpeed = TRANSFERSPEED_MAX__MICROSEC; // 最速速度から開始 |
sankichi | 0:e1265f6b3565 | 69 | /* |
sankichi | 0:e1265f6b3565 | 70 | if( |
sankichi | 0:e1265f6b3565 | 71 | !((_InputStatus->Buttons) & 0x00003) // Start+Selectが押されてる |
sankichi | 0:e1265f6b3565 | 72 | ) |
sankichi | 0:e1265f6b3565 | 73 | { |
sankichi | 0:e1265f6b3565 | 74 | _AnalogMUSHAMethod = 1; // 武者アレスタ向けAnalog処理 有効 |
sankichi | 0:e1265f6b3565 | 75 | } |
sankichi | 0:e1265f6b3565 | 76 | */ |
sankichi | 0:e1265f6b3565 | 77 | |
sankichi | 0:e1265f6b3565 | 78 | // Interrupt Setting |
sankichi | 0:e1265f6b3565 | 79 | _INTR_REQ.fall(this, &Out_MD::ISR_Analog_ReqFall); |
sankichi | 0:e1265f6b3565 | 80 | |
sankichi | 0:e1265f6b3565 | 81 | |
sankichi | 0:e1265f6b3565 | 82 | // Initialize pin status |
sankichi | 0:e1265f6b3565 | 83 | _OUT_D0 = 1; |
sankichi | 0:e1265f6b3565 | 84 | _OUT_D1 = 1; |
sankichi | 0:e1265f6b3565 | 85 | _OUT_D2 = 1; |
sankichi | 0:e1265f6b3565 | 86 | _OUT_D3 = 1; |
sankichi | 0:e1265f6b3565 | 87 | _OUT_LH = 0; |
sankichi | 0:e1265f6b3565 | 88 | // _OUT_LH = 1; // 常にH版 |
sankichi | 0:e1265f6b3565 | 89 | _OUT_ACK = 1; // output ACK = H |
sankichi | 0:e1265f6b3565 | 90 | break; |
sankichi | 0:e1265f6b3565 | 91 | |
sankichi | 0:e1265f6b3565 | 92 | // |
sankichi | 0:e1265f6b3565 | 93 | // Input: CyberStick DIGITAL mode |
sankichi | 0:e1265f6b3565 | 94 | // Input: MD6B |
sankichi | 0:e1265f6b3565 | 95 | // |
sankichi | 0:e1265f6b3565 | 96 | case NiseKabuto::CONFIG_INMODE_CYBERSTICK_DIGITAL: |
sankichi | 0:e1265f6b3565 | 97 | case NiseKabuto::CONFIG_INMODE_MD6B: |
sankichi | 0:e1265f6b3565 | 98 | default: |
sankichi | 0:e1265f6b3565 | 99 | if( |
sankichi | 0:e1265f6b3565 | 100 | !((_InputStatus->Buttons) & 0x00020) // Cが押されてる |
sankichi | 0:e1265f6b3565 | 101 | ) |
sankichi | 0:e1265f6b3565 | 102 | { |
sankichi | 0:e1265f6b3565 | 103 | _SwapAC = 1; |
sankichi | 0:e1265f6b3565 | 104 | } |
sankichi | 0:e1265f6b3565 | 105 | |
sankichi | 0:e1265f6b3565 | 106 | Cfunc_Out_MD_Initialize( |
sankichi | 0:e1265f6b3565 | 107 | &_OUT_D0, &_OUT_D1, &_OUT_D2, &_OUT_D3, |
sankichi | 0:e1265f6b3565 | 108 | &_OUT_LH, &_INTR_REQ, &_OUT_ACK, |
sankichi | 0:e1265f6b3565 | 109 | &_ButtonStatus, |
sankichi | 0:e1265f6b3565 | 110 | _SwapAC |
sankichi | 0:e1265f6b3565 | 111 | ); |
sankichi | 0:e1265f6b3565 | 112 | |
sankichi | 0:e1265f6b3565 | 113 | EnableDigitalStateRenew(); |
sankichi | 0:e1265f6b3565 | 114 | RestartDigitalPeriodicPolling(); |
sankichi | 0:e1265f6b3565 | 115 | break; |
sankichi | 0:e1265f6b3565 | 116 | } |
sankichi | 0:e1265f6b3565 | 117 | |
sankichi | 0:e1265f6b3565 | 118 | EnableModeChecker(); |
sankichi | 0:e1265f6b3565 | 119 | } |
sankichi | 0:e1265f6b3565 | 120 | /* |
sankichi | 0:e1265f6b3565 | 121 | void Out_MD::InitInterruptPriority(void) |
sankichi | 0:e1265f6b3565 | 122 | { |
sankichi | 0:e1265f6b3565 | 123 | // http://mbed.org/users/earlz/code/MbedConsole/file/370b9e559f92/main.cpp |
sankichi | 0:e1265f6b3565 | 124 | |
sankichi | 0:e1265f6b3565 | 125 | NVIC_SetPriority(NonMaskableInt_IRQn, 100 ); |
sankichi | 0:e1265f6b3565 | 126 | NVIC_SetPriority(MemoryManagement_IRQn, 100); |
sankichi | 0:e1265f6b3565 | 127 | |
sankichi | 0:e1265f6b3565 | 128 | NVIC_SetPriority(BusFault_IRQn, 100); |
sankichi | 0:e1265f6b3565 | 129 | NVIC_SetPriority(UsageFault_IRQn, 100); |
sankichi | 0:e1265f6b3565 | 130 | NVIC_SetPriority(SVCall_IRQn, 100); |
sankichi | 0:e1265f6b3565 | 131 | NVIC_SetPriority(DebugMonitor_IRQn, 100); |
sankichi | 0:e1265f6b3565 | 132 | NVIC_SetPriority(PendSV_IRQn, 100); |
sankichi | 0:e1265f6b3565 | 133 | NVIC_SetPriority(SysTick_IRQn, 50); |
sankichi | 0:e1265f6b3565 | 134 | NVIC_SetPriority(WDT_IRQn, 100); |
sankichi | 0:e1265f6b3565 | 135 | NVIC_SetPriority(TIMER0_IRQn, 85); |
sankichi | 0:e1265f6b3565 | 136 | NVIC_SetPriority(TIMER1_IRQn, 85); |
sankichi | 0:e1265f6b3565 | 137 | NVIC_SetPriority(TIMER2_IRQn, 85); |
sankichi | 0:e1265f6b3565 | 138 | NVIC_SetPriority(TIMER3_IRQn, 85); |
sankichi | 0:e1265f6b3565 | 139 | NVIC_SetPriority(UART0_IRQn, 75); |
sankichi | 0:e1265f6b3565 | 140 | NVIC_SetPriority(UART1_IRQn, 100); |
sankichi | 0:e1265f6b3565 | 141 | NVIC_SetPriority(UART2_IRQn, 100); |
sankichi | 0:e1265f6b3565 | 142 | NVIC_SetPriority(UART3_IRQn, 100); |
sankichi | 0:e1265f6b3565 | 143 | |
sankichi | 0:e1265f6b3565 | 144 | NVIC_SetPriority(PWM1_IRQn, 100); |
sankichi | 0:e1265f6b3565 | 145 | NVIC_SetPriority(I2C0_IRQn, 100); |
sankichi | 0:e1265f6b3565 | 146 | NVIC_SetPriority(I2C1_IRQn, 100); |
sankichi | 0:e1265f6b3565 | 147 | NVIC_SetPriority(I2C2_IRQn, 100); |
sankichi | 0:e1265f6b3565 | 148 | NVIC_SetPriority(SPI_IRQn, 100); |
sankichi | 0:e1265f6b3565 | 149 | NVIC_SetPriority(SSP0_IRQn, 100); |
sankichi | 0:e1265f6b3565 | 150 | NVIC_SetPriority(SSP1_IRQn, 100); |
sankichi | 0:e1265f6b3565 | 151 | NVIC_SetPriority(PLL0_IRQn, 100); |
sankichi | 0:e1265f6b3565 | 152 | NVIC_SetPriority(RTC_IRQn, 100); |
sankichi | 0:e1265f6b3565 | 153 | NVIC_SetPriority(EINT0_IRQn, 100); |
sankichi | 0:e1265f6b3565 | 154 | NVIC_SetPriority(EINT1_IRQn, 100); |
sankichi | 0:e1265f6b3565 | 155 | |
sankichi | 0:e1265f6b3565 | 156 | NVIC_SetPriority(EINT2_IRQn, 100); |
sankichi | 0:e1265f6b3565 | 157 | NVIC_SetPriority(EINT3_IRQn, 0); // 最高 |
sankichi | 0:e1265f6b3565 | 158 | NVIC_SetPriority(ADC_IRQn, 100); |
sankichi | 0:e1265f6b3565 | 159 | NVIC_SetPriority(BOD_IRQn, 100); |
sankichi | 0:e1265f6b3565 | 160 | NVIC_SetPriority(USB_IRQn, 100); |
sankichi | 0:e1265f6b3565 | 161 | NVIC_SetPriority(CAN_IRQn, 100); |
sankichi | 0:e1265f6b3565 | 162 | NVIC_SetPriority(DMA_IRQn, 100); |
sankichi | 0:e1265f6b3565 | 163 | |
sankichi | 0:e1265f6b3565 | 164 | NVIC_SetPriority(I2S_IRQn, 100); |
sankichi | 0:e1265f6b3565 | 165 | NVIC_SetPriority(ENET_IRQn, 100); |
sankichi | 0:e1265f6b3565 | 166 | NVIC_SetPriority(RIT_IRQn, 100); |
sankichi | 0:e1265f6b3565 | 167 | NVIC_SetPriority(MCPWM_IRQn, 100); |
sankichi | 0:e1265f6b3565 | 168 | NVIC_SetPriority(QEI_IRQn, 100); |
sankichi | 0:e1265f6b3565 | 169 | NVIC_SetPriority(PLL1_IRQn, 100); |
sankichi | 0:e1265f6b3565 | 170 | |
sankichi | 0:e1265f6b3565 | 171 | } |
sankichi | 0:e1265f6b3565 | 172 | */ |
sankichi | 0:e1265f6b3565 | 173 | |
sankichi | 0:e1265f6b3565 | 174 | |
sankichi | 0:e1265f6b3565 | 175 | // |
sankichi | 0:e1265f6b3565 | 176 | // Set output pin status |
sankichi | 0:e1265f6b3565 | 177 | // |
sankichi | 0:e1265f6b3565 | 178 | // Input: |
sankichi | 0:e1265f6b3565 | 179 | // val: status of pins. |
sankichi | 0:e1265f6b3565 | 180 | // (MSB) ...|D3|D2|D1|D0| (LSB) |
sankichi | 0:e1265f6b3565 | 181 | // |
sankichi | 0:e1265f6b3565 | 182 | void Out_MD::SetPinValue(int val) |
sankichi | 0:e1265f6b3565 | 183 | { |
sankichi | 0:e1265f6b3565 | 184 | // 意味ない |
sankichi | 0:e1265f6b3565 | 185 | /* |
sankichi | 0:e1265f6b3565 | 186 | _DataBus = val & 0x0f; |
sankichi | 0:e1265f6b3565 | 187 | */ |
sankichi | 0:e1265f6b3565 | 188 | |
sankichi | 0:e1265f6b3565 | 189 | _OUT_D0 = val & 0x01? 1 : 0; |
sankichi | 0:e1265f6b3565 | 190 | _OUT_D1 = val & 0x02? 1 : 0; |
sankichi | 0:e1265f6b3565 | 191 | _OUT_D2 = val & 0x04? 1 : 0; |
sankichi | 0:e1265f6b3565 | 192 | _OUT_D3 = val & 0x08? 1 : 0; |
sankichi | 0:e1265f6b3565 | 193 | } |
sankichi | 0:e1265f6b3565 | 194 | |
sankichi | 0:e1265f6b3565 | 195 | |
sankichi | 0:e1265f6b3565 | 196 | |
sankichi | 0:e1265f6b3565 | 197 | |
sankichi | 0:e1265f6b3565 | 198 | |
sankichi | 0:e1265f6b3565 | 199 | // |
sankichi | 0:e1265f6b3565 | 200 | // 出力更新Ticker処理 |
sankichi | 0:e1265f6b3565 | 201 | // |
sankichi | 0:e1265f6b3565 | 202 | void Out_MD::DigitalStateRenewMethod(void) |
sankichi | 0:e1265f6b3565 | 203 | { |
sankichi | 0:e1265f6b3565 | 204 | |
sankichi | 0:e1265f6b3565 | 205 | _ButtonStatus = _InputStatus->Buttons; |
sankichi | 0:e1265f6b3565 | 206 | |
sankichi | 0:e1265f6b3565 | 207 | if( (_INTR_REQ) ) |
sankichi | 0:e1265f6b3565 | 208 | { |
sankichi | 0:e1265f6b3565 | 209 | RenewDigitalPadStatus(1); |
sankichi | 0:e1265f6b3565 | 210 | } |
sankichi | 0:e1265f6b3565 | 211 | else |
sankichi | 0:e1265f6b3565 | 212 | { |
sankichi | 0:e1265f6b3565 | 213 | RenewDigitalPadStatus(0); |
sankichi | 0:e1265f6b3565 | 214 | } |
sankichi | 0:e1265f6b3565 | 215 | |
sankichi | 0:e1265f6b3565 | 216 | } |
sankichi | 0:e1265f6b3565 | 217 | |
sankichi | 0:e1265f6b3565 | 218 | // |
sankichi | 0:e1265f6b3565 | 219 | // デジタルパッドの該当phaseのデータを出力 |
sankichi | 0:e1265f6b3565 | 220 | // |
sankichi | 0:e1265f6b3565 | 221 | void Out_MD::RenewDigitalPadStatus(char phase) |
sankichi | 0:e1265f6b3565 | 222 | { |
sankichi | 0:e1265f6b3565 | 223 | |
sankichi | 0:e1265f6b3565 | 224 | switch( phase ) |
sankichi | 0:e1265f6b3565 | 225 | { |
sankichi | 0:e1265f6b3565 | 226 | case 0: |
sankichi | 0:e1265f6b3565 | 227 | // phase0出力 |
sankichi | 0:e1265f6b3565 | 228 | |
sankichi | 0:e1265f6b3565 | 229 | // サイバースティックのデジタルモードではStartボタンは読み取れない |
sankichi | 0:e1265f6b3565 | 230 | // (カブトガニは可能) |
sankichi | 0:e1265f6b3565 | 231 | // MD Start |
sankichi | 0:e1265f6b3565 | 232 | _OUT_ACK = ( (_ButtonStatus & 0x00010) ? 1 : 0 ); // Digital "D" |
sankichi | 0:e1265f6b3565 | 233 | |
sankichi | 0:e1265f6b3565 | 234 | // MD A |
sankichi | 0:e1265f6b3565 | 235 | if(_SwapAC) |
sankichi | 0:e1265f6b3565 | 236 | { |
sankichi | 0:e1265f6b3565 | 237 | _OUT_LH =( (_ButtonStatus & 0x00020) ? 1 : 0 ); // Digital "C" |
sankichi | 0:e1265f6b3565 | 238 | } |
sankichi | 0:e1265f6b3565 | 239 | else |
sankichi | 0:e1265f6b3565 | 240 | { |
sankichi | 0:e1265f6b3565 | 241 | _OUT_LH = ( (_ButtonStatus & 0x00200) ? 1 : 0 ); // Digital "A" |
sankichi | 0:e1265f6b3565 | 242 | } |
sankichi | 0:e1265f6b3565 | 243 | _OUT_D3 = ( 0 ); |
sankichi | 0:e1265f6b3565 | 244 | _OUT_D2 = ( 0 ); |
sankichi | 0:e1265f6b3565 | 245 | |
sankichi | 0:e1265f6b3565 | 246 | // MD Down |
sankichi | 0:e1265f6b3565 | 247 | _OUT_D1 = ( (_ButtonStatus & 0x01000) ? 1 : 0 ); // Digital "Down" |
sankichi | 0:e1265f6b3565 | 248 | // MD Up |
sankichi | 0:e1265f6b3565 | 249 | _OUT_D0 = ( (_ButtonStatus & 0x02000) ? 1 : 0 ); // Digital "Up" |
sankichi | 0:e1265f6b3565 | 250 | break; |
sankichi | 0:e1265f6b3565 | 251 | |
sankichi | 0:e1265f6b3565 | 252 | case 1: |
sankichi | 0:e1265f6b3565 | 253 | // phase1出力 |
sankichi | 0:e1265f6b3565 | 254 | |
sankichi | 0:e1265f6b3565 | 255 | // MD C |
sankichi | 0:e1265f6b3565 | 256 | if(_SwapAC) |
sankichi | 0:e1265f6b3565 | 257 | { |
sankichi | 0:e1265f6b3565 | 258 | _OUT_ACK = ( (_ButtonStatus & 0x00200) ? 1 : 0 ); // Digital "A" |
sankichi | 0:e1265f6b3565 | 259 | } |
sankichi | 0:e1265f6b3565 | 260 | else |
sankichi | 0:e1265f6b3565 | 261 | { |
sankichi | 0:e1265f6b3565 | 262 | _OUT_ACK =( (_ButtonStatus & 0x00020) ? 1 : 0 ); // Digital "C" |
sankichi | 0:e1265f6b3565 | 263 | } |
sankichi | 0:e1265f6b3565 | 264 | // MD B |
sankichi | 0:e1265f6b3565 | 265 | _OUT_LH = ( (_ButtonStatus & 0x00100) ? 1 : 0 ); // Digital "B" |
sankichi | 0:e1265f6b3565 | 266 | // MD Right |
sankichi | 0:e1265f6b3565 | 267 | _OUT_D3 = ( (_ButtonStatus & 0x00400) ? 1 : 0 ); // Digital "Right" |
sankichi | 0:e1265f6b3565 | 268 | // MD Left |
sankichi | 0:e1265f6b3565 | 269 | _OUT_D2 = ( (_ButtonStatus & 0x00800) ? 1 : 0 ); // Digital "Left" |
sankichi | 0:e1265f6b3565 | 270 | // MD Down |
sankichi | 0:e1265f6b3565 | 271 | _OUT_D1 = ( (_ButtonStatus & 0x01000) ? 1 : 0 ); // Digital "Down" |
sankichi | 0:e1265f6b3565 | 272 | // MD Up |
sankichi | 0:e1265f6b3565 | 273 | _OUT_D0 = ( (_ButtonStatus & 0x02000) ? 1 : 0 ); // Digital "Up" |
sankichi | 0:e1265f6b3565 | 274 | break; |
sankichi | 0:e1265f6b3565 | 275 | |
sankichi | 0:e1265f6b3565 | 276 | default: |
sankichi | 0:e1265f6b3565 | 277 | break; |
sankichi | 0:e1265f6b3565 | 278 | } |
sankichi | 0:e1265f6b3565 | 279 | } |
sankichi | 0:e1265f6b3565 | 280 | |
sankichi | 0:e1265f6b3565 | 281 | |
sankichi | 0:e1265f6b3565 | 282 | |
sankichi | 0:e1265f6b3565 | 283 | // |
sankichi | 0:e1265f6b3565 | 284 | // 周期ポーリングの休みの間、デジタルパッド更新を行う/行わない |
sankichi | 0:e1265f6b3565 | 285 | // |
sankichi | 0:e1265f6b3565 | 286 | void Out_MD::EnableDigitalStateRenew(void) |
sankichi | 0:e1265f6b3565 | 287 | { |
sankichi | 0:e1265f6b3565 | 288 | _DigitalStateRenewTicker.attach_us( |
sankichi | 0:e1265f6b3565 | 289 | this, |
sankichi | 0:e1265f6b3565 | 290 | &Out_MD::DigitalStateRenewMethod, |
sankichi | 0:e1265f6b3565 | 291 | DIGITAL_STATE_RENEW_INTERVAL__MICROSEC |
sankichi | 0:e1265f6b3565 | 292 | ); |
sankichi | 0:e1265f6b3565 | 293 | } |
sankichi | 0:e1265f6b3565 | 294 | void Out_MD::DisableDigitalStateRenew(void) |
sankichi | 0:e1265f6b3565 | 295 | { |
sankichi | 0:e1265f6b3565 | 296 | _DigitalStateRenewTicker.detach(); |
sankichi | 0:e1265f6b3565 | 297 | } |
sankichi | 0:e1265f6b3565 | 298 | |
sankichi | 0:e1265f6b3565 | 299 | // |
sankichi | 0:e1265f6b3565 | 300 | // 周期ポーリングの開始(周期?のリセット) |
sankichi | 0:e1265f6b3565 | 301 | // |
sankichi | 0:e1265f6b3565 | 302 | void Out_MD::RestartDigitalPeriodicPolling(void) |
sankichi | 0:e1265f6b3565 | 303 | { |
sankichi | 0:e1265f6b3565 | 304 | _DigitalPeriodicPollingTicker.detach(); |
sankichi | 0:e1265f6b3565 | 305 | |
sankichi | 0:e1265f6b3565 | 306 | _DigitalPeriodicPollingTicker.attach_us( |
sankichi | 0:e1265f6b3565 | 307 | this, |
sankichi | 0:e1265f6b3565 | 308 | &Out_MD::DigitalPeriodicPollingMethod, |
sankichi | 0:e1265f6b3565 | 309 | DIGITAL_PERIODICPOLLING_INTERVAL__MICROSEC |
sankichi | 0:e1265f6b3565 | 310 | ); |
sankichi | 0:e1265f6b3565 | 311 | } |
sankichi | 0:e1265f6b3565 | 312 | |
sankichi | 0:e1265f6b3565 | 313 | // |
sankichi | 0:e1265f6b3565 | 314 | // 周期ポーリング処理 |
sankichi | 0:e1265f6b3565 | 315 | // |
sankichi | 0:e1265f6b3565 | 316 | void Out_MD::DigitalPeriodicPollingMethod(void) |
sankichi | 0:e1265f6b3565 | 317 | { |
sankichi | 0:e1265f6b3565 | 318 | // 入力タイマ処理&休みの間の更新処理 止める |
sankichi | 0:e1265f6b3565 | 319 | // DisableInput(); |
sankichi | 0:e1265f6b3565 | 320 | // DisableDigitalStateRenew(); |
sankichi | 0:e1265f6b3565 | 321 | |
sankichi | 0:e1265f6b3565 | 322 | // 割り込み禁止 |
sankichi | 0:e1265f6b3565 | 323 | __disable_irq(); |
sankichi | 0:e1265f6b3565 | 324 | |
sankichi | 0:e1265f6b3565 | 325 | Cfunc_DigitalPeriodicPollingMethod(); |
sankichi | 0:e1265f6b3565 | 326 | |
sankichi | 0:e1265f6b3565 | 327 | // 割り込み再開 |
sankichi | 0:e1265f6b3565 | 328 | __enable_irq(); |
sankichi | 0:e1265f6b3565 | 329 | |
sankichi | 0:e1265f6b3565 | 330 | |
sankichi | 0:e1265f6b3565 | 331 | // 入力タイマ処理&休みの間の更新処理 再開 |
sankichi | 0:e1265f6b3565 | 332 | // EnableDigitalStateRenew(); |
sankichi | 0:e1265f6b3565 | 333 | // EnableInput(); |
sankichi | 0:e1265f6b3565 | 334 | |
sankichi | 0:e1265f6b3565 | 335 | RestartDigitalPeriodicPolling(); |
sankichi | 0:e1265f6b3565 | 336 | |
sankichi | 0:e1265f6b3565 | 337 | } |
sankichi | 0:e1265f6b3565 | 338 | |
sankichi | 0:e1265f6b3565 | 339 | |
sankichi | 0:e1265f6b3565 | 340 | // |
sankichi | 0:e1265f6b3565 | 341 | // InputStatusのデジタルモード・アナログモード切替を見張る |
sankichi | 0:e1265f6b3565 | 342 | // |
sankichi | 0:e1265f6b3565 | 343 | void Out_MD::EnableModeChecker(void) |
sankichi | 0:e1265f6b3565 | 344 | { |
sankichi | 0:e1265f6b3565 | 345 | _ModeChecker.detach(); |
sankichi | 0:e1265f6b3565 | 346 | _ModeChecker.attach_us( |
sankichi | 0:e1265f6b3565 | 347 | this, |
sankichi | 0:e1265f6b3565 | 348 | &Out_MD::ModeCheckerMethod, |
sankichi | 0:e1265f6b3565 | 349 | MODECHECK_INTERVAL__MICROSEC |
sankichi | 0:e1265f6b3565 | 350 | ); |
sankichi | 0:e1265f6b3565 | 351 | } |
sankichi | 0:e1265f6b3565 | 352 | |
sankichi | 0:e1265f6b3565 | 353 | void Out_MD::DisableModeChecker(void) |
sankichi | 0:e1265f6b3565 | 354 | { |
sankichi | 0:e1265f6b3565 | 355 | _ModeChecker.detach(); |
sankichi | 0:e1265f6b3565 | 356 | } |
sankichi | 0:e1265f6b3565 | 357 | |
sankichi | 0:e1265f6b3565 | 358 | void Out_MD::ModeCheckerMethod(void) |
sankichi | 0:e1265f6b3565 | 359 | { |
sankichi | 0:e1265f6b3565 | 360 | // デジタル・アナログモードチェック |
sankichi | 0:e1265f6b3565 | 361 | if(_InputStatus->InputDeviceType != _InputMode) |
sankichi | 0:e1265f6b3565 | 362 | { |
sankichi | 0:e1265f6b3565 | 363 | // モード変わってたら再Initialize |
sankichi | 0:e1265f6b3565 | 364 | Initialize(); |
sankichi | 0:e1265f6b3565 | 365 | } |
sankichi | 0:e1265f6b3565 | 366 | } |
sankichi | 0:e1265f6b3565 | 367 | |
sankichi | 0:e1265f6b3565 | 368 | // |
sankichi | 0:e1265f6b3565 | 369 | // アナログスティック用:指定Phaseのデータを出力する |
sankichi | 0:e1265f6b3565 | 370 | // |
sankichi | 0:e1265f6b3565 | 371 | // 関数内部で_TransferSpeedを変化させている |
sankichi | 0:e1265f6b3565 | 372 | // |
sankichi | 0:e1265f6b3565 | 373 | // |
sankichi | 0:e1265f6b3565 | 374 | void Out_MD::SetData_Analog_PhaseOf(char phase) |
sankichi | 0:e1265f6b3565 | 375 | { |
sankichi | 0:e1265f6b3565 | 376 | // Get InputStatus |
sankichi | 0:e1265f6b3565 | 377 | InputStatus *inp = _InputStatus; |
sankichi | 0:e1265f6b3565 | 378 | |
sankichi | 0:e1265f6b3565 | 379 | // Set Data |
sankichi | 0:e1265f6b3565 | 380 | switch(phase) |
sankichi | 0:e1265f6b3565 | 381 | { |
sankichi | 0:e1265f6b3565 | 382 | case 0: |
sankichi | 0:e1265f6b3565 | 383 | // このとき、まだ1回目のAck立ち下げは行っていない |
sankichi | 0:e1265f6b3565 | 384 | SetPinValue( |
sankichi | 0:e1265f6b3565 | 385 | (((inp->Buttons) & 0x000c)) | // E1E2 |
sankichi | 0:e1265f6b3565 | 386 | (((inp->Buttons) & 0x0003)) // FG |
sankichi | 0:e1265f6b3565 | 387 | ); |
sankichi | 0:e1265f6b3565 | 388 | break; |
sankichi | 0:e1265f6b3565 | 389 | |
sankichi | 0:e1265f6b3565 | 390 | case 1: |
sankichi | 0:e1265f6b3565 | 391 | // 1回目のAck立ち下げ終了済み |
sankichi | 0:e1265f6b3565 | 392 | SetPinValue( |
sankichi | 0:e1265f6b3565 | 393 | (((inp->Buttons) & 0x0300) >> 6) | // AB |
sankichi | 0:e1265f6b3565 | 394 | (((inp->Buttons) & 0x0030) >> 4) // CD |
sankichi | 0:e1265f6b3565 | 395 | ); |
sankichi | 0:e1265f6b3565 | 396 | break; |
sankichi | 0:e1265f6b3565 | 397 | |
sankichi | 0:e1265f6b3565 | 398 | case 2: |
sankichi | 0:e1265f6b3565 | 399 | // 2回目のAck立ち下げ終了済み |
sankichi | 0:e1265f6b3565 | 400 | SetPinValue( |
sankichi | 0:e1265f6b3565 | 401 | ((inp->Ch1) & 0x0f0) >> 4 // 2H |
sankichi | 0:e1265f6b3565 | 402 | // 0xff |
sankichi | 0:e1265f6b3565 | 403 | ); |
sankichi | 0:e1265f6b3565 | 404 | // 最速モード |
sankichi | 0:e1265f6b3565 | 405 | if(_INTR_REQ==1) |
sankichi | 0:e1265f6b3565 | 406 | { |
sankichi | 0:e1265f6b3565 | 407 | if(_TransferSpeed > TRANSFERSPEED_MAX__MICROSEC) |
sankichi | 0:e1265f6b3565 | 408 | { |
sankichi | 0:e1265f6b3565 | 409 | // printf("MAX!!!"); |
sankichi | 0:e1265f6b3565 | 410 | _TransferSpeed = TRANSFERSPEED_MAX__MICROSEC; |
sankichi | 0:e1265f6b3565 | 411 | } |
sankichi | 0:e1265f6b3565 | 412 | } |
sankichi | 0:e1265f6b3565 | 413 | break; |
sankichi | 0:e1265f6b3565 | 414 | |
sankichi | 0:e1265f6b3565 | 415 | case 3: |
sankichi | 0:e1265f6b3565 | 416 | SetPinValue( |
sankichi | 0:e1265f6b3565 | 417 | ((inp->Ch0) & 0x0f0) >> 4 // 1H |
sankichi | 0:e1265f6b3565 | 418 | // 0xff |
sankichi | 0:e1265f6b3565 | 419 | ); |
sankichi | 0:e1265f6b3565 | 420 | break; |
sankichi | 0:e1265f6b3565 | 421 | |
sankichi | 0:e1265f6b3565 | 422 | case 4: |
sankichi | 0:e1265f6b3565 | 423 | SetPinValue( |
sankichi | 0:e1265f6b3565 | 424 | ((inp->Ch3) & 0x0f0) >> 4 // 4H |
sankichi | 0:e1265f6b3565 | 425 | ); |
sankichi | 0:e1265f6b3565 | 426 | |
sankichi | 0:e1265f6b3565 | 427 | // 1/2倍速 |
sankichi | 0:e1265f6b3565 | 428 | if(_INTR_REQ==1) |
sankichi | 0:e1265f6b3565 | 429 | { |
sankichi | 0:e1265f6b3565 | 430 | if(_TransferSpeed > TRANSFERSPEED_1_2__MICROSEC) |
sankichi | 0:e1265f6b3565 | 431 | { |
sankichi | 0:e1265f6b3565 | 432 | // printf("1/2!!!"); |
sankichi | 0:e1265f6b3565 | 433 | _TransferSpeed = TRANSFERSPEED_1_2__MICROSEC; |
sankichi | 0:e1265f6b3565 | 434 | } |
sankichi | 0:e1265f6b3565 | 435 | } |
sankichi | 0:e1265f6b3565 | 436 | break; |
sankichi | 0:e1265f6b3565 | 437 | |
sankichi | 0:e1265f6b3565 | 438 | case 5: |
sankichi | 0:e1265f6b3565 | 439 | SetPinValue( |
sankichi | 0:e1265f6b3565 | 440 | ((inp->Ch2) & 0x0f0) >> 4 // 3H |
sankichi | 0:e1265f6b3565 | 441 | ); |
sankichi | 0:e1265f6b3565 | 442 | break; |
sankichi | 0:e1265f6b3565 | 443 | |
sankichi | 0:e1265f6b3565 | 444 | case 6: |
sankichi | 0:e1265f6b3565 | 445 | SetPinValue( |
sankichi | 0:e1265f6b3565 | 446 | (inp->Ch1) & 0x00f // 2L |
sankichi | 0:e1265f6b3565 | 447 | ); |
sankichi | 0:e1265f6b3565 | 448 | // 1/3倍速 |
sankichi | 0:e1265f6b3565 | 449 | if(_INTR_REQ==1) |
sankichi | 0:e1265f6b3565 | 450 | { |
sankichi | 0:e1265f6b3565 | 451 | if(_TransferSpeed > TRANSFERSPEED_1_3__MICROSEC) |
sankichi | 0:e1265f6b3565 | 452 | { |
sankichi | 0:e1265f6b3565 | 453 | // printf("1/3!!!"); |
sankichi | 0:e1265f6b3565 | 454 | _TransferSpeed = TRANSFERSPEED_1_3__MICROSEC; |
sankichi | 0:e1265f6b3565 | 455 | } |
sankichi | 0:e1265f6b3565 | 456 | } |
sankichi | 0:e1265f6b3565 | 457 | break; |
sankichi | 0:e1265f6b3565 | 458 | |
sankichi | 0:e1265f6b3565 | 459 | case 7: |
sankichi | 0:e1265f6b3565 | 460 | SetPinValue( |
sankichi | 0:e1265f6b3565 | 461 | (inp->Ch0) & 0x00f // 1L |
sankichi | 0:e1265f6b3565 | 462 | ); |
sankichi | 0:e1265f6b3565 | 463 | break; |
sankichi | 0:e1265f6b3565 | 464 | |
sankichi | 0:e1265f6b3565 | 465 | case 8: |
sankichi | 0:e1265f6b3565 | 466 | SetPinValue( |
sankichi | 0:e1265f6b3565 | 467 | (inp->Ch3) & 0x00f // 4L |
sankichi | 0:e1265f6b3565 | 468 | ); |
sankichi | 0:e1265f6b3565 | 469 | |
sankichi | 0:e1265f6b3565 | 470 | // 1/4倍速 |
sankichi | 0:e1265f6b3565 | 471 | // いらない気もする |
sankichi | 0:e1265f6b3565 | 472 | if(_INTR_REQ==1) |
sankichi | 0:e1265f6b3565 | 473 | { |
sankichi | 0:e1265f6b3565 | 474 | if(_TransferSpeed >= TRANSFERSPEED_1_4__MICROSEC) |
sankichi | 0:e1265f6b3565 | 475 | { |
sankichi | 0:e1265f6b3565 | 476 | // printf("1/4!!!"); |
sankichi | 0:e1265f6b3565 | 477 | _TransferSpeed = TRANSFERSPEED_1_4__MICROSEC; |
sankichi | 0:e1265f6b3565 | 478 | } |
sankichi | 0:e1265f6b3565 | 479 | } |
sankichi | 0:e1265f6b3565 | 480 | break; |
sankichi | 0:e1265f6b3565 | 481 | |
sankichi | 0:e1265f6b3565 | 482 | case 9: |
sankichi | 0:e1265f6b3565 | 483 | SetPinValue( |
sankichi | 0:e1265f6b3565 | 484 | (inp->Ch2) & 0x00f // 3L |
sankichi | 0:e1265f6b3565 | 485 | //カブトガニは固定値送ってるかも? |
sankichi | 0:e1265f6b3565 | 486 | //0x0a |
sankichi | 0:e1265f6b3565 | 487 | ); |
sankichi | 0:e1265f6b3565 | 488 | break; |
sankichi | 0:e1265f6b3565 | 489 | |
sankichi | 0:e1265f6b3565 | 490 | case 10: |
sankichi | 0:e1265f6b3565 | 491 | SetPinValue(0xff); |
sankichi | 0:e1265f6b3565 | 492 | break; |
sankichi | 0:e1265f6b3565 | 493 | |
sankichi | 0:e1265f6b3565 | 494 | case 11: |
sankichi | 0:e1265f6b3565 | 495 | SetPinValue( |
sankichi | 0:e1265f6b3565 | 496 | (((inp->Buttons) & 0x0300) >> 6) | // AB |
sankichi | 0:e1265f6b3565 | 497 | (((inp->Buttons) & 0x00c0)) >>6 // A+A' B+B' |
sankichi | 0:e1265f6b3565 | 498 | ); |
sankichi | 0:e1265f6b3565 | 499 | break; |
sankichi | 0:e1265f6b3565 | 500 | |
sankichi | 0:e1265f6b3565 | 501 | |
sankichi | 0:e1265f6b3565 | 502 | default: |
sankichi | 0:e1265f6b3565 | 503 | SetPinValue(0xff); |
sankichi | 0:e1265f6b3565 | 504 | break; |
sankichi | 0:e1265f6b3565 | 505 | |
sankichi | 0:e1265f6b3565 | 506 | } |
sankichi | 0:e1265f6b3565 | 507 | } |
sankichi | 0:e1265f6b3565 | 508 | |
sankichi | 0:e1265f6b3565 | 509 | // |
sankichi | 0:e1265f6b3565 | 510 | // ISR for REQ=L from Megadrive |
sankichi | 0:e1265f6b3565 | 511 | // |
sankichi | 0:e1265f6b3565 | 512 | void Out_MD::ISR_Analog_ReqFall() |
sankichi | 0:e1265f6b3565 | 513 | { |
sankichi | 0:e1265f6b3565 | 514 | // 全体が間延び数現象の原因? |
sankichi | 0:e1265f6b3565 | 515 | // __disable_irq(); |
sankichi | 0:e1265f6b3565 | 516 | |
sankichi | 0:e1265f6b3565 | 517 | // デバッグ用:この関数が呼ばれるたび+1される |
sankichi | 0:e1265f6b3565 | 518 | (_InputStatus->Temp[2])++; |
sankichi | 0:e1265f6b3565 | 519 | |
sankichi | 0:e1265f6b3565 | 520 | // |
sankichi | 0:e1265f6b3565 | 521 | // from AJOY_SUB.DOC: |
sankichi | 0:e1265f6b3565 | 522 | // -------------- |
sankichi | 0:e1265f6b3565 | 523 | //◆転送速度(各サイクルタイム) |
sankichi | 0:e1265f6b3565 | 524 | // |
sankichi | 0:e1265f6b3565 | 525 | // ┌──────┬────┐ |
sankichi | 0:e1265f6b3565 | 526 | // │ 最速モード │ 50 │ |
sankichi | 0:e1265f6b3565 | 527 | // │ 1/2倍速 │ 96 │ |
sankichi | 0:e1265f6b3565 | 528 | // │ 1/3倍速 │ 144 │ |
sankichi | 0:e1265f6b3565 | 529 | // │ 1/4倍速 │ 192 │ |
sankichi | 0:e1265f6b3565 | 530 | // └──────┴────┘ |
sankichi | 0:e1265f6b3565 | 531 | // (単位:μsec) |
sankichi | 0:e1265f6b3565 | 532 | // -------------- |
sankichi | 0:e1265f6b3565 | 533 | // ジョイコンはデータ転送要求(割り込み)により |
sankichi | 0:e1265f6b3565 | 534 | // データ転送サイクルを6回繰り返す。 |
sankichi | 0:e1265f6b3565 | 535 | // -------------- |
sankichi | 0:e1265f6b3565 | 536 | // |
sankichi | 0:e1265f6b3565 | 537 | // ↑ 以下のようなことを言いたかったのか? |
sankichi | 0:e1265f6b3565 | 538 | // ・サイバースティックは12回Ackが下がり、1回~11回目に |
sankichi | 0:e1265f6b3565 | 539 | // 『◆アナログモード時のデータ』に沿ったデータを送る。 |
sankichi | 0:e1265f6b3565 | 540 | // (12回目のデータは不明) |
sankichi | 0:e1265f6b3565 | 541 | // ・『データ転送サイクル』はAck2回分である(LHピンのLとHの組が1サイクル) |
sankichi | 0:e1265f6b3565 | 542 | // ・サイクルタイム=『データ転送サイクル』の周期 |
sankichi | 0:e1265f6b3565 | 543 | // |
sankichi | 0:e1265f6b3565 | 544 | // このように仮定すると、Ack1回分のデータは |
sankichi | 0:e1265f6b3565 | 545 | // サイクルタイム/2の間、保持していなければならないことになる。 |
sankichi | 0:e1265f6b3565 | 546 | // なので、Ack1回分のデータを、サイクルタイム/2の周期で出力することとする。 |
sankichi | 0:e1265f6b3565 | 547 | // |
sankichi | 0:e1265f6b3565 | 548 | // -------------- |
sankichi | 0:e1265f6b3565 | 549 | // AJOY.DOC |
sankichi | 0:e1265f6b3565 | 550 | //※通信速度を最高速に設定した場合、アナログジョイスティックを |
sankichi | 0:e1265f6b3565 | 551 | // リセットしないかぎり、遅い速度への変更は行われない。 |
sankichi | 0:e1265f6b3565 | 552 | // -------------- |
sankichi | 0:e1265f6b3565 | 553 | // 本物は遅い方向には速度を変えさせない |
sankichi | 0:e1265f6b3565 | 554 | |
sankichi | 0:e1265f6b3565 | 555 | char phase = 0; // データPhase: 0からスタート |
sankichi | 0:e1265f6b3565 | 556 | char savePhase; |
sankichi | 0:e1265f6b3565 | 557 | int us_Int1, us_Int2, us_Int3, us_Int4; |
sankichi | 0:e1265f6b3565 | 558 | |
sankichi | 0:e1265f6b3565 | 559 | int time10, time1, time20, time2, time3, time4, time5, time6; |
sankichi | 0:e1265f6b3565 | 560 | |
sankichi | 0:e1265f6b3565 | 561 | // 32Xスペハリ対策 |
sankichi | 0:e1265f6b3565 | 562 | // 待つ |
sankichi | 0:e1265f6b3565 | 563 | // wait_us(40); |
sankichi | 0:e1265f6b3565 | 564 | NiseKabuto::WaitUs(20); |
sankichi | 0:e1265f6b3565 | 565 | |
sankichi | 0:e1265f6b3565 | 566 | // 現在の_TransferSpeedを元に、各時間を算出 |
sankichi | 0:e1265f6b3565 | 567 | us_Int1 = (int)(_TransferSpeed /12.5 ); // 速度MAX時: 4us |
sankichi | 0:e1265f6b3565 | 568 | us_Int2 = (int)(_TransferSpeed / 8.3 ); // 速度MAX時: 6us |
sankichi | 0:e1265f6b3565 | 569 | us_Int3 = (int)(_TransferSpeed / 4.17); // 速度MAX時: 12us |
sankichi | 0:e1265f6b3565 | 570 | us_Int4 = (int)(_TransferSpeed / 3.57); // 速度MAX時: 14us |
sankichi | 0:e1265f6b3565 | 571 | |
sankichi | 0:e1265f6b3565 | 572 | time10= us_Int1; |
sankichi | 0:e1265f6b3565 | 573 | time20= us_Int4; |
sankichi | 0:e1265f6b3565 | 574 | |
sankichi | 0:e1265f6b3565 | 575 | time1 = us_Int2; |
sankichi | 0:e1265f6b3565 | 576 | time2 = us_Int3; |
sankichi | 0:e1265f6b3565 | 577 | time3 = us_Int3; |
sankichi | 0:e1265f6b3565 | 578 | time4 = us_Int1; |
sankichi | 0:e1265f6b3565 | 579 | time5 = us_Int3; |
sankichi | 0:e1265f6b3565 | 580 | time6 = us_Int1; |
sankichi | 0:e1265f6b3565 | 581 | |
sankichi | 0:e1265f6b3565 | 582 | // AckはHから開始 |
sankichi | 0:e1265f6b3565 | 583 | // LHはLから開始 |
sankichi | 0:e1265f6b3565 | 584 | _OUT_ACK = 1; |
sankichi | 0:e1265f6b3565 | 585 | _OUT_LH = 0; |
sankichi | 0:e1265f6b3565 | 586 | |
sankichi | 0:e1265f6b3565 | 587 | |
sankichi | 0:e1265f6b3565 | 588 | |
sankichi | 0:e1265f6b3565 | 589 | // サイクルタイム6回分=phase0-12 |
sankichi | 0:e1265f6b3565 | 590 | |
sankichi | 0:e1265f6b3565 | 591 | // 武者アレスタにおいて、サイクル2(phase2,3)のみ、値を送ると |
sankichi | 0:e1265f6b3565 | 592 | // タイトル画面でボタンが押されてしまう不具合あり。 |
sankichi | 0:e1265f6b3565 | 593 | // このため、サイクル2は別のタイミングでデータを送付する。 |
sankichi | 0:e1265f6b3565 | 594 | // その直前のサイクル1も改める。 |
sankichi | 0:e1265f6b3565 | 595 | |
sankichi | 0:e1265f6b3565 | 596 | |
sankichi | 0:e1265f6b3565 | 597 | |
sankichi | 0:e1265f6b3565 | 598 | // サイクル1-6 |
sankichi | 0:e1265f6b3565 | 599 | for(int i=0; i<6; i++) |
sankichi | 0:e1265f6b3565 | 600 | { |
sankichi | 0:e1265f6b3565 | 601 | if(i==0) |
sankichi | 0:e1265f6b3565 | 602 | { |
sankichi | 0:e1265f6b3565 | 603 | // No1 |
sankichi | 0:e1265f6b3565 | 604 | _OUT_ACK = 1; |
sankichi | 0:e1265f6b3565 | 605 | _OUT_LH = 0; |
sankichi | 0:e1265f6b3565 | 606 | NiseKabuto::WaitUs(time10); |
sankichi | 0:e1265f6b3565 | 607 | |
sankichi | 0:e1265f6b3565 | 608 | // No2 |
sankichi | 0:e1265f6b3565 | 609 | savePhase = phase; |
sankichi | 0:e1265f6b3565 | 610 | SetData_Analog_PhaseOf(phase++); |
sankichi | 0:e1265f6b3565 | 611 | _OUT_ACK = 1; |
sankichi | 0:e1265f6b3565 | 612 | _OUT_LH = 0; |
sankichi | 0:e1265f6b3565 | 613 | NiseKabuto::WaitUs(time20); |
sankichi | 0:e1265f6b3565 | 614 | } |
sankichi | 0:e1265f6b3565 | 615 | else |
sankichi | 0:e1265f6b3565 | 616 | { |
sankichi | 0:e1265f6b3565 | 617 | // No1 |
sankichi | 0:e1265f6b3565 | 618 | _OUT_ACK = 1; |
sankichi | 0:e1265f6b3565 | 619 | _OUT_LH = 0; |
sankichi | 0:e1265f6b3565 | 620 | NiseKabuto::WaitUs(time1-5); |
sankichi | 0:e1265f6b3565 | 621 | |
sankichi | 0:e1265f6b3565 | 622 | // No2 |
sankichi | 0:e1265f6b3565 | 623 | savePhase = phase; |
sankichi | 0:e1265f6b3565 | 624 | SetData_Analog_PhaseOf(phase++); |
sankichi | 0:e1265f6b3565 | 625 | _OUT_ACK = 1; |
sankichi | 0:e1265f6b3565 | 626 | _OUT_LH = 0; |
sankichi | 0:e1265f6b3565 | 627 | NiseKabuto::WaitUs(time2); |
sankichi | 0:e1265f6b3565 | 628 | } |
sankichi | 0:e1265f6b3565 | 629 | |
sankichi | 0:e1265f6b3565 | 630 | // No3 |
sankichi | 0:e1265f6b3565 | 631 | _OUT_ACK = 0; |
sankichi | 0:e1265f6b3565 | 632 | _OUT_LH = 0; |
sankichi | 0:e1265f6b3565 | 633 | NiseKabuto::WaitUs(time3); |
sankichi | 0:e1265f6b3565 | 634 | |
sankichi | 0:e1265f6b3565 | 635 | // No4 |
sankichi | 0:e1265f6b3565 | 636 | _OUT_ACK = 1; |
sankichi | 0:e1265f6b3565 | 637 | _OUT_LH = 1; |
sankichi | 0:e1265f6b3565 | 638 | SetData_Analog_PhaseOf(phase++); |
sankichi | 0:e1265f6b3565 | 639 | NiseKabuto::WaitUs(time4-3); |
sankichi | 0:e1265f6b3565 | 640 | |
sankichi | 0:e1265f6b3565 | 641 | // No5 |
sankichi | 0:e1265f6b3565 | 642 | _OUT_ACK = 0; |
sankichi | 0:e1265f6b3565 | 643 | _OUT_LH = 1; |
sankichi | 0:e1265f6b3565 | 644 | NiseKabuto::WaitUs(time5); |
sankichi | 0:e1265f6b3565 | 645 | |
sankichi | 0:e1265f6b3565 | 646 | // No6 |
sankichi | 0:e1265f6b3565 | 647 | _OUT_ACK = 1; |
sankichi | 0:e1265f6b3565 | 648 | _OUT_LH = 1; |
sankichi | 0:e1265f6b3565 | 649 | NiseKabuto::WaitUs(time6-1); |
sankichi | 0:e1265f6b3565 | 650 | |
sankichi | 0:e1265f6b3565 | 651 | // No7 |
sankichi | 0:e1265f6b3565 | 652 | _OUT_LH = 0; |
sankichi | 0:e1265f6b3565 | 653 | SetData_Analog_PhaseOf(savePhase); |
sankichi | 0:e1265f6b3565 | 654 | } |
sankichi | 0:e1265f6b3565 | 655 | /* |
sankichi | 0:e1265f6b3565 | 656 | // サイクル1-6 |
sankichi | 0:e1265f6b3565 | 657 | for(int i=0; i<6; i++) |
sankichi | 0:e1265f6b3565 | 658 | { |
sankichi | 0:e1265f6b3565 | 659 | if(i==0) |
sankichi | 0:e1265f6b3565 | 660 | { |
sankichi | 0:e1265f6b3565 | 661 | // No1 |
sankichi | 0:e1265f6b3565 | 662 | _OUT_ACK = 1; |
sankichi | 0:e1265f6b3565 | 663 | _OUT_LH = 0; |
sankichi | 0:e1265f6b3565 | 664 | NiseKabuto::WaitUs(time10-2); |
sankichi | 0:e1265f6b3565 | 665 | |
sankichi | 0:e1265f6b3565 | 666 | // No2 |
sankichi | 0:e1265f6b3565 | 667 | savePhase = phase; |
sankichi | 0:e1265f6b3565 | 668 | SetData_Analog_PhaseOf(phase++); |
sankichi | 0:e1265f6b3565 | 669 | _OUT_ACK = 1; |
sankichi | 0:e1265f6b3565 | 670 | _OUT_LH = 0; |
sankichi | 0:e1265f6b3565 | 671 | NiseKabuto::WaitUs(time20-2); |
sankichi | 0:e1265f6b3565 | 672 | } |
sankichi | 0:e1265f6b3565 | 673 | else |
sankichi | 0:e1265f6b3565 | 674 | { |
sankichi | 0:e1265f6b3565 | 675 | // No1 |
sankichi | 0:e1265f6b3565 | 676 | _OUT_ACK = 1; |
sankichi | 0:e1265f6b3565 | 677 | _OUT_LH = 0; |
sankichi | 0:e1265f6b3565 | 678 | NiseKabuto::WaitUs(time1-3); |
sankichi | 0:e1265f6b3565 | 679 | |
sankichi | 0:e1265f6b3565 | 680 | // No2 |
sankichi | 0:e1265f6b3565 | 681 | savePhase = phase; |
sankichi | 0:e1265f6b3565 | 682 | SetData_Analog_PhaseOf(phase++); |
sankichi | 0:e1265f6b3565 | 683 | _OUT_ACK = 1; |
sankichi | 0:e1265f6b3565 | 684 | _OUT_LH = 0; |
sankichi | 0:e1265f6b3565 | 685 | NiseKabuto::WaitUs(time2-2); |
sankichi | 0:e1265f6b3565 | 686 | } |
sankichi | 0:e1265f6b3565 | 687 | |
sankichi | 0:e1265f6b3565 | 688 | // No3 |
sankichi | 0:e1265f6b3565 | 689 | _OUT_ACK = 0; |
sankichi | 0:e1265f6b3565 | 690 | _OUT_LH = 0; |
sankichi | 0:e1265f6b3565 | 691 | NiseKabuto::WaitUs(time3-1); |
sankichi | 0:e1265f6b3565 | 692 | |
sankichi | 0:e1265f6b3565 | 693 | // No4 |
sankichi | 0:e1265f6b3565 | 694 | _OUT_ACK = 1; |
sankichi | 0:e1265f6b3565 | 695 | _OUT_LH = 1; |
sankichi | 0:e1265f6b3565 | 696 | SetData_Analog_PhaseOf(phase++); |
sankichi | 0:e1265f6b3565 | 697 | NiseKabuto::WaitUs(time4-3); |
sankichi | 0:e1265f6b3565 | 698 | |
sankichi | 0:e1265f6b3565 | 699 | // No5 |
sankichi | 0:e1265f6b3565 | 700 | _OUT_ACK = 0; |
sankichi | 0:e1265f6b3565 | 701 | _OUT_LH = 1; |
sankichi | 0:e1265f6b3565 | 702 | NiseKabuto::WaitUs(time5); |
sankichi | 0:e1265f6b3565 | 703 | |
sankichi | 0:e1265f6b3565 | 704 | // No6 |
sankichi | 0:e1265f6b3565 | 705 | _OUT_ACK = 1; |
sankichi | 0:e1265f6b3565 | 706 | _OUT_LH = 1; |
sankichi | 0:e1265f6b3565 | 707 | NiseKabuto::WaitUs(time6-1); |
sankichi | 0:e1265f6b3565 | 708 | |
sankichi | 0:e1265f6b3565 | 709 | // No7 |
sankichi | 0:e1265f6b3565 | 710 | _OUT_LH = 0; |
sankichi | 0:e1265f6b3565 | 711 | SetData_Analog_PhaseOf(savePhase); |
sankichi | 0:e1265f6b3565 | 712 | } |
sankichi | 0:e1265f6b3565 | 713 | */ |
sankichi | 0:e1265f6b3565 | 714 | _OUT_LH = 0; |
sankichi | 0:e1265f6b3565 | 715 | |
sankichi | 0:e1265f6b3565 | 716 | // __enable_irq(); |
sankichi | 0:e1265f6b3565 | 717 | |
sankichi | 0:e1265f6b3565 | 718 | } |
sankichi | 0:e1265f6b3565 | 719 | |
sankichi | 0:e1265f6b3565 | 720 | |
sankichi | 0:e1265f6b3565 | 721 | |
sankichi | 0:e1265f6b3565 | 722 | |
sankichi | 0:e1265f6b3565 | 723 | |
sankichi | 0:e1265f6b3565 | 724 | |
sankichi | 0:e1265f6b3565 | 725 | |
sankichi | 0:e1265f6b3565 | 726 | void Out_MD::SetupInputControll(void (*startInputFunction)(void), void (*stopInputFunction)(void)) |
sankichi | 0:e1265f6b3565 | 727 | { |
sankichi | 0:e1265f6b3565 | 728 | StartInputFunction = startInputFunction; |
sankichi | 0:e1265f6b3565 | 729 | StopInputFunction = stopInputFunction; |
sankichi | 0:e1265f6b3565 | 730 | } |
sankichi | 0:e1265f6b3565 | 731 | |
sankichi | 0:e1265f6b3565 | 732 | void Out_MD::EnableInput(void) |
sankichi | 0:e1265f6b3565 | 733 | { |
sankichi | 0:e1265f6b3565 | 734 | if(_InputInstance && StartInputMethod) |
sankichi | 0:e1265f6b3565 | 735 | { |
sankichi | 0:e1265f6b3565 | 736 | (_InputInstance->*StartInputMethod)(); |
sankichi | 0:e1265f6b3565 | 737 | } |
sankichi | 0:e1265f6b3565 | 738 | else if(StartInputFunction) |
sankichi | 0:e1265f6b3565 | 739 | { |
sankichi | 0:e1265f6b3565 | 740 | StartInputFunction(); |
sankichi | 0:e1265f6b3565 | 741 | } |
sankichi | 0:e1265f6b3565 | 742 | } |
sankichi | 0:e1265f6b3565 | 743 | |
sankichi | 0:e1265f6b3565 | 744 | void Out_MD::DisableInput(void) |
sankichi | 0:e1265f6b3565 | 745 | { |
sankichi | 0:e1265f6b3565 | 746 | if(_InputInstance && StopInputMethod) |
sankichi | 0:e1265f6b3565 | 747 | { |
sankichi | 0:e1265f6b3565 | 748 | (_InputInstance->*StopInputMethod)(); |
sankichi | 0:e1265f6b3565 | 749 | } |
sankichi | 0:e1265f6b3565 | 750 | else if(StopInputFunction) |
sankichi | 0:e1265f6b3565 | 751 | { |
sankichi | 0:e1265f6b3565 | 752 | StopInputFunction(); |
sankichi | 0:e1265f6b3565 | 753 | } |
sankichi | 0:e1265f6b3565 | 754 | } |
sankichi | 0:e1265f6b3565 | 755 |