gameconのCLK,SELがUARTのTXD0,RXD0と被っている問題やっと解決したー
もう遅いので詳細は明日書きますが、やったことはgameconで使用しているTXD0,RXD0をそれぞれGPIO16,GPIO17に変更しました。
これでUARTが普通に使えるはずなので、UARTとArduinoを繋げば極力無駄なIFを省くことが可能かと
とりあえずdiff載せときます。
--- gamecon_gpio_rpi_org.c 2015-02-28 05:22:03.999993500 +0900
+++ gamecon_gpio_rpi_new.c 2017-01-08 02:27:53.309923619 +0900
@@ -45,11 +45,11 @@
#define GPIO_BASE (BCM2708_PERI_BASE + 0x200000) /* GPIO controller */
+static volatile unsigned *gpio;
+
#define GPIO_SET *(gpio+7)
#define GPIO_CLR *(gpio+10)
-static volatile unsigned *gpio;
-
struct gc_config {
int args[GC_MAX_DEVICES];
unsigned int nargs;
@@ -562,8 +562,8 @@
#define GC_PSX_RUMBLE 7 /* Rumble in Red mode */
#define GC_PSX_CLOCK (1<<18) /* Pin 18 */
-#define GC_PSX_COMMAND (1<<14) /* Pin 14 */
-#define GC_PSX_SELECT (1<<15) /* Pin 15 */
+#define GC_PSX_COMMAND (1<<16) /* Pin 16 */
+#define GC_PSX_SELECT (1<<17) /* Pin 17 */
#define GC_PSX_ID(x) ((x) >> 4) /* High nibble is device type */
#define GC_PSX_LEN(x) (((x) & 0xf) << 1) /* Low nibble is length in bytes/2 */
@@ -1026,9 +1026,20 @@
if (gc->pad_count[GC_PSX] ||
gc->pad_count[GC_DDR]) {
- /* set clk, cmd & sel pins to OUTPUT */
+ /* set clk, cmd & sel pins to OUTPUT
+ 12 = GPIO14(CMD)
+ 15 = GPIO15(SEL)
+ 24 = GPIO18(CLK)
+ to
+ 18 = GPIO16(CMD)
+ 21 = GPIO17(SEL)
+ 24 = GPIO18(CLK)
+
*(gpio+1) &= ~((7<<12) | (7<<15) | (7<<24));
*(gpio+1) |= ((1<<12) | (1<<15) | (1<<24));
+ */
+ *(gpio+1) &= ~((7<<18) | (7<<21) | (7<<24));
+ *(gpio+1) |= ((1<<18) | (1<<21) | (1<<24));
}
return gc;
Posted at 2017/01/08 02:50:04 | |
トラックバック(0) |
gimx | 趣味