スーパーファミコン コントローラーの無線化プロジェクト:2コン対応準備(テスト)
準備段階という事で、2コン対応が完了しているものではありません。
【2コンへの対応(P/S、CLKのタイミング)】
一つのICからの出力を分けているだけと思われる。(中身の回路を追った訳ではない)
DATだけを2系統用意すればよくて、その他は1コンの信号を基にすれば十分
【ESPのダイレクトにGPIO書き込みと読み込み】
digitalWriteやdigitalReadを使うと一つのGPIOを順に操作する事になるので、一度に設定、一度に読み込みを実装できるようにしないといけないなあ~とテスト
#define myPin1 14
#define myPinBit1 (1<<myPin1)
#define myPin2 12
#define myPinBit2 (1<<myPin2)
#define readPin1 4
#define readPinBit1 (1<<readPin1)
#define readPin2 5
#define readPinBit2 (1<<readPin2)
uint32_t regvalue=0;
void setup() {
Serial.begin(115200);
pinMode(myPin1,OUTPUT);
pinMode(myPin2,OUTPUT);
pinMode(readPin1,INPUT_PULLUP);
pinMode(readPin2,INPUT_PULLUP);
}
void loop() {
WRITE_PERI_REG( PERIPHS_GPIO_BASEADDR + 4, myPinBit1 | myPinBit2);
regvalue=READ_PERI_REG(PERIPHS_GPIO_BASEADDR + 0x18);
Serial.println(regvalue, BIN);
delay(1000);
WRITE_PERI_REG( PERIPHS_GPIO_BASEADDR + 8, myPinBit1 | myPinBit2);
regvalue=READ_PERI_REG(PERIPHS_GPIO_BASEADDR + 0x18);
Serial.println(regvalue, BIN);
delay(1000);
}
以前にも書き込みとしては
WRITE_PERI_REG(PERIPHS_GPIO_BASEADDR + (8 - 4 * (bitRead(button_status, 15 - j))), DAT_OUTPIN_BIT);
+8はLOWに設定されて、+4はHIHGに設定されるのでこれを使って、SFCのコントローラーのDATをSFC本体に送り込む事をしていたが、読み込みは?
正しいのか?は不明だがGPIO INについては、0x18先から格納されているとのことで
READ_PERI_REGというコマンドでこのレジスタを読む
12:02:13.815 -> 11100000000000110010000000000101
12:02:14.824 -> 11100000000000110111000000110101
12:02:15.834 -> 11100000000000110010000000000101
12:02:16.840 -> 11100000000000110111000000110101
BINで出力すると上のよううに出力。
pinmodeでoutputに設定しているピンについても状態は読むようで、12ピン(ピン0が一番右なので右から13番前の緑)、14ピンの所(青)が0101と順に変化。
それを直接つないで読み取りを行ったピン4、5(右から5番目、6番目 赤)の状態も読み取りができている。
準備段階としてはまずはここまで。
コメント
コメントを投稿