/*---------------------------------------------------------------------------*/ void board_i2c_shutdown() { interface = NO_INTERFACE; if(accessible()) { ti_lib_i2c_master_disable(I2C0_BASE); } ti_lib_prcm_peripheral_run_disable(PRCM_PERIPH_I2C0); ti_lib_prcm_load_set(); while(!ti_lib_prcm_load_get()); /* * Set all pins to GPIO Input and disable the output driver. Set internal * pull to match external pull * * SDA and SCL: external PU resistor * SDA HP and SCL HP: MPU PWR low */ ti_lib_ioc_pin_type_gpio_input(BOARD_IOID_SDA_HP); ti_lib_ioc_io_port_pull_set(BOARD_IOID_SDA_HP, IOC_IOPULL_DOWN); ti_lib_ioc_pin_type_gpio_input(BOARD_IOID_SCL_HP); ti_lib_ioc_io_port_pull_set(BOARD_IOID_SCL_HP, IOC_IOPULL_DOWN); ti_lib_ioc_pin_type_gpio_input(BOARD_IOID_SDA); ti_lib_ioc_io_port_pull_set(BOARD_IOID_SDA, IOC_IOPULL_UP); ti_lib_ioc_pin_type_gpio_input(BOARD_IOID_SCL); ti_lib_ioc_io_port_pull_set(BOARD_IOID_SCL, IOC_IOPULL_UP); }
/*---------------------------------------------------------------------------*/ void board_i2c_select(uint8_t new_interface, uint8_t address) { slave_addr = address; if(accessible() == false) { board_i2c_wakeup(); } if(new_interface != interface) { interface = new_interface; ti_lib_i2c_master_disable(I2C0_BASE); if(interface == BOARD_I2C_INTERFACE_0) { ti_lib_ioc_io_port_pull_set(BOARD_IOID_SDA, IOC_NO_IOPULL); ti_lib_ioc_io_port_pull_set(BOARD_IOID_SCL, IOC_NO_IOPULL); ti_lib_ioc_pin_type_i2c(I2C0_BASE, BOARD_IOID_SDA, BOARD_IOID_SCL); ti_lib_ioc_pin_type_gpio_input(BOARD_IOID_SDA_HP); ti_lib_ioc_pin_type_gpio_input(BOARD_IOID_SCL_HP); } else if(interface == BOARD_I2C_INTERFACE_1) { ti_lib_ioc_io_port_pull_set(BOARD_IOID_SDA_HP, IOC_NO_IOPULL); ti_lib_ioc_io_port_pull_set(BOARD_IOID_SCL_HP, IOC_NO_IOPULL); ti_lib_ioc_pin_type_i2c(I2C0_BASE, BOARD_IOID_SDA_HP, BOARD_IOID_SCL_HP); ti_lib_ioc_pin_type_gpio_input(BOARD_IOID_SDA); ti_lib_ioc_pin_type_gpio_input(BOARD_IOID_SCL); } /* Enable and initialize the I2C master module */ ti_lib_i2c_master_init_exp_clk(I2C0_BASE, ti_lib_sys_ctrl_clock_get(), true); } }
uint_least8_t ADS7846_rd_spi(void) { #if defined(SOFTWARE_SPI) ti_lib_ioc_pin_type_gpio_input(BOARD_IOID_SPI_MOSI); uint_least8_t data = 0; MOSI_LOW(); for (uint_least8_t bit = 8; bit != 0; bit--) { ADS7846_delay_ms(1); SCK_HIGH(); ADS7846_delay_ms(1); data <<= 1; if (MISO_READ()) { data |= 1; } else { //data |= 0; } SCK_LOW(); } return data; #else return SPI.transfer(0x00); #endif }
/*---------------------------------------------------------------------------*/ static void configure_unused_pins(void) { /* Turn off 3.3-V domain (lcd/sdcard power, output low) */ ti_lib_ioc_pin_type_gpio_output(BOARD_IOID_3V3_EN); ti_lib_gpio_pin_write(BOARD_3V3_EN, 0); /* Accelerometer (PWR output low, CSn output, high) */ ti_lib_ioc_pin_type_gpio_output(BOARD_IOID_ACC_PWR); ti_lib_gpio_pin_write(BOARD_ACC_PWR, 0); /* Ambient light sensor (off, output low) */ ti_lib_ioc_pin_type_gpio_output(BOARD_IOID_ALS_PWR); ti_lib_gpio_pin_write(BOARD_ALS_PWR, 0); ti_lib_ioc_pin_type_gpio_input(BOARD_IOID_ALS_OUT); ti_lib_ioc_io_port_pull_set(BOARD_IOID_ALS_OUT, IOC_NO_IOPULL); }
/*---------------------------------------------------------------------------*/ static void configure_unused_pins(void) { uint32_t pins[] = { BOARD_IOID_CS, BOARD_IOID_TDO, BOARD_IOID_TDI, BOARD_IOID_DIO12, BOARD_IOID_DIO15, BOARD_IOID_DIO21, BOARD_IOID_DIO22, BOARD_IOID_DIO23, BOARD_IOID_DIO24, BOARD_IOID_DIO25, BOARD_IOID_DIO26, BOARD_IOID_DIO27, BOARD_IOID_DIO28, BOARD_IOID_DIO29, BOARD_IOID_DIO30, IOID_UNUSED }; uint32_t *pin; for(pin = pins; *pin != IOID_UNUSED; pin++) { ti_lib_ioc_pin_type_gpio_input(*pin); ti_lib_ioc_io_port_pull_set(*pin, IOC_IOPULL_DOWN); } }
void ADS7846_begin(void) { ti_lib_ioc_pin_type_gpio_output(BOARD_IOID_TOUCH_CS); ti_lib_ioc_pin_type_gpio_output(BOARD_IOID_SPI_MOSI); ti_lib_ioc_pin_type_gpio_output(BOARD_IOID_SPI_SCK); ti_lib_ioc_pin_type_gpio_input(BOARD_IOID_SPI_MISO); CS_DISABLE(); #ifdef IRQ_PIN pinMode(IRQ_PIN, INPUT); digitalWrite(IRQ_PIN, HIGH); //pull-up #endif #ifdef BUSY_PIN pinMode(BUSY_PIN, INPUT); digitalWrite(BUSY_PIN, HIGH); //pull-up #endif #if !defined(SOFTWARE_SPI) SPI.setDataMode(SPI_MODE0); SPI.begin(); #endif //set vars tp_matrix.div = 0; tp_x = 0; tp_y = 0; tp_last_x = 0; tp_last_y = 0; lcd_x = 0; lcd_y = 0; pressure = 0; ADS7846_setOrientation(0); return; }