void InitSwDrivers(void) { SPI_HandleTypeDef hspi1; // Main Grid Area // init selectors HAL_GPIO_WritePin(GPIOG, SWBNKENA_Pin, GPIO_PIN_SET); HAL_GPIO_WritePin(GPIOG, SWBNKA_Pin|SWBNKB_Pin|SWBNKC_Pin|SWBNKSEL_Pin, GPIO_PIN_RESET); //encoders area //init chip selects HAL_GPIO_WritePin(GPIOF, SB_CS3_Pin, GPIO_PIN_SET); HAL_GPIO_WritePin(GPIOB, SB_CS1_Pin|SB_CS2_Pin, GPIO_PIN_SET); HAL_GPIO_WritePin(SB_CS4_GPIO_Port, SB_CS4_Pin, GPIO_PIN_SET); // init encoder expanders // enable interrupts on the expander pins uint8_t tx_data[8]; tx_data[0] = 0x40; tx_data[1] = 0x00; // start at IODIRA tx_data[2] = 0xFF; //IODIRA tx_data[3] = 0xFF; //IODIRB tx_data[4] = 0x00; //IOPOLA tx_data[5] = 0x00; //IOPOLB tx_data[6] = 0xCC; //GPINTENA tx_data[7] = 0x1B; //GPINTGPB // do the transaction HAL_GPIO_WritePin(GPIOB, SB_CS1_Pin, GPIO_PIN_RESET); // enable selector output HAL_SPI_Transmit(&hspi1, &tx_data[0], 8, HAL_MAX_DELAY); HAL_GPIO_WritePin(GPIOB, SB_CS1_Pin, GPIO_PIN_SET); // disable selector output HAL_GPIO_WritePin(GPIOB, SB_CS2_Pin, GPIO_PIN_RESET); // enable selector output HAL_SPI_Transmit(&hspi1, tx_data, 8, HAL_MAX_DELAY); HAL_GPIO_WritePin(GPIOB, SB_CS2_Pin, GPIO_PIN_SET); // disable selector output HAL_GPIO_WritePin(GPIOB, SB_CS3_Pin, GPIO_PIN_RESET); // enable selector output HAL_SPI_Transmit(&hspi1, tx_data, 8, HAL_MAX_DELAY); HAL_GPIO_WritePin(GPIOB, SB_CS3_Pin, GPIO_PIN_SET); // disable selector output HAL_Delay(5); tx_data[2] = 0xD8; tx_data[3] = 0x1B; HAL_GPIO_WritePin(GPIOB, SB_CS4_Pin, GPIO_PIN_RESET); // enable selector output HAL_SPI_Transmit(&hspi1, tx_data, 6, HAL_MAX_DELAY); HAL_GPIO_WritePin(GPIOB, SB_CS4_Pin, GPIO_PIN_SET); // disable selector output HAL_Delay(5); tx_data[0] = 0x40; tx_data[1] = 0x0A; // IOCON tx_data[2] = 0x44; // connect irq pins, open drain output tx_data[3] = 0x44; // do the transaction HAL_GPIO_WritePin(GPIOB, SB_CS1_Pin, GPIO_PIN_RESET); // enable selector output HAL_SPI_Transmit(&hspi1, tx_data, 4, HAL_MAX_DELAY); HAL_GPIO_WritePin(GPIOB, SB_CS1_Pin, GPIO_PIN_SET); // disable selector output HAL_Delay(5); HAL_GPIO_WritePin(GPIOB, SB_CS2_Pin, GPIO_PIN_RESET); // enable selector output HAL_SPI_Transmit(&hspi1, tx_data, 4, HAL_MAX_DELAY); HAL_GPIO_WritePin(GPIOB, SB_CS2_Pin, GPIO_PIN_SET); // disable selector output HAL_Delay(5); HAL_GPIO_WritePin(GPIOB, SB_CS3_Pin, GPIO_PIN_RESET); // enable selector output HAL_SPI_Transmit(&hspi1, tx_data, 4, HAL_MAX_DELAY); HAL_GPIO_WritePin(GPIOB, SB_CS3_Pin, GPIO_PIN_SET); // disable selector output HAL_Delay(5); HAL_GPIO_WritePin(GPIOB, SB_CS4_Pin, GPIO_PIN_RESET); // enable selector output HAL_SPI_Transmit(&hspi1, tx_data, 4, HAL_MAX_DELAY); HAL_GPIO_WritePin(GPIOB, SB_CS4_Pin, GPIO_PIN_SET); // disable selector output HAL_Delay(5); /* // set up switch handler btnTest=&btnScan; btnDown=&btnDwns; btnUp=&btnUps; btnHold=&btnHolds; SetSwitchHoldParams(0,167); //setup length button hold time for ~1 sec */ }