From 85caee84eec03dd1f04ceb8d01494322e713fd65 Mon Sep 17 00:00:00 2001 From: James McKenzie Date: Mon, 3 Aug 2015 00:22:04 +0100 Subject: fish --- app/i2c.c | 132 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ app/i2c1.c | 132 --------------------------------------------------------- app/i2c2.c | 132 --------------------------------------------------------- app/keypad.c | 91 +++++++++++++++++++++++++++++++++++++++ doc/TTP229.pdf | Bin 0 -> 132234 bytes 5 files changed, 223 insertions(+), 264 deletions(-) create mode 100644 app/i2c.c delete mode 100644 app/i2c1.c delete mode 100644 app/i2c2.c create mode 100644 app/keypad.c create mode 100644 doc/TTP229.pdf diff --git a/app/i2c.c b/app/i2c.c new file mode 100644 index 0000000..db60931 --- /dev/null +++ b/app/i2c.c @@ -0,0 +1,132 @@ +#include "project.h" + + +#define GPIO_SCL GPIOB +#define GPIO_SDA GPIOB +#define SCL GPIO13 +#define SDA GPIO14 + +#define I2C_BB_DELAY do { delay_us(1); } while (0) + +int +i2c1_bb (int scl, int sda) +{ + if (scl) + gpio_set (GPIO_SCL, SCL); + else + gpio_clear (GPIO_SCL, SCL); + if (sda) + gpio_set (GPIO_SDA, SDA); + else + gpio_clear (GPIO_SDA, SDA); + + return ! !(gpio_get (GPIO_SDA, SDA) & SDA); + +} + + +void +i2c1_bb_start (void) +{ + i2c1_bb (1, 1); + I2C_BB_DELAY; + i2c1_bb (1, 0); + I2C_BB_DELAY; + i2c1_bb (0, 0); + I2C_BB_DELAY; +} + + +void +i2c1_bb_stop (void) +{ + i2c1_bb (0, 0); + I2C_BB_DELAY; + i2c1_bb (1, 0); + I2C_BB_DELAY; + i2c1_bb (1, 1); + I2C_BB_DELAY; +} + +int +i2c1_bb_send_data (uint8_t v) +{ + int c; + + + for (c = 0x80; c; c >>= 1) + { + i2c1_bb (0, c & v); + I2C_BB_DELAY; + i2c1_bb (1, c & v); + I2C_BB_DELAY; + i2c1_bb (0, c & v); + I2C_BB_DELAY; + } + + i2c1_bb (0, 1); + I2C_BB_DELAY; + i2c1_bb (1, 1); + I2C_BB_DELAY; + c = i2c1_bb (1, 1); + i2c1_bb (0, 1); + + return c; +} + + +int +i2c1_bb_start_transaction (uint8_t a, int wnr) +{ + int ret; + + i2c1_bb_start (); + ret = i2c1_bb_send_data (a << 1 | ! !(wnr)); + + + return ret; +} + +#if 0 +void +i2c1_bb_scan (void) +{ + int i, r; + + return; + i2cp_reset (); + + printf ("Probing bus\r\n"); + for (i = 0; i < 128; ++i) + { + while (i2cp_lock ()); + i2cp_start (); + i2cp_abort_start (); + i2cp_stop (); + i2cp_abort_stop (); + r = i2cp_start_transaction (i, I2C_WRITE); + i2cp_stop (); + i2cp_unlock (); + if (!r) + printf ("Found device at address 0x%x\r\n", i); + usart1_drain (); + } + printf ("Done\r\n"); + i2cp_reset (); + +} +#endif + +void +i2c1_bb_init (void) +{ + gpio_set_mode (GPIO_SCL, GPIO_MODE_OUTPUT_50_MHZ, + GPIO_CNF_OUTPUT_OPENDRAIN, SCL); + gpio_set_mode (GPIO_SDA, GPIO_MODE_OUTPUT_50_MHZ, + GPIO_CNF_OUTPUT_OPENDRAIN, SDA); + + i2c1_bb_start (); + i2c1_bb_stop (); + + +} diff --git a/app/i2c1.c b/app/i2c1.c deleted file mode 100644 index db60931..0000000 --- a/app/i2c1.c +++ /dev/null @@ -1,132 +0,0 @@ -#include "project.h" - - -#define GPIO_SCL GPIOB -#define GPIO_SDA GPIOB -#define SCL GPIO13 -#define SDA GPIO14 - -#define I2C_BB_DELAY do { delay_us(1); } while (0) - -int -i2c1_bb (int scl, int sda) -{ - if (scl) - gpio_set (GPIO_SCL, SCL); - else - gpio_clear (GPIO_SCL, SCL); - if (sda) - gpio_set (GPIO_SDA, SDA); - else - gpio_clear (GPIO_SDA, SDA); - - return ! !(gpio_get (GPIO_SDA, SDA) & SDA); - -} - - -void -i2c1_bb_start (void) -{ - i2c1_bb (1, 1); - I2C_BB_DELAY; - i2c1_bb (1, 0); - I2C_BB_DELAY; - i2c1_bb (0, 0); - I2C_BB_DELAY; -} - - -void -i2c1_bb_stop (void) -{ - i2c1_bb (0, 0); - I2C_BB_DELAY; - i2c1_bb (1, 0); - I2C_BB_DELAY; - i2c1_bb (1, 1); - I2C_BB_DELAY; -} - -int -i2c1_bb_send_data (uint8_t v) -{ - int c; - - - for (c = 0x80; c; c >>= 1) - { - i2c1_bb (0, c & v); - I2C_BB_DELAY; - i2c1_bb (1, c & v); - I2C_BB_DELAY; - i2c1_bb (0, c & v); - I2C_BB_DELAY; - } - - i2c1_bb (0, 1); - I2C_BB_DELAY; - i2c1_bb (1, 1); - I2C_BB_DELAY; - c = i2c1_bb (1, 1); - i2c1_bb (0, 1); - - return c; -} - - -int -i2c1_bb_start_transaction (uint8_t a, int wnr) -{ - int ret; - - i2c1_bb_start (); - ret = i2c1_bb_send_data (a << 1 | ! !(wnr)); - - - return ret; -} - -#if 0 -void -i2c1_bb_scan (void) -{ - int i, r; - - return; - i2cp_reset (); - - printf ("Probing bus\r\n"); - for (i = 0; i < 128; ++i) - { - while (i2cp_lock ()); - i2cp_start (); - i2cp_abort_start (); - i2cp_stop (); - i2cp_abort_stop (); - r = i2cp_start_transaction (i, I2C_WRITE); - i2cp_stop (); - i2cp_unlock (); - if (!r) - printf ("Found device at address 0x%x\r\n", i); - usart1_drain (); - } - printf ("Done\r\n"); - i2cp_reset (); - -} -#endif - -void -i2c1_bb_init (void) -{ - gpio_set_mode (GPIO_SCL, GPIO_MODE_OUTPUT_50_MHZ, - GPIO_CNF_OUTPUT_OPENDRAIN, SCL); - gpio_set_mode (GPIO_SDA, GPIO_MODE_OUTPUT_50_MHZ, - GPIO_CNF_OUTPUT_OPENDRAIN, SDA); - - i2c1_bb_start (); - i2c1_bb_stop (); - - -} diff --git a/app/i2c2.c b/app/i2c2.c deleted file mode 100644 index 77701cc..0000000 --- a/app/i2c2.c +++ /dev/null @@ -1,132 +0,0 @@ -#include "project.h" - - -#define GPIO_SCL GPIOA -#define GPIO_SDA GPIOB -#define SCL GPIO5 -#define SDA GPIO11 - -#define I2C_BB_DELAY do { delay_us(1); } while (0) - -int -i2c2_bb (int scl, int sda) -{ - if (scl) - gpio_set (GPIO_SCL, SCL); - else - gpio_clear (GPIO_SCL, SCL); - if (sda) - gpio_set (GPIO_SDA, SDA); - else - gpio_clear (GPIO_SDA, SDA); - - return ! !(gpio_get (GPIO_SDA, SDA) & SDA); - -} - - -void -i2c2_bb_start (void) -{ - i2c2_bb (1, 1); - I2C_BB_DELAY; - i2c2_bb (1, 0); - I2C_BB_DELAY; - i2c2_bb (0, 0); - I2C_BB_DELAY; -} - - -void -i2c2_bb_stop (void) -{ - i2c2_bb (0, 0); - I2C_BB_DELAY; - i2c2_bb (1, 0); - I2C_BB_DELAY; - i2c2_bb (1, 1); - I2C_BB_DELAY; -} - -int -i2c2_bb_send_data (uint8_t v) -{ - int c; - - - for (c = 0x80; c; c >>= 1) - { - i2c2_bb (0, c & v); - I2C_BB_DELAY; - i2c2_bb (1, c & v); - I2C_BB_DELAY; - i2c2_bb (0, c & v); - I2C_BB_DELAY; - } - - i2c2_bb (0, 1); - I2C_BB_DELAY; - i2c2_bb (1, 1); - I2C_BB_DELAY; - c = i2c2_bb (1, 1); - i2c2_bb (0, 1); - - return c; -} - - -int -i2c2_bb_start_transaction (uint8_t a, int wnr) -{ - int ret; - - i2c2_bb_start (); - ret = i2c2_bb_send_data (a << 1 | ! !(wnr)); - - - return ret; -} - -#if 0 -void -i2c2_bb_scan (void) -{ - int i, r; - - return; - i2cp_reset (); - - printf ("Probing bus\r\n"); - for (i = 0; i < 128; ++i) - { - while (i2cp_lock ()); - i2cp_start (); - i2cp_abort_start (); - i2cp_stop (); - i2cp_abort_stop (); - r = i2cp_start_transaction (i, I2C_WRITE); - i2cp_stop (); - i2cp_unlock (); - if (!r) - printf ("Found device at address 0x%x\r\n", i); - usart1_drain (); - } - printf ("Done\r\n"); - i2cp_reset (); - -} -#endif - -void -i2c2_bb_init (void) -{ - gpio_set_mode (GPIO_SCL, GPIO_MODE_OUTPUT_50_MHZ, - GPIO_CNF_OUTPUT_OPENDRAIN, SCL); - gpio_set_mode (GPIO_SDA, GPIO_MODE_OUTPUT_50_MHZ, - GPIO_CNF_OUTPUT_OPENDRAIN, SDA); - - i2c2_bb_start (); - i2c2_bb_stop (); - - -} diff --git a/app/keypad.c b/app/keypad.c new file mode 100644 index 0000000..daea5c7 --- /dev/null +++ b/app/keypad.c @@ -0,0 +1,91 @@ +#include "project.h" + +#define GPIO_CLOCK GPIOA +#define GPIO_DATA GPIOB +#define CLOCK GPIO5 +#define DATA GPIO11 + +#define KEYPAD_DELAY do { delay_us(1); } while (0) + +uint16_t keypad_read(void) +{ +uint16_t ret=0; +uint16_t c; + +/*Reset the state machine in the keypad */ + +gpio_set (GPIO_DATA, DATA); +KEYPAD_DELAY; +gpio_clear (GPIO_DATA, DATA); +KEYPAD_DELAY; +gpio_set (GPIO_DATA, DATA); +KEYPAD_DELAY; + +gpio_clear (GPIO_CLOCK, CLOCK); +KEYPAD_DELAY; + +for (c=0x8000;c;c>>=1) +{ +gpio_set (GPIO_CLOCK, CLOCK); +KEYPAD_DELAY; +if (!(gpio_get (GPIO_DATA, DATA) & DATA)) ret|=c; +gpio_clear (GPIO_CLOCK, CLOCK); +KEYPAD_DELAY; +} + +gpio_set (GPIO_CLOCK, CLOCK); + +return ret; +} + +static void +keypad_scan (void) +{ + + uint16_t v; + char buf[16]; + + + v=keypad_read(); + + sprintf (buf, "%04x", v); + lcd_write (buf, 0, 1); + + +} + +void +keypad_tick (void) +{ + static int c; + + c++; + + if (c < 73) + return; + + c = 0; + + + keypad_scan (); + + +} + + + + + + +void +keypad_init (void) +{ + + gpio_set_mode (GPIO_CLOCK, GPIO_MODE_OUTPUT_50_MHZ, + GPIO_CNF_OUTPUT_OPENDRAIN, CLOCK); + gpio_set_mode (GPIO_DATA, GPIO_MODE_OUTPUT_50_MHZ, + GPIO_CNF_OUTPUT_OPENDRAIN, DATA); + + + +} diff --git a/doc/TTP229.pdf b/doc/TTP229.pdf new file mode 100644 index 0000000..ca4c896 Binary files /dev/null and b/doc/TTP229.pdf differ -- cgit v1.2.3