void Adafruit_STMPE610::writeRegister8(uint8_t reg, uint8_t val) { spi_begin(); CSLow(); spiOut(reg); spiOut(val); CSHigh(); spi_end(); }
boolean Adafruit_STMPE610::begin() { // hardware SPI InitTransaction(); // SPI = mraa_spi_init(0); // which buss? will experment here... SPI = mraa_spi_init_software_cs(0); // which buss? will experment here... mraa_spi_frequency(SPI, 1000000); mraa_spi_lsbmode(SPI, false); mraa_spi_mode(SPI, MRAA_SPI_MODE0); m_spiMode = MRAA_SPI_MODE0; _gpioCS = mraa_gpio_init(_cs); mraa_gpio_dir(_gpioCS, MRAA_GPIO_OUT); CSHigh(); mraa_spi_write(SPI, 0x00); // try mode0 if (getVersion() != 0x811) { //Serial.println("try MODE1"); mraa_spi_frequency(SPI, 1000000); mraa_spi_lsbmode(SPI, false); mraa_spi_mode(SPI, MRAA_SPI_MODE1); m_spiMode = MRAA_SPI_MODE1; if (getVersion() != 0x811) { return false; } } writeRegister8(STMPE_SYS_CTRL1, STMPE_SYS_CTRL1_RESET); delay(10); for (uint8_t i=0; i<65; i++) { readRegister8(i); } writeRegister8(STMPE_SYS_CTRL2, 0x0); // turn on clocks! writeRegister8(STMPE_TSC_CTRL, STMPE_TSC_CTRL_XYZ | STMPE_TSC_CTRL_EN); // XYZ and enable! //Serial.println(readRegister8(STMPE_TSC_CTRL), HEX); writeRegister8(STMPE_INT_EN, STMPE_INT_EN_TOUCHDET); writeRegister8(STMPE_ADC_CTRL1, STMPE_ADC_CTRL1_10BIT | (0x6 << 4)); // 96 clocks per conversion writeRegister8(STMPE_ADC_CTRL2, STMPE_ADC_CTRL2_6_5MHZ); writeRegister8(STMPE_TSC_CFG, STMPE_TSC_CFG_4SAMPLE | STMPE_TSC_CFG_DELAY_1MS | STMPE_TSC_CFG_SETTLE_5MS); writeRegister8(STMPE_TSC_FRACTION_Z, 0x6); writeRegister8(STMPE_FIFO_TH, 1); writeRegister8(STMPE_FIFO_STA, STMPE_FIFO_STA_RESET); writeRegister8(STMPE_FIFO_STA, 0); // unreset writeRegister8(STMPE_TSC_I_DRIVE, STMPE_TSC_I_DRIVE_50MA); writeRegister8(STMPE_INT_STA, 0xFF); // reset all ints writeRegister8(STMPE_INT_CTRL, STMPE_INT_CTRL_POL_HIGH | STMPE_INT_CTRL_ENABLE); return true; }
uint8_t Adafruit_STMPE610::readRegister8(uint8_t reg) { uint8_t x ; spi_begin(); CSLow(); spiOut(0x80 | reg); spiOut(0x00); x = spiIn(); CSHigh(); spi_end(); return x; }
static void Write(int fCmd, uchar b) { /* (RW starts low, E starts low, CS# starts high) */ fCmd ? DCLow() : DCHigh(); // set data bit for command or data SetData(b); EHigh(); CSLow(); asm("nop"); // hold state for >= 60ns (1 instruction = 125ns for 8MHz uC) CSHigh(); ELow(); }
uint16_t Adafruit_STMPE610::readRegister16(uint8_t reg) { uint16_t x; spi_begin(); CSLow(); spiOut(0x80 | reg); spiOut(0x00); x = spiIn(); x<<=8; x |= spiIn(); CSHigh(); spi_end(); //Serial.print("$"); Serial.print(reg, HEX); //Serial.print(": 0x"); Serial.println(x, HEX); return x; }
static void SetControlState() { ELow(); // not enabled CSHigh(); // not selected RWLow(); // write by default }