diff options
author | tmk <[email protected]> | 2015-04-10 01:32:04 +0900 |
---|---|---|
committer | tmk <[email protected]> | 2015-04-10 01:32:04 +0900 |
commit | a074364c3731d66b56d988c8a6c960a83ea0e0a1 (patch) | |
tree | 5a4ecf854c41b510b4378bacb7c7228297f8bc58 /protocol/ps2_io_avr.c | |
download | qmk_firmware-a074364c3731d66b56d988c8a6c960a83ea0e0a1.tar.gz qmk_firmware-a074364c3731d66b56d988c8a6c960a83ea0e0a1.zip |
Squashed 'tmk_core/' content from commit 05caacc
git-subtree-dir: tmk_core
git-subtree-split: 05caaccec92694bb24c8c3c3a9940b96efd4605c
Diffstat (limited to 'protocol/ps2_io_avr.c')
-rw-r--r-- | protocol/ps2_io_avr.c | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/protocol/ps2_io_avr.c b/protocol/ps2_io_avr.c new file mode 100644 index 0000000000..ed462345ba --- /dev/null +++ b/protocol/ps2_io_avr.c @@ -0,0 +1,75 @@ +#include <stdbool.h> +#include <avr/io.h> +#include <util/delay.h> + +/* Check port settings for clock and data line */ +#if !(defined(PS2_CLOCK_PORT) && \ + defined(PS2_CLOCK_PIN) && \ + defined(PS2_CLOCK_DDR) && \ + defined(PS2_CLOCK_BIT)) +# error "PS/2 clock port setting is required in config.h" +#endif + +#if !(defined(PS2_DATA_PORT) && \ + defined(PS2_DATA_PIN) && \ + defined(PS2_DATA_DDR) && \ + defined(PS2_DATA_BIT)) +# error "PS/2 data port setting is required in config.h" +#endif + + +/* + * Clock + */ +void clock_init(void) +{ +} + +void clock_lo(void) +{ + PS2_CLOCK_PORT &= ~(1<<PS2_CLOCK_BIT); + PS2_CLOCK_DDR |= (1<<PS2_CLOCK_BIT); +} + +void clock_hi(void) +{ + /* input with pull up */ + PS2_CLOCK_DDR &= ~(1<<PS2_CLOCK_BIT); + PS2_CLOCK_PORT |= (1<<PS2_CLOCK_BIT); +} + +bool clock_in(void) +{ + PS2_CLOCK_DDR &= ~(1<<PS2_CLOCK_BIT); + PS2_CLOCK_PORT |= (1<<PS2_CLOCK_BIT); + _delay_us(1); + return PS2_CLOCK_PIN&(1<<PS2_CLOCK_BIT); +} + +/* + * Data + */ +void data_init(void) +{ +} + +void data_lo(void) +{ + PS2_DATA_PORT &= ~(1<<PS2_DATA_BIT); + PS2_DATA_DDR |= (1<<PS2_DATA_BIT); +} + +void data_hi(void) +{ + /* input with pull up */ + PS2_DATA_DDR &= ~(1<<PS2_DATA_BIT); + PS2_DATA_PORT |= (1<<PS2_DATA_BIT); +} + +bool data_in(void) +{ + PS2_DATA_DDR &= ~(1<<PS2_DATA_BIT); + PS2_DATA_PORT |= (1<<PS2_DATA_BIT); + _delay_us(1); + return PS2_DATA_PIN&(1<<PS2_DATA_BIT); +} |