140 lines
3.5 KiB
C
140 lines
3.5 KiB
C
|
/*
|
||
|
* This file is subject to the terms of the GFX License. If a copy of
|
||
|
* the license was not distributed with this file, you can obtain one at:
|
||
|
*
|
||
|
* http://ugfx.org/license.html
|
||
|
*/
|
||
|
|
||
|
#ifndef _GDISP_LLD_BOARD_H
|
||
|
#define _GDISP_LLD_BOARD_H
|
||
|
|
||
|
#define SSD1306_RESET_PORT GPIOB
|
||
|
#define SSD1306_RESET_PIN 5
|
||
|
#define SSD1306_MISO_PORT GPIOB
|
||
|
#define SSD1306_MISO_PIN 8
|
||
|
#define SSD1306_MOSI_PORT GPIOB
|
||
|
#define SSD1306_MOSI_PIN 7
|
||
|
#define SSD1306_SCK_PORT GPIOB
|
||
|
#define SSD1306_SCK_PIN 6
|
||
|
#define SSD1306_CS_PORT GPIOB
|
||
|
#define SSD1306_CS_PIN 5
|
||
|
#define SET_RST palSetPad(SSD1306_RESET_PORT, SSD1306_RESET_PIN);
|
||
|
#define CLR_RST palClearPad(SSD1306_RESET_PORT, SSD1306_RESET_PIN);
|
||
|
int8_t vccstate;
|
||
|
int32_t row_offset = 0;
|
||
|
|
||
|
/*
|
||
|
* SPI1 configuration structure.
|
||
|
* Speed 42MHz, CPHA=0, CPOL=0, 8bits frames, MSb transmitted first.
|
||
|
* The slave select line is the pin 4 on the port GPIOA.
|
||
|
*/
|
||
|
static const SPIConfig spi1config = {
|
||
|
NULL,
|
||
|
/* HW dependent part.*/
|
||
|
SSD1306_MISO_PORT,
|
||
|
SSD1306_MISO_PIN,
|
||
|
0
|
||
|
//SPI_CR1_BR_0
|
||
|
};
|
||
|
|
||
|
/**
|
||
|
* @brief Initialize the board for the display.
|
||
|
* @notes This board definition uses GPIO and assumes exclusive access to these GPIO pins
|
||
|
* @notapi
|
||
|
*/
|
||
|
static inline void init_board(void) {
|
||
|
|
||
|
// RESET pin.
|
||
|
palSetPadMode(SSD1306_RESET_PORT, SSD1306_RESET_PIN, PAL_MODE_OUTPUT_PUSHPULL);
|
||
|
|
||
|
spiInit();
|
||
|
palSetPadMode(SSD1306_MISO_PORT, SSD1306_MISO_PIN, PAL_MODE_ALTERNATE(1)|
|
||
|
PAL_STM32_OSPEED_HIGHEST);
|
||
|
palSetPadMode(SSD1306_MOSI_PORT, SSD1306_MOSI_PIN, PAL_MODE_ALTERNATE(1)|
|
||
|
PAL_STM32_OSPEED_HIGHEST);
|
||
|
palSetPadMode(SSD1306_SCK_PORT, SSD1306_SCK_PIN, PAL_MODE_ALTERNATE(1)|
|
||
|
PAL_STM32_OSPEED_HIGHEST);
|
||
|
palSetPad(SSD1306_CS_PORT, SSD1306_CS_PIN);
|
||
|
palSetPadMode(SSD1306_CS_PORT, SSD1306_CS_PIN, PAL_MODE_ALTERNATE(1)|
|
||
|
PAL_STM32_OSPEED_HIGHEST);
|
||
|
vccstate = SSD1306_SWITCHCAPVCC;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @brief Set or clear the lcd reset pin.
|
||
|
* @param[in] state TRUE = lcd in reset, FALSE = normal operation
|
||
|
* @notapi
|
||
|
*/
|
||
|
static inline void setpin_reset(bool_t state) {
|
||
|
if(state)
|
||
|
SET_RST
|
||
|
else
|
||
|
CLR_RST
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @brief Set the lcd back-light level.
|
||
|
* @param[in] percent 0 to 100%
|
||
|
* @notapi
|
||
|
*/
|
||
|
static inline void set_backlight(uint8_t percent) {
|
||
|
// Since we are on OLED no backlight needed
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @brief Take exclusive control of the bus
|
||
|
* @notapi
|
||
|
*/
|
||
|
static inline void acquire_bus(void) {
|
||
|
spiAcquireBus(&SPID1);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @brief Release exclusive control of the bus
|
||
|
* @notapi
|
||
|
*/
|
||
|
static inline void release_bus(void) {
|
||
|
spiReleaseBus(&SPID1);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @brief Send command to the display.
|
||
|
* @param[in] cmd The command to send *
|
||
|
* @notapi
|
||
|
*/
|
||
|
static inline void write_cmd(uint8_t cmd) {
|
||
|
uint8_t command[] = { 0x00, // Co = 0, D/C = 0
|
||
|
cmd },
|
||
|
txLength = sizeof(command)/sizeof(command[0]),
|
||
|
rxLength = 0;
|
||
|
|
||
|
spiStart(&SPID1, &spi1config);
|
||
|
spiSelect(&SPID1);
|
||
|
spiStartSend(&SPID1, txLength, command);
|
||
|
spiUnselect(&SPID1);
|
||
|
spiStop(&SPID1);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @brief Send data to the display.
|
||
|
* @param[in] data The data to send
|
||
|
* @notapi
|
||
|
*/
|
||
|
static inline void write_data(uint8_t* data, uint16_t length) {
|
||
|
uint8_t command[length+1],
|
||
|
txLength = length+1;
|
||
|
command[0] = 0x40; // Co = 0, D/C = 1
|
||
|
memmove(&command[1], data, length);
|
||
|
|
||
|
spiStart(&SPID1, &spi1config);
|
||
|
spiSelect(&SPID1);
|
||
|
spiStartSend(&SPID1, txLength, command);
|
||
|
spiUnselect(&SPID1);
|
||
|
spiStop(&SPID1);
|
||
|
}
|
||
|
|
||
|
|
||
|
#endif /* _GDISP_LLD_BOARD_H */
|
||
|
/** @} */
|
||
|
|