aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorTectu <joel@unormal.org>2013-03-19 23:22:38 -0700
committerTectu <joel@unormal.org>2013-03-19 23:22:38 -0700
commit5aed05bbcfc5762d18f41bd29c972d8ae3ae7a5a (patch)
tree44a3f97edb6a56e32d1d5001d5c69bd6b301cb90 /drivers
parent38e55c392163c564121d344db6325e6d4780a406 (diff)
parent5062603188f9d107ff460eb6485430c153126706 (diff)
downloaduGFX-5aed05bbcfc5762d18f41bd29c972d8ae3ae7a5a.tar.gz
uGFX-5aed05bbcfc5762d18f41bd29c972d8ae3ae7a5a.tar.bz2
uGFX-5aed05bbcfc5762d18f41bd29c972d8ae3ae7a5a.zip
Merge pull request #44 from resset/master
STMPE811: I2C reading routine
Diffstat (limited to 'drivers')
-rw-r--r--drivers/ginput/touch/STMPE811/ginput_lld_mouse.c37
-rw-r--r--drivers/ginput/touch/STMPE811/ginput_lld_mouse_board_embest_dmstf4bb.h21
2 files changed, 32 insertions, 26 deletions
diff --git a/drivers/ginput/touch/STMPE811/ginput_lld_mouse.c b/drivers/ginput/touch/STMPE811/ginput_lld_mouse.c
index b2f7ba76..bdae310e 100644
--- a/drivers/ginput/touch/STMPE811/ginput_lld_mouse.c
+++ b/drivers/ginput/touch/STMPE811/ginput_lld_mouse.c
@@ -57,24 +57,25 @@ static void setActiveWindow(uint16_t bl_x, uint16_t bl_y, uint16_t tr_x, uint16_
void ginput_lld_mouse_init(void) {
init_board();
- write_reg(STMPE811_REG_SYS_CTRL1, 1, 0x02); // software chip reset
- write_reg(STMPE811_REG_SYS_CTRL2, 1, 0x04); // temp. sensor clock on, GPIO clock off, touch clock on, ADC clock on
- write_reg(STMPE811_REG_INT_EN, 1, 0x03); //0x03
- write_reg(STMPE811_REG_ADC_CTRL1, 1, 0x49); //ADC conversion time = 80 clock ticks, 12-bit ADC, internacl voltage refernce
-
- chThdSleepMicroseconds(1000);
-
- write_reg(STMPE811_REG_ADC_CTRL2, 1, 0x01); //ADC speed 3.25MHz
- write_reg(STMPE811_REG_GPIO_AF, 1, 0x00); //GPIO alternate function - OFF
- write_reg(STMPE811_REG_TSC_CFG, 1, 0xA3); //avaraging 4, Touch detect delay 1ms, Panel driver settling time 1ms
- write_reg(STMPE811_REG_FIFO_TH, 1, 0x01); //FIFO trashold =1
- write_reg(STMPE811_REG_FIFO_STA, 1, 0x01); //FIFO reset enable
- write_reg(STMPE811_REG_FIFO_STA, 1, 0x00); //FIFO reset disable
- write_reg(STMPE811_REG_TSC_FRACT_XYZ, 1, 0x07); //Z axis data format
- write_reg(STMPE811_REG_TSC_I_DRIVE, 1, 0x01); //50mA touchscreen line current
- write_reg(STMPE811_REG_TSC_CTRL, 1, 0x03); //X&Y only, TSC enable
- write_reg(STMPE811_REG_INT_STA, 1, 0xFF); //clear all interrupts
- write_reg(STMPE811_REG_INT_CTRL, 1, 0x01); //level interrupt, enable intrrupts
+ write_reg(STMPE811_REG_SYS_CTRL1, 1, 0x02); // Software chip reset
+ write_reg(STMPE811_REG_SYS_CTRL2, 1, 0x0C); // Temp. sensor clock off, GPIO clock off, touch clock on, ADC clock on
+ write_reg(STMPE811_REG_INT_EN, 1, 0x03); // Interrupt on INT pin when FIFO is equal or above threshold value OR touch is detected
+ write_reg(STMPE811_REG_ADC_CTRL1, 1, 0x48); // ADC conversion time = 80 clock ticks, 12-bit ADC, internaal voltage refernce
+
+ chThdSleepMilliseconds(2);
+
+ write_reg(STMPE811_REG_ADC_CTRL2, 1, 0x01); // ADC speed 3.25MHz
+ write_reg(STMPE811_REG_GPIO_AF, 1, 0x00); // GPIO alternate function - OFF
+ // @TODO: decide which value should STMPE811_REG_TSC_CFG have - either 0x9A or from comment;)
+ write_reg(STMPE811_REG_TSC_CFG, 1, 0x9A); // Averaging 4, Touch detect delay 1ms, Panel driver settling time 1ms
+ write_reg(STMPE811_REG_FIFO_TH, 1, 0x01); // FIFO threshold =1
+ write_reg(STMPE811_REG_FIFO_STA, 1, 0x01); // FIFO reset enable
+ write_reg(STMPE811_REG_FIFO_STA, 1, 0x00); // FIFO reset disable
+ write_reg(STMPE811_REG_TSC_FRACT_XYZ, 1, 0x07); // Z axis data format
+ write_reg(STMPE811_REG_TSC_I_DRIVE, 1, 0x01); // 50mA touchscreen line current
+ write_reg(STMPE811_REG_TSC_CTRL, 1, 0x03); // X&Y only, TSC enable
+ write_reg(STMPE811_REG_INT_STA, 1, 0xFF); // Clear all interrupts
+ write_reg(STMPE811_REG_INT_CTRL, 1, 0x01); // Level interrupt, enable intrrupts
}
/**
diff --git a/drivers/ginput/touch/STMPE811/ginput_lld_mouse_board_embest_dmstf4bb.h b/drivers/ginput/touch/STMPE811/ginput_lld_mouse_board_embest_dmstf4bb.h
index 490b8dca..6808196d 100644
--- a/drivers/ginput/touch/STMPE811/ginput_lld_mouse_board_embest_dmstf4bb.h
+++ b/drivers/ginput/touch/STMPE811/ginput_lld_mouse_board_embest_dmstf4bb.h
@@ -69,7 +69,7 @@ static inline bool_t getpin_pressed(void) {
* @notapi
*/
static void write_reg(uint8_t reg, uint8_t n, uint16_t val) {
- uint8_t txbuf[1];
+ uint8_t txbuf[2];
i2cAcquireBus(&I2CD1);
@@ -79,7 +79,7 @@ static void write_reg(uint8_t reg, uint8_t n, uint16_t val) {
if(n == 1) {
txbuf[0] = val;
i2cMasterTransmitTimeout(&I2CD1, STMPE811_ADDR, txbuf, 1, NULL, 0, MS2ST(STMPE811_TIMEOUT));
- } else if(n == 3) {
+ } else if(n == 2) {
txbuf[0] = ((val & 0xFF00) >> 8);
txbuf[1] = (val & 0x00FF);
i2cMasterTransmitTimeout(&I2CD1, STMPE811_ADDR, txbuf, 2, NULL, 0, MS2ST(STMPE811_TIMEOUT));
@@ -100,21 +100,26 @@ static uint16_t read_reg(uint8_t reg, uint8_t n) {
uint8_t txbuf[1], rxbuf[2];
uint16_t ret;
+ rxbuf[0] = 0;
+ rxbuf[1] = 0;
+
i2cAcquireBus(&I2CD1);
txbuf[0] = reg;
- i2cMasterTransmitTimeout(&I2CD1, 0x82 >> 1, txbuf, 1, rxbuf, 2, MS2ST(STMPE811_TIMEOUT));
-
- i2cReleaseBus(&I2CD1);
+ i2cMasterTransmitTimeout(&I2CD1, STMPE811_ADDR, txbuf, 1, rxbuf, 0, MS2ST(STMPE811_TIMEOUT));
- if(n == 1)
+ if(n == 1) {
+ i2cMasterReceiveTimeout(&I2CD1, STMPE811_ADDR, rxbuf, 1, MS2ST(STMPE811_TIMEOUT));
ret = rxbuf[0];
- else if (n == 2)
+ } else if(n == 2) {
+ i2cMasterReceiveTimeout(&I2CD1, STMPE811_ADDR, rxbuf, 2, MS2ST(STMPE811_TIMEOUT));
ret = ((rxbuf[0] << 8) | (rxbuf[1] & 0xFF));
+ }
+
+ i2cReleaseBus(&I2CD1);
return ret;
}
#endif /* _GINPUT_LLD_MOUSE_BOARD_H */
/** @} */
-