|
Smartype 发表于 2013-5-21 08:51
那我拿你的图改一下吧。需要开新帖么?
其实就是这样的,把开关上的所有二极管去掉。接一个二极管到PC6上面来,也就是图中灰色的线。
deviation 的patch:
- diff -rupN original/src/target/devo7e/capabilities.h new/src/target/devo7e/capabilities.h
- --- original/src/target/devo7e/capabilities.h 2013-05-20 17:51:52.000000000 +0800
- +++ new/src/target/devo7e/capabilities.h 2013-05-20 17:30:05.000000000 +0800
- @@ -7,15 +7,21 @@
- CHANDEF(HOLD1)
- CHANDEF(FMOD0)
- CHANDEF(FMOD1)
- + CHANDEF(AIL_DR0)
- + CHANDEF(AIL_DR1)
- + CHANDEF(AIL_DR2)
- + CHANDEF(ELE_DR0)
- + CHANDEF(ELE_DR1)
- + CHANDEF(ELE_DR2)
- #endif
- #ifdef UNDEF_INP
- #define INP_RUD_DR0 INP_HOLD0
- #define INP_RUD_DR1 INP_HOLD1
- -#define INP_ELE_DR0 INP_HOLD0
- -#define INP_ELE_DR1 INP_HOLD1
- -#define INP_AIL_DR0 INP_HOLD0
- -#define INP_AIL_DR1 INP_HOLD1
- +//#define INP_ELE_DR0 INP_HOLD0
- +//#define INP_ELE_DR1 INP_HOLD1
- +//#define INP_AIL_DR0 INP_HOLD0
- +//#define INP_AIL_DR1 INP_HOLD1
- #define INP_FMOD2 INP_FMOD1
- #define INP_MIX0 INP_FMOD0
- #define INP_MIX1 INP_FMOD1
- diff -rupN original/src/target/devo7e/channels.c new/src/target/devo7e/channels.c
- --- original/src/target/devo7e/channels.c 2013-05-20 17:51:52.000000000 +0800
- +++ new/src/target/devo7e/channels.c 2013-05-20 17:30:05.000000000 +0800
- @@ -40,6 +40,7 @@ void CHAN_Init()
- gpio_set(GPIOC, GPIO10 | GPIO11);
- }
- +extern u32 glbl_buttons;
- s32 CHAN_ReadRawInput(int channel)
- {
- s32 value = 0;
- @@ -52,6 +53,16 @@ s32 CHAN_ReadRawInput(int channel)
- case INP_HOLD1: value = ! gpio_get(GPIOC, GPIO11); break;
- case INP_FMOD0: value = gpio_get(GPIOC, GPIO10); break;
- case INP_FMOD1: value = ! gpio_get(GPIOC, GPIO10); break;
- +
- + case INP_AIL_DR0: value = !!(glbl_buttons & (1 << 0)); break;
- + case INP_AIL_DR1: value = (!(glbl_buttons & (1 << 0)))
- + && (!(glbl_buttons & (1 << 1))); break;
- + case INP_AIL_DR2: value = !!(glbl_buttons & (1 << 1)); break;
- +
- + case INP_ELE_DR0: value = !!(glbl_buttons & (1 << 2)); break;
- + case INP_ELE_DR1: value = (!(glbl_buttons & (1 << 2)))
- + && (!(glbl_buttons & (1 << 3))); break;
- + case INP_ELE_DR2: value = !!(glbl_buttons & (1 << 3)); break;
- }
- return value;
- }
- diff -rupN original/src/target/devo7e/tx_buttons.c new/src/target/devo7e/tx_buttons.c
- --- original/src/target/devo7e/tx_buttons.c 2013-05-20 17:51:52.000000000 +0800
- +++ new/src/target/devo7e/tx_buttons.c 2013-05-20 17:30:05.000000000 +0800
- @@ -30,6 +30,8 @@ static const u8 buttonmap[] = {
- #define ROW_PORT GPIOC
- +#define GALEE_STYLE_KEYS 1
- +
- void Initialize_ButtonMatrix()
- {
- /* Enable AFIO */
- @@ -38,22 +40,24 @@ void Initialize_ButtonMatrix()
- /* Remap GPIO_Remap_SWJ_JTAGDisable */
- AFIO_MAPR |= AFIO_MAPR_SWJ_CFG_JTAG_OFF_SW_ON;
- - /* Enable GPIOB & GPIOE */
- + /* Enable GPIOB & GPIOC */
- rcc_peripheral_enable_clock(&RCC_APB2ENR, RCC_APB2ENR_IOPBEN);
- rcc_peripheral_enable_clock(&RCC_APB2ENR, RCC_APB2ENR_IOPCEN);
- /* PortB 5, 6, 7, 8 are open-drain output */
- - gpio_set_mode(GPIOB, GPIO_MODE_OUTPUT_50_MHZ,
- - GPIO_CNF_OUTPUT_PUSHPULL, GPIO5 | GPIO6 | GPIO7 | GPIO8);
- -
- - gpio_set(GPIOB, GPIO5 | GPIO6| GPIO7 | GPIO8);
- +#ifdef GALEE_STYLE_KEYS
- + gpio_set_mode(GPIOB, GPIO_MODE_OUTPUT_50_MHZ, GPIO_CNF_OUTPUT_OPENDRAIN, GPIO5 | GPIO6 | GPIO7 | GPIO8);
- +#else
- + gpio_set_mode(GPIOB, GPIO_MODE_OUTPUT_50_MHZ, GPIO_CNF_OUTPUT_PUSHPULL, GPIO5 | GPIO6 | GPIO7 | GPIO8);
- +#endif
- + gpio_set(GPIOB, GPIO5 | GPIO6 | GPIO7 | GPIO8);
- /* PortC 6-9 are pull-up inputs */
- - gpio_set_mode(GPIOC, GPIO_MODE_INPUT,
- - GPIO_CNF_INPUT_PULL_UPDOWN, GPIO6 | GPIO7 | GPIO8 | GPIO9);
- + gpio_set_mode(GPIOC, GPIO_MODE_INPUT, GPIO_CNF_INPUT_PULL_UPDOWN, GPIO6 | GPIO7 | GPIO8 | GPIO9);
- gpio_set(GPIOC, GPIO6 | GPIO7 | GPIO8 | GPIO9);
- }
- +u32 glbl_buttons = 0;
- u32 ScanButtons()
- {
- u8 idx = 0;
- @@ -71,5 +75,24 @@ u32 ScanButtons()
- idx++;
- }
- }
- - return result;
- + if (! (result & 0x0FFFFFFF)) {
- +#ifdef GALEE_STYLE_KEYS
- + gpio_set_mode(ROW_PORT, GPIO_MODE_OUTPUT_50_MHZ, GPIO_CNF_OUTPUT_OPENDRAIN, GPIO6);
- +#else
- + gpio_set_mode(GPIOB, GPIO_MODE_INPUT,GPIO_CNF_INPUT_PULL_UPDOWN, GPIO5 | GPIO6 | GPIO7 | GPIO8);
- + gpio_set_mode(ROW_PORT, GPIO_MODE_OUTPUT_50_MHZ, GPIO_CNF_OUTPUT_PUSHPULL, GPIO6);
- +#endif
- + gpio_clear(ROW_PORT, GPIO6);
- + glbl_buttons = (~(gpio_port_read(COL_PORT) >> 5)) & 0xf;
- +
- +#ifdef GALEE_STYLE_KEYS
- + gpio_set_mode(ROW_PORT, GPIO_MODE_INPUT, GPIO_CNF_INPUT_PULL_UPDOWN, GPIO6);
- +#else
- + gpio_set_mode(ROW_PORT, GPIO_MODE_INPUT, GPIO_CNF_INPUT_PULL_UPDOWN, GPIO6);
- + gpio_set_mode(GPIOB, GPIO_MODE_OUTPUT_50_MHZ, GPIO_CNF_OUTPUT_PUSHPULL, GPIO5 | GPIO6 | GPIO7 | GPIO8);
- +#endif
- + gpio_set(ROW_PORT, GPIO6);
- + }
- +
- + return result & 0x0FFFFFFF;
- }
复制代码
|
|