summaryrefslogtreecommitdiff
path: root/ps2_vusb/config.h
diff options
context:
space:
mode:
authortmk <nobody@nowhere>2011-02-20 17:46:02 +0900
committertmk <nobody@nowhere>2011-02-22 03:09:12 +0900
commit47f5d8b545eec12ca74d8e7048bb5daa290d937e (patch)
tree048918055caafa7a6503d8fb5a077181d954dd85 /ps2_vusb/config.h
parent239bdbf41936566c0ae5b0cbd8c6bf7dd824f7fb (diff)
downloadqmk_firmware-47f5d8b545eec12ca74d8e7048bb5daa290d937e.tar.gz
qmk_firmware-47f5d8b545eec12ca74d8e7048bb5daa290d937e.zip
Synchronous USART support for PS/2 on V-USB stack
Diffstat (limited to 'ps2_vusb/config.h')
-rw-r--r--ps2_vusb/config.h88
1 files changed, 69 insertions, 19 deletions
diff --git a/ps2_vusb/config.h b/ps2_vusb/config.h
index 858fe883fb..9447dd9366 100644
--- a/ps2_vusb/config.h
+++ b/ps2_vusb/config.h
@@ -3,7 +3,9 @@
#define VENDOR_ID 0xFEED
-#define PRODUCT_ID 0x6512
+#define PRODUCT_ID 0x2233
+// TODO: share these strings with usbconfig.h
+// Edit usbconfig.h to change these.
#define MANUFACTURER t.m.k.
#define PRODUCT PS/2 keyboard converter
#define DESCRIPTION convert PS/2 keyboard to USB
@@ -33,36 +35,84 @@
#define PS2_CLOCK_PORT PORTD
#define PS2_CLOCK_PIN PIND
#define PS2_CLOCK_DDR DDRD
-#define PS2_CLOCK_BIT 3
+#define PS2_CLOCK_BIT 4
#define PS2_DATA_PORT PORTD
#define PS2_DATA_PIN PIND
#define PS2_DATA_DDR DDRD
-#define PS2_DATA_BIT 7
+#define PS2_DATA_BIT 0
-/* External interrupt for PS/2 clock line (optional) */
-#define PS2_INT_ENABLE() do { \
- EIMSK |= (1<<INT1); \
- EICRA |= ((1<<ISC11) | (0<<ISC10)); \
- EIFR |= (1<<INTF1); \
+
+// Synchronous USART is used to receive data from keyboard.
+// Use RXD pin for PS/2 DATA line and XCK for PS/2 CLOCK.
+// NOTE: This is recomended strongly if you use V-USB library.
+#define PS2_USE_USART
+
+// External or Pin Change Interrupt is used to receive data from keyboard.
+// Use INT1 or PCINTxx for PS/2 CLOCK line. see below.
+//#define PS2_USE_INT
+
+
+#ifdef PS2_USE_USART
+// synchronous, odd parity, 1-bit stop, 8-bit data, sample at falling edge
+// set DDR of CLOCK as input to be slave
+#define PS2_USART_INIT() do { \
+ PS2_CLOCK_DDR &= ~(1<<PS2_CLOCK_BIT); \
+ PS2_DATA_DDR &= ~(1<<PS2_DATA_BIT); \
+ UCSR0C = ((1 << UMSEL00) | \
+ (3 << UPM00) | \
+ (0 << USBS0) | \
+ (3 << UCSZ00) | \
+ (0 << UCPOL0)); \
+ UCSR0A = 0; \
+ UBRR0H = 0; \
+ UBRR0L = 0; \
} while (0)
+#define PS2_USART_RX_INT_ON() do { \
+ UCSR0B = ((1 << RXCIE0) | \
+ (1 << RXEN0)); \
+} while (0)
+#define PS2_USART_RX_POLL_ON() do { \
+ UCSR0B = (1 << RXEN0); \
+} while (0)
+#define PS2_USART_OFF() do { \
+ UCSR0C = 0; \
+ UCSR0B &= ~((1 << RXEN0) | \
+ (1 << TXEN0)); \
+} while (0)
+#define PS2_USART_RX_READY (UCSR0A & (1<<RXC0))
+#define PS2_USART_RX_DATA UDR0
+#define PS2_USART_ERROR (UCSR0A & ((1<<FE0) | (1<<DOR0) | (1<<UPE0)))
+#define PS2_USART_RX_VECT USART_RX_vect
+#endif
-#define PS2_INT_DISABLE() do { \
+
+#ifdef PS2_USE_INT
+/* INT1
+#define PS2_INT_INIT() do { \
+ EICRA |= ((1<<ISC11) | \
+ (0<<ISC10)); \
+} while (0)
+#define PS2_INT_ON() do { \
+ EIMSK |= (1<<INT1); \
+} while (0)
+#define PS2_INT_OFF() do { \
EIMSK &= ~(1<<INT1); \
} while (0)
#define PS2_INT_VECT INT1_vect
+*/
-/* Pin Change interrupt for PS/2 clock line (optional)
-#define PS2_INT_ENABLE() do { \
- PCMSK2 |= (1<<PCINT22); \
- PCICR |= (1<<PCIE2); \
- PCIFR |= (1<<PCIF2); \
+/* PCINT20 */
+#define PS2_INT_INIT() do { \
+ PCICR |= (1<<PCIE2); \
} while (0)
-
-#define PS2_INT_DISABLE() do { \
- PCMSK2 &= ~(1<<PCINT22); \
- PCICR &= ~(1<<PCIE); \
+#define PS2_INT_ON() do { \
+ PCMSK2 |= (1<<PCINT20); \
+} while (0)
+#define PS2_INT_OFF() do { \
+ PCMSK2 &= ~(1<<PCINT20); \
+ PCICR &= ~(1<<PCIE2); \
} while (0)
#define PS2_INT_VECT PCINT2_vect
-*/
+#endif
#endif