xt_usb: read data on falling edge soft/hard reset
See https://github.com/tmk/tmk_keyboard/wiki/IBM-PC-XT-Keyboard-Protocol - read data on falling edge of clock - add soft reset and hard reset
This commit is contained in:
parent
3526fcaf15
commit
8a92f254e1
6 changed files with 78 additions and 39 deletions
|
|
@ -11,7 +11,9 @@ TMK_DIR = ../../tmk_core
|
|||
TARGET_DIR = .
|
||||
|
||||
# project specific files
|
||||
SRC = matrix.c \
|
||||
SRC = protocol/xt_interrupt.c \
|
||||
protocol/xt_io_avr.c \
|
||||
matrix.c \
|
||||
led.c
|
||||
|
||||
ifdef KEYMAP
|
||||
|
|
@ -61,7 +63,7 @@ ARCH = AVR8
|
|||
F_USB = $(F_CPU)
|
||||
|
||||
# Interrupt driven control endpoint task(+60)
|
||||
#OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
|
||||
OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
|
||||
|
||||
|
||||
# Boot Section Size in *bytes*
|
||||
|
|
@ -71,6 +73,7 @@ F_USB = $(F_CPU)
|
|||
# LUFA bootloader 4096
|
||||
# USBaspLoader 2048
|
||||
OPT_DEFS += -DBOOTLOADER_SIZE=512
|
||||
#OPT_DEFS += -DBOOTLOADER_SIZE=4096
|
||||
|
||||
|
||||
# Build Options
|
||||
|
|
@ -84,11 +87,6 @@ COMMAND_ENABLE = yes # Commands for debug and configuration
|
|||
NKRO_ENABLE = yes # USB Nkey Rollover
|
||||
|
||||
|
||||
# XT/2 Options
|
||||
#
|
||||
XT_USE_INT = yes # uses external interrupt for falling edge of PS/2 clock pin
|
||||
|
||||
|
||||
# Optimize size but this may cause error "relocation truncated to fit"
|
||||
#EXTRALDFLAGS = -Wl,--relax
|
||||
|
||||
|
|
|
|||
|
|
@ -45,8 +45,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||
/*
|
||||
* XT Pin interrupt
|
||||
*/
|
||||
#ifdef XT_USE_INT
|
||||
/* uses INT1 for clock line(ATMega32U4) */
|
||||
#define XT_CLOCK_PORT PORTD
|
||||
#define XT_CLOCK_PIN PIND
|
||||
#define XT_CLOCK_DDR DDRD
|
||||
|
|
@ -55,9 +53,23 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||
#define XT_DATA_PIN PIND
|
||||
#define XT_DATA_DDR DDRD
|
||||
#define XT_DATA_BIT 0
|
||||
#define XT_RST_PORT PORTB
|
||||
#define XT_RST_PIN PINB
|
||||
#define XT_RST_DDR DDRB
|
||||
#define XT_RST_BIT 7
|
||||
|
||||
/* hard reset: low pulse for 500ms and after that HiZ for safety */
|
||||
#define XT_RESET() do { \
|
||||
XT_RST_PORT &= ~(1<<XT_RST_BIT); \
|
||||
XT_RST_DDR |= (1<<XT_RST_BIT); \
|
||||
_delay_ms(500); \
|
||||
XT_RST_DDR &= ~(1<<XT_RST_BIT); \
|
||||
} while (0)
|
||||
|
||||
/* INT1 for falling edge of clock line */
|
||||
#define XT_INT_INIT() do { \
|
||||
EICRA |= ((1<<ISC11) | \
|
||||
(1<<ISC10)); \
|
||||
(0<<ISC10)); \
|
||||
} while (0)
|
||||
#define XT_INT_ON() do { \
|
||||
EIMSK |= (1<<INT1); \
|
||||
|
|
@ -66,6 +78,5 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||
EIMSK &= ~(1<<INT1); \
|
||||
} while (0)
|
||||
#define XT_INT_VECT INT1_vect
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue