infinity: Add initial files for keyboard support
This commit is contained in:
@@ -53,6 +53,7 @@ You can find some keyboard specific projects under `converter` and `keyboard` di
|
||||
* [macway](keyboard/macway/) - [Compact keyboard mod][GH_macway] [retired]
|
||||
* [KMAC](keyboard/kmac/) - Korean custom keyboard
|
||||
* [Lightsaber](keyboard/lightsaber/) - Korean custom keyboard
|
||||
* [Infinity](keyboard/infinity/) - Massdrop [Infinity keyboard][Infinity]
|
||||
|
||||
[GH_macway]: http://geekhack.org/showwiki.php?title=Island:11930
|
||||
[GH_hhkb]: http://geekhack.org/showwiki.php?title=Island:12047
|
||||
@@ -72,6 +73,7 @@ You can find some keyboard specific projects under `converter` and `keyboard` di
|
||||
[PC98]: http://en.wikipedia.org/wiki/NEC_PC-9801
|
||||
[Sun]: http://en.wikipedia.org/wiki/Sun-3
|
||||
[IIGS]: http://en.wikipedia.org/wiki/Apple_IIGS
|
||||
[Infinity]: https://www.massdrop.com/buy/infinity-keyboard-kit
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -35,6 +35,10 @@ typedef uint32_t matrix_row_t;
|
||||
#define MATRIX_IS_ON(row, col) (matrix_get_row(row) && (1<<col))
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/* number of matrix rows */
|
||||
uint8_t matrix_rows(void);
|
||||
/* number of matrix columns */
|
||||
@@ -48,7 +52,7 @@ bool matrix_is_modified(void) __attribute__ ((deprecated));
|
||||
/* whether a swtich is on */
|
||||
bool matrix_is_on(uint8_t row, uint8_t col);
|
||||
/* matrix state on row */
|
||||
matrix_row_t matrix_get_row(uint8_t row);
|
||||
matrix_row_t matrix_get_row(uint8_t row);
|
||||
/* print matrix for debug */
|
||||
void matrix_print(void);
|
||||
|
||||
@@ -57,5 +61,8 @@ void matrix_print(void);
|
||||
void matrix_power_up(void);
|
||||
void matrix_power_down(void);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
@@ -6,6 +6,10 @@
|
||||
|
||||
#define STRING_STACK_LIMIT 120
|
||||
|
||||
//TODO
|
||||
int xprintf(const char* format, ...) { return 0; }
|
||||
|
||||
#if 0
|
||||
/* mbed Serial */
|
||||
Serial ser(UART_TX, UART_RX);
|
||||
|
||||
@@ -44,3 +48,4 @@ int xprintf(const char* format, ...)
|
||||
return r;
|
||||
*/
|
||||
}
|
||||
#endif
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -11,6 +11,10 @@ vpath %.cpp .:$(MBED_DIR):$(TMK_DIR)
|
||||
OBJDIR = ./build
|
||||
|
||||
OBJECTS = \
|
||||
$(OBJDIR)/matrix.o \
|
||||
$(OBJDIR)/keymap.o \
|
||||
$(OBJDIR)/keymap_common.o \
|
||||
$(OBJDIR)/led.o \
|
||||
$(OBJDIR)/main.o
|
||||
|
||||
CONFIG_H = config.h
|
||||
@@ -29,5 +33,5 @@ include $(TMK_DIR)/tool/mbed/mbed.mk
|
||||
include $(TMK_DIR)/tool/mbed/common.mk
|
||||
include $(TMK_DIR)/tool/mbed/gcc.mk
|
||||
|
||||
program:
|
||||
program: $(OBJDIR)/$(PROJECT).bin
|
||||
dfu-util -D $(OBJDIR)/$(PROJECT).bin
|
||||
|
||||
81
keyboard/infinity/README
Normal file
81
keyboard/infinity/README
Normal file
@@ -0,0 +1,81 @@
|
||||
Infinity
|
||||
========
|
||||
Massdrop Infinity Keyboard:
|
||||
https://www.massdrop.com/buy/infinity-keyboard-kit
|
||||
|
||||
kiibohd controller(MD1):
|
||||
https://github.com/kiibohd/controller
|
||||
|
||||
DFU bootloader:
|
||||
https://github.com/kiibohd/controller/tree/master/Bootloader
|
||||
|
||||
Program with bootloader:
|
||||
$ dfu-util -D kiibohd.dfu.bin
|
||||
|
||||
Pinout:
|
||||
https://github.com/kiibohd/controller/blob/master/Scan/MD1/pinout
|
||||
|
||||
MCHCK compatible:
|
||||
https://mchck.org/about/
|
||||
|
||||
MCU Freescale MK20DX128VLF5 48-QFP:
|
||||
http://cache.freescale.com/files/32bit/doc/data_sheet/K20P48M50SF0.pdf
|
||||
|
||||
|
||||
|
||||
Pin Usage
|
||||
=========
|
||||
Key Matrix:
|
||||
Strobe(output high): PTB0 PTB1 PTB2 PTB3 PTB16 PTB17 PTC4 PTC5 PTD0
|
||||
Sense(input with pull-down): PTD1 PTD2 PTD3 PTD4 PTD5 PTD6 PTD7
|
||||
|
||||
|
||||
SWD pinout:
|
||||
SWD_CLK(PTA0) SWD_DIO(PTA3)
|
||||
SWD pins are placed next to reset button; SWD_CLK, SWD_DIO, GND, VCC from top.
|
||||
Note that RESET is also needed to get full control with OpenOCD.
|
||||
|
||||
LED:
|
||||
PTA19(turns on with output high)
|
||||
|
||||
|
||||
|
||||
Memory map
|
||||
==========
|
||||
kiibohd bootloader: Lib/mk20dx128vlf5.bootloader.ld
|
||||
0x0000_0000 +-------------------+ -----------------+---------------+ Vector table
|
||||
| .vectors | ------------. | StackPointer0 | of Bootloader
|
||||
| .startup | \ | ResetHandler1 |
|
||||
| .rodata | `--+---------------+ 0xF8
|
||||
0x0000_0400 | .flashconfig(0x10)|
|
||||
_0410 | .text |
|
||||
| .init |
|
||||
0x0000_1000 +-------------------+ -----------------+---------------+ Vector table
|
||||
| _app_rom | ------------. | | of App
|
||||
| | \ | |
|
||||
| | `--+---------------+
|
||||
| |
|
||||
~ ~
|
||||
| |
|
||||
0x07FF_FFFF +-------------------+ 128KB
|
||||
|
||||
|
||||
0x1FFF_E000 +-------------------+ -----------------+---------------+ Vector table
|
||||
_E0F8 | | ------------. | | of App(copied)
|
||||
| | \ | |
|
||||
| | `--+---------------+ mbed NVIC
|
||||
| |
|
||||
| RAM |
|
||||
| 8KB|
|
||||
0x2000_0000 +-------------------+
|
||||
| |
|
||||
| |
|
||||
| |
|
||||
| |
|
||||
| RAM |
|
||||
| 8KB|
|
||||
0x2000_2000 +-------------------+ _estack
|
||||
|
||||
|
||||
|
||||
|
||||
47
keyboard/infinity/keymap.c
Normal file
47
keyboard/infinity/keymap.c
Normal file
@@ -0,0 +1,47 @@
|
||||
#include "keymap_common.h"
|
||||
|
||||
const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
/* Layer 0: Default Layer
|
||||
* ,-----------------------------------------------------------.
|
||||
* |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| `|BSp|
|
||||
* |-----------------------------------------------------------|
|
||||
* |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \|
|
||||
* |-----------------------------------------------------------|
|
||||
* |Contro| A| S| D| F| G| H| J| K| L| ;| '|Enter |
|
||||
* |-----------------------------------------------------------|
|
||||
* |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift |Fn0|
|
||||
* |-----------------------------------------------------------'
|
||||
* | |Gui|Alt | Space |Alt |Gui| | |
|
||||
* `-----------------------------------------------------------'
|
||||
*/
|
||||
[0] =
|
||||
KEYMAP(ESC, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, BSLS, GRV, \
|
||||
TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC,BSPC, \
|
||||
LCTL,A, S, D, F, G, H, J, K, L, SCLN,QUOT,ENT, \
|
||||
LSFT,Z, X, C, V, B, N, M, COMM,DOT, SLSH,RSFT,FN0, \
|
||||
NO, LGUI,LALT, SPC, RALT,RGUI,NO, NO),
|
||||
/* Layer 1: HHKB mode (HHKB Fn)
|
||||
* ,-----------------------------------------------------------.
|
||||
* |Pwr| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Ins|Del|
|
||||
* |-----------------------------------------------------------|
|
||||
* |Caps | | | | | | | |Psc|Slk|Pus|Up | |Backs|
|
||||
* |-----------------------------------------------------------|
|
||||
* | |VoD|VoU|Mut| | | *| /|Hom|PgU|Lef|Rig|Enter |
|
||||
* |-----------------------------------------------------------|
|
||||
* | | | | | | | +| -|End|PgD|Dow| | |
|
||||
* `-----------------------------------------------------------'
|
||||
* | |Gui|Alt | Space |Alt |Gui| | |
|
||||
* `-----------------------------------------------------------'
|
||||
*/
|
||||
[1]=
|
||||
KEYMAP(PWR, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, INS, DEL, \
|
||||
CAPS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,PSCR,SLCK,PAUS, UP, TRNS, BSPC, \
|
||||
TRNS,VOLD,VOLU,MUTE,TRNS,TRNS,PAST,PSLS,HOME,PGUP,LEFT,RGHT,PENT, \
|
||||
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,PPLS,PMNS,END, PGDN,DOWN,TRNS,TRNS, \
|
||||
TRNS,TRNS,TRNS, TRNS, TRNS,TRNS,TRNS,TRNS),
|
||||
};
|
||||
|
||||
const uint16_t PROGMEM fn_actions[] = {
|
||||
[0] = ACTION_LAYER_MOMENTARY(1),
|
||||
};
|
||||
|
||||
30
keyboard/infinity/keymap_common.c
Normal file
30
keyboard/infinity/keymap_common.c
Normal file
@@ -0,0 +1,30 @@
|
||||
/*
|
||||
Copyright 2012,2013 Jun Wako <wakojun@gmail.com>
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#include "keymap_common.h"
|
||||
|
||||
|
||||
/* translates key to keycode */
|
||||
uint8_t keymap_key_to_keycode(uint8_t layer, keypos_t key)
|
||||
{
|
||||
return pgm_read_byte(&keymaps[(layer)][(key.row)][(key.col)]);
|
||||
}
|
||||
|
||||
/* translates Fn keycode to action */
|
||||
action_t keymap_fn_to_action(uint8_t keycode)
|
||||
{
|
||||
return (action_t){ .code = pgm_read_word(&fn_actions[FN_INDEX(keycode)]) };
|
||||
}
|
||||
58
keyboard/infinity/keymap_common.h
Normal file
58
keyboard/infinity/keymap_common.h
Normal file
@@ -0,0 +1,58 @@
|
||||
/*
|
||||
Copyright 2014 Jun Wako <wakojun@gmail.com>
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#ifndef KEYMAP_COMMON_H
|
||||
#define KEYMAP_COMMON_H
|
||||
|
||||
#include <stdint.h>
|
||||
#include <stdbool.h>
|
||||
#include "keycode.h"
|
||||
#include "action.h"
|
||||
#include "action_macro.h"
|
||||
#include "report.h"
|
||||
#include "host.h"
|
||||
#include "print.h"
|
||||
#include "debug.h"
|
||||
#include "keymap.h"
|
||||
|
||||
|
||||
extern const uint8_t keymaps[][MATRIX_ROWS][MATRIX_COLS];
|
||||
extern const uint16_t fn_actions[];
|
||||
|
||||
|
||||
/* GH60 keymap definition macro
|
||||
* K2C, K31 and K3C are extra keys for ISO
|
||||
*/
|
||||
#define KEYMAP( \
|
||||
K00, K10, K20, K30, K40, K50, K60, K70, K80, K01, K11, K21, K31, K41, K86, \
|
||||
K51, K61, K71, K81, K02, K12, K22, K32, K42, K52, K62, K72, K82, K03, \
|
||||
K13, K23, K33, K43, K53, K63, K73, K83, K04, K14, K24, K34, K44, \
|
||||
K54, K64, K74, K84, K05, K15, K25, K35, K45, K55, K65, K75, K85, \
|
||||
K06, K16, K26, K36, K46, K56, K66, K76 \
|
||||
) { \
|
||||
{ KC_##K00, KC_##K01, KC_##K02, KC_##K03, KC_##K04, KC_##K05, KC_##K06 }, \
|
||||
{ KC_##K10, KC_##K11, KC_##K12, KC_##K13, KC_##K14, KC_##K15, KC_##K16 }, \
|
||||
{ KC_##K20, KC_##K21, KC_##K22, KC_##K23, KC_##K24, KC_##K25, KC_##K26 }, \
|
||||
{ KC_##K30, KC_##K31, KC_##K32, KC_##K33, KC_##K34, KC_##K35, KC_##K36 }, \
|
||||
{ KC_##K40, KC_##K41, KC_##K42, KC_##K43, KC_##K44, KC_##K45, KC_##K46 }, \
|
||||
{ KC_##K50, KC_##K51, KC_##K52, KC_##K53, KC_##K54, KC_##K55, KC_##K56 }, \
|
||||
{ KC_##K60, KC_##K61, KC_##K62, KC_##K63, KC_##K64, KC_##K65, KC_##K66 }, \
|
||||
{ KC_##K70, KC_##K71, KC_##K72, KC_##K73, KC_##K74, KC_##K75, KC_##K76 }, \
|
||||
{ KC_##K80, KC_##K81, KC_##K82, KC_##K83, KC_##K84, KC_##K85, KC_##K86 } \
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
25
keyboard/infinity/led.c
Normal file
25
keyboard/infinity/led.c
Normal file
@@ -0,0 +1,25 @@
|
||||
/*
|
||||
Copyright 2011 Jun Wako <wakojun@gmail.com>
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "stdint.h"
|
||||
#include "led.h"
|
||||
|
||||
|
||||
/* HHKB has no LEDs */
|
||||
void led_set(uint8_t usb_led)
|
||||
{
|
||||
}
|
||||
@@ -1,20 +1,44 @@
|
||||
//#include "mbed.h"
|
||||
#include "MK20D5.h"
|
||||
#include "wait.h"
|
||||
#include "gpio_api.h"
|
||||
#include "PinNames.h"
|
||||
#include "matrix.h"
|
||||
#include "timer.h"
|
||||
|
||||
#include "action.h"
|
||||
#include "keycode.h"
|
||||
#include "host.h"
|
||||
#include "host_driver.h"
|
||||
#include "mbed_driver.h"
|
||||
|
||||
|
||||
int main() {
|
||||
gpio_t led;
|
||||
gpio_init_out(&led, PTA19);
|
||||
|
||||
uint16_t t = 0;
|
||||
|
||||
host_set_driver(&mbed_driver);
|
||||
keyboard_init();
|
||||
|
||||
while(1) {
|
||||
wait_ms(500);
|
||||
uint32_t delay = 0xf;
|
||||
while (delay--) {
|
||||
uint32_t delay2 = 0xffff;
|
||||
while (delay2--) ;
|
||||
keyboard_task();
|
||||
|
||||
bool matrix_on = false;
|
||||
matrix_scan();
|
||||
for (int i = 0; i < MATRIX_ROWS; i++) {
|
||||
if (matrix_get_row(i)) {
|
||||
matrix_on = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (matrix_on)
|
||||
gpio_write(&led, 1);
|
||||
else {
|
||||
if (timer_elapsed(t) > 500) {
|
||||
gpio_write(&led, !gpio_read(&led));
|
||||
t = timer_read();
|
||||
}
|
||||
}
|
||||
gpio_write(&led, !gpio_read(&led));
|
||||
}
|
||||
}
|
||||
|
||||
107
keyboard/infinity/matrix.c
Normal file
107
keyboard/infinity/matrix.c
Normal file
@@ -0,0 +1,107 @@
|
||||
#include <stdint.h>
|
||||
#include <stdbool.h>
|
||||
#include "gpio_api.h"
|
||||
#include "timer.h"
|
||||
#include "wait.h"
|
||||
#include "matrix.h"
|
||||
|
||||
|
||||
#ifndef DEBOUNCE
|
||||
#define DEBOUNCE 5
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Infinity Pinusage:
|
||||
* Column pins are input with internal pull-down. Row pins are output and strobe with high.
|
||||
* Key is high or 1 when it turns on.
|
||||
*
|
||||
* col: { PTD1, PTD2, PTD3, PTD4, PTD5, PTD6, PTD7 }
|
||||
* row: { PTB0, PTB1, PTB2, PTB3, PTB16, PTB17, PTC4, PTC5, PTD0 }
|
||||
*/
|
||||
static gpio_t col[MATRIX_COLS];
|
||||
static gpio_t row[MATRIX_ROWS];
|
||||
|
||||
/* matrix state(1:on, 0:off) */
|
||||
static matrix_row_t matrix[MATRIX_ROWS];
|
||||
static matrix_row_t matrix_debouncing[MATRIX_ROWS];
|
||||
static bool debouncing = false;
|
||||
static uint16_t debouncing_time = 0;
|
||||
|
||||
|
||||
void matrix_init(void)
|
||||
{
|
||||
/* Column(sense) */
|
||||
gpio_init_in_ex(&col[0], PTD1, PullDown);
|
||||
gpio_init_in_ex(&col[1], PTD2, PullDown);
|
||||
gpio_init_in_ex(&col[2], PTD3, PullDown);
|
||||
gpio_init_in_ex(&col[3], PTD4, PullDown);
|
||||
gpio_init_in_ex(&col[4], PTD5, PullDown);
|
||||
gpio_init_in_ex(&col[5], PTD6, PullDown);
|
||||
gpio_init_in_ex(&col[6], PTD7, PullDown);
|
||||
|
||||
/* Row(strobe) */
|
||||
gpio_init_out_ex(&row[0], PTB0, 0);
|
||||
gpio_init_out_ex(&row[1], PTB1, 0);
|
||||
gpio_init_out_ex(&row[2], PTB2, 0);
|
||||
gpio_init_out_ex(&row[3], PTB3, 0);
|
||||
gpio_init_out_ex(&row[4], PTB16, 0);
|
||||
gpio_init_out_ex(&row[5], PTB17, 0);
|
||||
gpio_init_out_ex(&row[6], PTC4, 0);
|
||||
gpio_init_out_ex(&row[7], PTC5, 0);
|
||||
gpio_init_out_ex(&row[8], PTD0, 0);
|
||||
}
|
||||
|
||||
uint8_t matrix_scan(void)
|
||||
{
|
||||
for (int i = 0; i < MATRIX_ROWS; i++) {
|
||||
matrix_row_t r = 0;
|
||||
|
||||
gpio_write(&row[i], 1);
|
||||
wait_us(1); // need wait to settle pin state
|
||||
for (int j = 0; j < MATRIX_COLS; j++) {
|
||||
if (gpio_read(&col[j])) {
|
||||
r |= (1<<j);
|
||||
}
|
||||
}
|
||||
gpio_write(&row[i], 0);
|
||||
|
||||
if (matrix_debouncing[i] != r) {
|
||||
matrix_debouncing[i] = r;
|
||||
debouncing = true;
|
||||
debouncing_time = timer_read();
|
||||
}
|
||||
}
|
||||
|
||||
if (debouncing && timer_elapsed(debouncing_time) > DEBOUNCE) {
|
||||
for (int i = 0; i < MATRIX_ROWS; i++) {
|
||||
matrix[i] = matrix_debouncing[i];
|
||||
}
|
||||
debouncing = false;
|
||||
}
|
||||
/*
|
||||
if (debouncing) {
|
||||
if (--debouncing) {
|
||||
return 0;
|
||||
} else {
|
||||
for (int i = 0; i < MATRIX_ROWS; i++) {
|
||||
matrix[i] = matrix_debouncing[i];
|
||||
}
|
||||
}
|
||||
}
|
||||
*/
|
||||
return 1;
|
||||
}
|
||||
|
||||
bool matrix_is_on(uint8_t row, uint8_t col)
|
||||
{
|
||||
return (matrix[row] & (1<<col));
|
||||
}
|
||||
|
||||
matrix_row_t matrix_get_row(uint8_t row)
|
||||
{
|
||||
return matrix[row];
|
||||
}
|
||||
|
||||
void matrix_print(void)
|
||||
{
|
||||
}
|
||||
@@ -4,6 +4,7 @@
|
||||
CPU = -mcpu=cortex-m4 -mthumb
|
||||
|
||||
CC_SYMBOLS += \
|
||||
-DTARGET_INFINITY \
|
||||
-DTARGET_K20D50M \
|
||||
-DTARGET_M4 \
|
||||
-DTARGET_CORTEX_M \
|
||||
@@ -17,6 +18,7 @@ CC_SYMBOLS += \
|
||||
OBJECTS += \
|
||||
$(OBJDIR)/mbed-infinity/cmsis_nvic.o \
|
||||
$(OBJDIR)/mbed-infinity/system_MK20D5.o \
|
||||
$(OBJDIR)/mbed-infinity/USBHAL_KL25Z.o \
|
||||
$(OBJDIR)/libraries/mbed/targets/cmsis/TARGET_Freescale/TARGET_K20D50M/TOOLCHAIN_GCC_ARM/startup_MK20D5.o \
|
||||
$(OBJDIR)/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20D50M/analogin_api.o \
|
||||
$(OBJDIR)/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20D50M/gpio_api.o \
|
||||
|
||||
39
keyboard/infinity/mbed-infinity/README
Normal file
39
keyboard/infinity/mbed-infinity/README
Normal file
@@ -0,0 +1,39 @@
|
||||
mbed fix for Infinity
|
||||
=====================
|
||||
Without linker script patch it doesn't place vector table in final binary.
|
||||
And clock is configured to 48MHz using internal clock reference and FLL multiplication.
|
||||
|
||||
|
||||
mbed/targets/cmsis/TARGET_Freescale/TARGET_K20D50M/system_MK20D5.c
|
||||
Fix SystemInit: clock setup for internal clock. Inifinity has no external Xtal.
|
||||
|
||||
mbed/targets/cmsis/TARGET_Freescale/TARGET_K20D50M/cmsis_nvic.c
|
||||
Fix NVIC vector address of firmware 0x1000 instead of 0x0
|
||||
|
||||
mbed/targets/cmsis/TARGET_Freescale/TARGET_K20D50M/TOOLCHAIN_GCC_ARM/MK20D5.ld
|
||||
Fix memory map for Infinity bootloader
|
||||
Flash starts at 0x1000
|
||||
No flash config bytes sector
|
||||
|
||||
USBDevice/USBDevice/USBHAL_KL25Z.cpp
|
||||
Fix USB clock setup, see below.
|
||||
|
||||
|
||||
2015/01/04 Based on mbed-sdk @2f63fa7d78a26.
|
||||
|
||||
|
||||
|
||||
Kinetis USB config
|
||||
==================
|
||||
Clock source: Internal reference clock wth FLL
|
||||
SIM_SOPT[USBSRC] = 1(MCGPLLCLK/MCGFLLCLK)
|
||||
SIM_SOPT[PLLSEL] = 0(MCGFLLCLK)
|
||||
|
||||
Clock dividor:
|
||||
SIM_CLKDIV2[USBDIV] = 0
|
||||
SIM_CLKDIV2[USBFAC] = 0
|
||||
|
||||
Clock enable:
|
||||
SIM_SCGC4[USBOTG] = 1
|
||||
|
||||
|
||||
557
keyboard/infinity/mbed-infinity/USBHAL_KL25Z.cpp
Normal file
557
keyboard/infinity/mbed-infinity/USBHAL_KL25Z.cpp
Normal file
File diff suppressed because it is too large
Load Diff
25
keyboard/infinity/tool/README
Normal file
25
keyboard/infinity/tool/README
Normal file
@@ -0,0 +1,25 @@
|
||||
OpenOCD config files for Kinetis
|
||||
================================
|
||||
http://nemuisan.blog.bai.ne.jp/?eid=192848#OPENOCD
|
||||
|
||||
These are needed for SWD debug and programing bootloader. To flash keyboard firmware use 'dfu-util'.
|
||||
|
||||
Flash security of Freescale kinetis
|
||||
-----------------------------------
|
||||
If FSEC of flash config is changed accidentally SWD/JTAG you can't get debug access until doing 'mdm mass_erase' with JTAG, CMSIS-DAP or OpenSAD adapter. HLA(high level adapter) like stlink doesn't work for this.
|
||||
|
||||
|
||||
Example
|
||||
-------
|
||||
Debug:
|
||||
$ openocd -s tool -f tool/openocd.cfg
|
||||
$ arm-none-eabi-gdb build/infinity.elf -ex "target remote localhost:3333"
|
||||
|
||||
Flash bootloader:
|
||||
$ openocd -s tool -f tool/openocd.cfg -c "mt_flash kiibohd_bootloader.bin"
|
||||
|
||||
|
||||
Infinity SWD pinout
|
||||
-------------------
|
||||
SWD pins are placed next to reset button; SWD_CLK, SWD_DIO, GND, VCC from top.
|
||||
Note that RESET is also needed to get full control with OpenOCD.
|
||||
@@ -17,6 +17,7 @@ CC_SYMBOLS = \
|
||||
-D__MBED__=1
|
||||
|
||||
OBJECTS += \
|
||||
$(OBJDIR)/libraries/USBDevice/USBDevice/USBHAL_LPC11U.o \
|
||||
$(OBJDIR)/libraries/mbed/targets/cmsis/TARGET_NXP/TARGET_LPC11UXX/TOOLCHAIN_GCC_ARM/startup_LPC11xx.o \
|
||||
$(OBJDIR)/libraries/mbed/targets/cmsis/TARGET_NXP/TARGET_LPC11UXX/cmsis_nvic.o \
|
||||
$(OBJDIR)/libraries/mbed/targets/cmsis/TARGET_NXP/TARGET_LPC11UXX/system_LPC11Uxx.o \
|
||||
|
||||
@@ -4,7 +4,9 @@
|
||||
OBJECTS += \
|
||||
$(OBJDIR)/libraries/mbed/common/gpio.o \
|
||||
$(OBJDIR)/libraries/mbed/common/us_ticker_api.o \
|
||||
$(OBJDIR)/libraries/mbed/common/wait_api.o
|
||||
$(OBJDIR)/libraries/mbed/common/wait_api.o \
|
||||
$(OBJDIR)/libraries/USBDevice/USBDevice/USBDevice.o
|
||||
|
||||
|
||||
# $(OBJDIR)/libraries/mbed/common/assert.o \
|
||||
# $(OBJDIR)/libraries/mbed/common/board.o \
|
||||
@@ -75,9 +77,9 @@ INCLUDE_PATHS += \
|
||||
-I$(MBED_DIR)/libraries/USBDevice/USBSerial
|
||||
|
||||
# TMK mbed protocol
|
||||
#OBJECTS += \
|
||||
# $(OBJDIR)/protocol/mbed/mbed_driver.o \
|
||||
# $(OBJDIR)/protocol/mbed/HIDKeyboard.o
|
||||
OBJECTS += \
|
||||
$(OBJDIR)/protocol/mbed/mbed_driver.o \
|
||||
$(OBJDIR)/protocol/mbed/HIDKeyboard.o
|
||||
|
||||
INCLUDE_PATHS += \
|
||||
-I$(TMK_DIR)/protocol/mbed
|
||||
|
||||
Reference in New Issue
Block a user