diff options
Diffstat (limited to 'boards/addons/gdisp/board_SSD1306_chibios_16.1.3_stm32f4.h')
-rw-r--r-- | boards/addons/gdisp/board_SSD1306_chibios_16.1.3_stm32f4.h | 93 |
1 files changed, 93 insertions, 0 deletions
diff --git a/boards/addons/gdisp/board_SSD1306_chibios_16.1.3_stm32f4.h b/boards/addons/gdisp/board_SSD1306_chibios_16.1.3_stm32f4.h new file mode 100644 index 00000000..361562fa --- /dev/null +++ b/boards/addons/gdisp/board_SSD1306_chibios_16.1.3_stm32f4.h @@ -0,0 +1,93 @@ +#ifndef _GDISP_LLD_BOARD_H +#define _GDISP_LLD_BOARD_H + +// Pin & SPI setup +#define SPI_DRIVER (&SPID2) +#define SPI_PORT GPIOB +#define SCK_PAD 10 +#define MOSI_PAD 15 + +#define CS_PORT GPIOB +#define RESET_PORT GPIOB +#define DC_PORT GPIOB +#define CS_PAD 3 // 0 = chip selected +#define RESET_PAD 4 // 0 = reset +#define DC_PAD 5 // control = 0, data = 1 + +static SPIConfig spi_cfg = { + NULL, + CS_PORT, + CS_PAD, + SPI_CR1_BR_1 +}; + +static GFXINLINE void init_board(GDisplay* g) +{ + (void)g; + + g->board = 0; + + // Set pin modes + palSetPadMode(SPI_PORT, SCK_PAD, PAL_MODE_ALTERNATE(5) | PAL_STM32_OSPEED_HIGHEST); + palSetPadMode(SPI_PORT, MOSI_PAD, PAL_MODE_ALTERNATE(5) | PAL_STM32_OSPEED_HIGHEST); + palSetPadMode(RESET_PORT, RESET_PAD, PAL_MODE_OUTPUT_PUSHPULL | PAL_STM32_OSPEED_HIGHEST); + palSetPadMode(CS_PORT, CS_PAD, PAL_MODE_OUTPUT_PUSHPULL | PAL_STM32_OSPEED_HIGHEST); + palSetPadMode(DC_PORT, DC_PAD, PAL_MODE_OUTPUT_PUSHPULL | PAL_STM32_OSPEED_HIGHEST); + + // Apply default states + palSetPad(CS_PORT, CS_PAD); + palSetPad(RESET_PORT, RESET_PAD); + palClearPad(DC_PORT, DC_PAD); + + // Start the SPI driver + spiStart(SPI_DRIVER, &spi_cfg); +} + +static GFXINLINE void post_init_board(GDisplay* g) +{ + (void)g; +} + + +static GFXINLINE void setpin_reset(GDisplay* g, bool_t state) +{ + (void)g; + + palWritePad(RESET_PORT, RESET_PAD, !state); +} + +static GFXINLINE void acquire_bus(GDisplay* g) +{ + (void)g; + + spiAcquireBus(SPI_DRIVER); + spiSelect(SPI_DRIVER); +} + +static GFXINLINE void release_bus(GDisplay* g) +{ + (void)g; + + spiUnselect(SPI_DRIVER); + spiReleaseBus(SPI_DRIVER); +} + +static GFXINLINE void write_cmd(GDisplay* g, uint8_t cmd) +{ + (void)g; + + static uint8_t buf; + palClearPad(DC_PORT, DC_PAD); + buf = cmd; + spiSend(SPI_DRIVER, 1, &buf); +} + +static GFXINLINE void write_data(GDisplay* g, uint8_t* data, uint16_t length) +{ + (void)g; + + palSetPad(DC_PORT, DC_PAD); + spiSend(SPI_DRIVER, length, data); +} + +#endif /* _GDISP_LLD_BOARD_H */ |